13:32
Xfce i klawiatura multimedialna
Aby umożliwić korzystanie z dodatkowych klawiszy funkcyjnych nie jest wymagane żadne dodatkowe oprogramowanie. Oczywiście wykorzystanie dodatkowych aplikacji pomoże w osiągnięciu pewnych efektów wizualnych, których jednak nie każdy będzie potrzebować.
Kod klawisza
W pierwszej kolejności musimy się dowiedzieć, jaki klawisz został wciśnięty przez użytkownika. Do tego celu poszczególnym akcjom, jakie będziemy chcieli obsłużyć musimy przypisać kod klawisza. Jednym ze sposobów uzyskania takiej informacji jest użycie programu xev. Po wpisaniu w konsoli tego polecenia otrzymamy okienko, nad którym przeprowadzamy testy. Wciskając odpowiednie klawisze, czy zestawy klawiszy, otrzymamy odnośnie ich informacje:
KeyRelease event, serial 31, synthetic NO, window 0x3800001, root 0x5d, subw 0x0, time 1103643055, (-139,-2), root:(412,316), state 0x0, keycode 223 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
Z tych danych możemy odczytać, że kod naszego klawisza posiada przykładowo numer 223.
Przypisywanie symboli
Kolejnym krokiem jest przypisanie kodu klawisza, do jego symbolu na serwerze Xów. Aby zobaczyć listę wszystkich dodatkowych obsługiwanych symbolów wystarczy podejrzeć plik:
cat /usr/share/X11/XKeysymDB
Następnie dopisujemy kod klawisza oraz jego symbol do pliku .Xmodmap w katalogu domowym użytkownika:
echo "keycode 176 = XF86AudioRaiseVolume" >> ~/.Xmodmap
Każdy dopisany kod klawisza powinien znaleźć się w osobnej linii. Następnie musimy zrestartować Xy.
Aby połączyć symbol naciskanego klawisza z Xfce przechodzimy do ustawień klawiatury w panelu Xfce a następnie do zakładki 'Skróty'. Po utworzeniu nowego schematu (na domyślnym nie można dodawać własnych skrótów) dodajemy nowe polecenie oraz przyciskamy wybrany klawisz, aby przypisać mu wybraną akcję.
Przykład obsługi głośności
Obsługa głośności za pomocą klawiatury jest jedyn z najpopularniejszych ustawień dodatkowych klawiszy szczególnie wśród użytkowników laptopów. Klawisze do obsługi głośności mają numery: 160, 174, 176. Dopisujemy więc do pliku ~/.Xmodmap wiersze:
keycode 176 = XF86AudioRaiseVolume keycode 174 = XF86AudioLowerVolume keycode 160 = XF86AudioMute
Aby zmienić poziomy głośności wykorzystam program aumix (http://jpj.net/~trevor/aumix.html). Domyślnie wykorzystuje on urządzenie miksujące /dev/mixer, dlatego jeżeli jesteśmy użytkownikami systemu ALSA w jądrze trzeba wkompilować Device Drivers -> Sound -> Advanced Linux Sound Architecture -> OSS Mixer API. Dodatkowo, do wyświetlenia paska poziomu głośności na pulpicie użyję programu Xosd (https://sourceforge.net/projects/libxosd/). Po skompilowaniu obu programów najlepiej przygotować skrypt, który pozwoli łatwe przekazywanie parametrów wykonywanej operacji. W przypadku mojego skryptu wywołanie akcji wygląda następująco:
- volume up - zwiększenie głośności o 5% (aumix -v+5)
- volume down - zmniejszenie głośności o 5% (aumix -v-5)
- volume mute - wyciszenie dźwięku, lub jego przywrócenie, jeśli jest wyciszony (aumix -v0 lub aumix -v???)
Takie właśnie polecenia wraz ze ścieżką do skryptu należy wpisać w skrótach klawiatury w Xfce. Do wyświetlenia prezentacji graficznej poziomu głośności użyjemy polecenia osd_cat w następującej formie:
osd_cat -c green -s 1 -d 1 -b percentage -f "-Misc-Fixed-Bold-R-Normal--18-120-100-100-C-90-*-*" -A center -p middle -P `aumix -q | grep vol | cut -c5-7` &
Efektem polecenia będzie zielony pasek procentowo wyświetlający poziom głośności:
![]()
Aby można było przywrócić poziom głośności po wyciszeniu musimy gdzieś go zapamiętać. W swoim skrypcie posłużyłem się plikiem tymczasowym w katalogu /tmp, ale równie dobrze można zapamiętać ten poziom w jakiejś zmiennej systemowej.
Poniżej kod skryptu, który można pobrać jako cały plik ze stopki artykułu.
#!/bin/sh
if [ $1 ]; then
if [ $1 == "up" ]
then
aumix -v+5
fi
if [ $1 == "down" ]
then
aumix -v-5
fi
if [ $1 == "mute" ]
then
if [ `aumix -q | grep vol | cut -c5-7` == "0," ]
then
aumix -v`cat /tmp/sound_lvl`
else
aumix -q | grep vol | cut -c5-7 >> /tmp/sound_lvl
aumix -v0
fi
fi
osd_cat -c green -s 1 -d 1 -b percentage
-f "-Misc-Fixed-Bold-R -Normal--18-120-100-100-C-90-*-*"
-A center -p middle -P `aumix -q | grep vol | cut -c5-7` &
else
echo "Usage:"
echo " volume up"
echo " volume down"
echo " volume mute"
fi

English
Nazywam się Tomasz Chudyk i witam na mojej stronie. Z zawodu jestem programistą. Moje zainteresowania krążą głównie wokół open-source, Linuksa i technologi internetowych.
