Ha nem működik a panelon egy indikátor…

Több panel is szkripteket használ egyes adatok kiíratására, akár az i3wm, akár a bspwm alatt. De ez a leírás bármely olyan esetben jó iránymutatás lesz, amiben egy-egy Linux disztribúcióhoz kapott, vagy letöltött panelon valamelyik kijelző nem működik. Ilyenkor nem kell megijedni, ez természetes. Miért? Mert ezek a scriptek jellemzően úgy működnek, hogy van egy parancs, aminek a kimenetét valamilyen megoldással szűri egy program, és csak a kívánt eredményt kapjuk meg. Majd a megkapott rövid adatot írja ki a panelra a panelvezérlés. Bár így elég homályos, nézzünk egy egyszerű példást. Mivel nem konkrét panelról, hanem általánosságban írok, így az első lépés nagyon öntevékenynek kell lenni: a saját panelodban megkeresed azt a kijelzést, ami nem úgy, vagy egyáltalán nem jelez ki semmit. Majd megnézed, hogy az melyik scriptet, vagy programocskát hívja meg. Általában ezt nem nehéz kikeresni, de ha már itt elakadsz, akkor az erős indikátor, hogy nem ismered a panelodat, annak a felépítését! Előbb olvasd el a leírását, mert ha nagyon belenyúlsz valamibe, akkor csak rontasz a helyzeten.

Panel indikátor javítása

Ok, nézzünk egy CPU hőfok kijelzési indikátort, mert az egy egyszerű dolog és nagy a valószínűsége, hogy ezzel lehetnek gondok.

Ha már megtaláltad azt a scriptet, ami ezt vezérli, akkor nincs más dolgod megkeresni azt a sor, ami az adatokat kérdezi le, és szortírozza. Amiben nagy valószínűséggel lesz egy olyan szó, hogy awk. Az awk egy csordafegyver, ami nagyon sokat tud a szövegekkel kapcsolatban. De most nem is kell ismerni az összes lehetőségét, csak rákeresel, és valami ilyent kapsz:

# Get information from cores temp thanks to sensors

rawData=$( sensors | grep -m 1 Core | awk '{print substr($3, 2, length($3)-5)}' )

Aki már olvasott tőlem szkriptes témában, annak elsőre beugrik ez bizony egy változó. Így az egyenlőség előtti részhez nem kellene nyúlni, mert az határoz megy egy nevet, amit magában szkriptben használnak, így ha megváltoztatod, azzal tönkreteszed a működést!

Vizsgáljuk meg magát a parancs részt:

sensors | grep -m 1 Core | awk '{print substr($3, 2, length($3)-5)

Ahogy írtam: az elején van egy parancs, amivel valamit lekérdezünk, a pipe | meg továbbadja a kimenetet az awk-nak, ami kiszedi azt, ami kell, és azután már a szkript elvégzi a munkáját, a panelon meg ott látod, ami kell.

A sensors egy szenzor érték lekérdező. Amit ki ki kell próbálni! Terminált nyitunk és lefuttatjuk.

Az eredményt Te látod, nekem ilyen:

vme-pci-0100
Adapter: PCI adapter
Composite: +38.9°C (low = -0.1°C, high = +117.8°C)
(crit = +149.8°C)
amdgpu-pci-0800
Adapter: PCI adapter
vddgfx: 900.00 mV
fan1: 857 RPM (min = 0 RPM, max = 3500 RPM)
edge: +43.0°C (crit = +94.0°C, hyst = -273.1°C)
power1: 32.17 W (cap = 120.00 W)
k10temp-pci-00c3
Adapter: PCI adapter
Vcore: 1.03 V
Vsoc: 1.09 V
Tctl: +36.0°C
Tdie: +36.0°C
Tccd1: +36.0°C
Icore: 4.00 A
Isoc: 8.00 A

Az awk pedig nem tesz mást ebben a felállásban, csak annyit, hogy kikeresi a Core sort, majd a 3. oszlopot ($3) kinyomtatja, úgy, hogy a második karaktertől induljon, és a hossza a a 3. oszlop hossza, kivéve az utolsó 5 karaktert. „Csonkolja le” az utolsó 5 karaktert. Nem bonyolult, csak nézd meg a parancsot és már látod is, amit leírtam.

Ha már van saját kimeneted:

OK, ha neked a Core sorban van a 3. pozícióban a hőfok, vagy bármi, amit ki akarsz íratni, akkor semmi gond, a panelon meg fog jelenni. De nekem egyáltalán nincs is ilyen sorom. Hogy könnyebben dolgozzunk, és rögvest lássuk az eredményt is, írjuk be a terminálba, hogy

sensors | grep -m 1 Core | awk '{print substr($3, 2, length($3)-5)

Nem fog megjelenni semmi, de nem is gond, ezt eddig is tudtuk, hogy ezen faragni kell!

Mi a teendő?

Keresd ki a kiíratandó sort. Nálam legyen ez a Tdie: sor. Azt a sort használjuk majd.

Tdie: +36.0°C

Logikusan menjünk tovább. A Core helyett nyilván a Tdie: kell majd, írjuk is át. Már az is feltüntet, hogy itt a második oszlopban van a várt eredmény.

Így a $3 helyett a $2 lesz a nyerő. Figyelj rá! Két helyen is át kell írni.

($2, 2, length($2)-5)

Mit is várok a panelon? A hőfokot, azaz írja ki a +36.0°C értéket. Most már csak a kezdeti pozíciót kell megadni, ami legyen a legelső karakter és az számítógépes nyelven a 0. karakter, azaz:

($2, 0, length($2)-5)

Ha idáig eljutottál, akkor futtasd le az új paraméterekkel a parancsot. Jó eséllyel már látsz valamit, ha csak töredéket is a vágyott értekből.

Majd adjuk meg neki, hogy bizony végig ki kell írni, csonkolás nélkül, azaz

($2, 0, length($2)-0)

Ok, ez szép és jó, de ki is kellene próbálni.

laci:~/ $ sensors | grep -m -1 Tdie: | awk ‘{print substr($2, 0, length($2)-0)}’

+42.0°C

Szuper! Már figyelmesen a szkriptben is átírhatod. Ha mindent jó tettél, akkor a panelom már jól jelenik meg az érték. Próbáld átírni, hogy a + jel ne legyen előtte. Minek, hiszen nem lesz a hőfok negatív.. és a °C sem kell feltétlen…

Ami fontos: ez csak egy példa. Maga az eljárás a fontos, hogy nem parázunk, hogy „hibás” és „rossz” a panel, hanem megkeressük a szkriptet ami vezérli, majd megnézzük a parancs részt, amivel lekérdezte az adatokat (egyáltalán fenn van az a program, jelen esetben a sensors), majd átírjuk arra, ami nálunk az adott értéket jelző sor, és annak a helyét és hosszát.

Ha sokat barkácsolsz ilyen panel indikátorral, akkor érdemes a Ultimate Plumber-t kipróbálni. Én csak ezzel állok neki egy ilyen feladatnak, mert nagyon kezes jószág… 🙂

Related Posts