Gehaxelts Blog

IT-Security & Hacking

Awesome Widgets updaten

Ich hatte selbst kurz danach gegoogelt, wie man in Awesome Widgets updaten kann, deswegen folgt hier nun ein Wissensbackup.

Intro

Man kann beim Windowmanager Awesome relativ viel selber konfigurieren, bzw. schreiben. Schreiben deshalb, da die Konfigurationsdatei in “lua” geschrieben wurde, und man dort beliebige Code-Änderungen durchführen kann.

Widget erstellen

Bevor man ein Widget updaten kann, muss man dieses zunächst erstellen, und einer Widgetbox hinzufügen.

Ein Beispielcode für ein neues Textwidget sieht folgendermaßen aus:

1
2
myNewWidget = widget({ type = "textbox" })
myNewWidget.text = "Init Text"

Damit wird das neue Widget erzeugt. Nun muss man es nur noch einer Widgetbox hinzufügen. Der vorgegebene Code in der Konfiguration kann so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- Create Wibox
mywibox[s] = awful.wibox({position = "top", screen = s})
    -- Add widgets to the wibox - order matters
    mywibox[s].widgets = {
        {
  --          mylauncher,
            mytaglist[s],
            mypromptbox[s],
            layout = awful.widget.layout.horizontal.leftright
        },
        mylayoutbox[s],
        mytextclock,
            myseperator,
        s == 1 and mysystray or nil,
        myseperator,
        mytasklist[s],
        layout = awful.widget.layout.horizontal.rightleft
        }

    mywibox[s].screen = s

Wenn wir unser neues Widget auf der rechten Seite hinzugefügt haben wollen, dann müssen wir es in den zweiten Block einfügen.

1
2
3
4
5
6
7
mylayoutbox[s],
    mytextclock,
    myseperator,
myNewWidget,
    s == 1 and mysystray or nil,
    myseperator,
    mytasklist[s],

Wobei “myseperator” ein TextWidget mit dem Inhalt ” :: ” ist, um die Leiste schön zu unterteilen.

1
2
3
--Create a seperator
myseperator = widget({ type = "textbox" })
myseperator.text= " :: "

Widgets updaten

Es gibt zwei Möglichkeiten, Widgets upzudaten. Einmal von “außen” und einmal von “innen”.

Updaten über awesome-client

Möchte man von außen, z.B. über ein Script, einem Widget einen neuen Text zuweisen, so klappt das über das Tool awesome-client.

echo -e 'myNewWidget.text="Neuer Text"' | awesome-client

In dem echo muss der Widgetname und die entsprechende Eigenschaft, sowie die Zuweisung vorhanden sein. Das echo wird dann über die Pipe (|) an den awesome-client übergeben, welcher das Update durchführt.

Updaten über Lua-Timer

Lua selbst bietet Timer an, mit denen man von innen die Updates ausführen kann.

Zunächst brauch man einen Timer, welchem man gleich das Timeout in Sekunden übergibt.

myNewWidgetTimer = timer({ timeout = 10 })

Danach folgt die Implementation der zu aufzurufenden Lua-Funktion, welche beim Ablauf des Timers ausgeführt werden soll.

1
2
3
4
myNewWidgetTimer:add_signal("timeout", function()
  --Mache irgendwas und setze den Text des myNewWidget neu.
  myNewWidget.text = "Neuer Text" 
end)

Zum empfehlen ist die Arbeit mit awful.util.pread(“cmd”), um Ausgaben eines Shell-Befehls als String zu nutzen.

Zuletzt muss der Timer nur noch gestartet werden.

myNewWidgetTimer:start()

Nun läuft der Timer endlos sein Timeout runter, und führt die angegebene Funktion aus.

Fazit

Awesome bleibt Awesome ;)

Ich habe mir eine nette zweite Statusleiste zusammengeschrieben, mit welcher ich die Leistung meines Systems im Auge behalten kann.

Gruß

Gehaxelt

Linux

« Funktionale Programmierung in Opal MySQLd root Passwort zurücksetzen »