Konfiguracja hotkeys przy użyciu acpid
: 2007-09-18, 20:38
[center]Konfiguracja hotkeys przy użyciu acpid[/center]
Na klawiaturze każdego laptopa znajdziemy masę róznych hotkey-ów: wyłączanie, hibernacja, klawisz poczty, przeglądarki... W tym FAQ przedstawię sposób definiowania akcji dla tych klawiszy przy użyciu daemona acpid. Do tego potrzebna nam będzie przede wszystkim wkompilowana w jądro obsługa ACPI, daemon acpid (standardowo w Slacku) oraz koniecznie wkompilowane (na stałe, nie jako moduły) "extrasy" dla naszej marki laptopa.
Sposób ten testowany był na notebooku Asus-a, z wkompilowanym AsusLaptop extras.
Do odpalania programów okienkowych jako dany user możemy użyć następującego polecenia:
, gdzie zmienną DISPLAY ustawiamy wedle potrzeby.
Szerzej o przenoszeniu funkcjonalności sudo na programy X-owe w tym artykule. Możemy do tego celu użyć także programu sux.
Otwieramy konsolę i przy pomocy komendy su logujemy się jako root. Będziemy nasłuchiwać komunikatów sysloggera:
Następnie (równierz jako root) edytujemy plik /etc/acpi/acpi_handler.sh.
Zanim zabierzemy się za przyciskanie hotkeys musimy poczynić jedną zmianę w tym pliku. Odnajdujemy jedną z ostatnich linijek:
i zamieniamy na:
Da nam to dostęp do kodu naciskanego klawisza. Więc naciskamy któryś hotkey i obserwujemy komunikat na konsoli sysloggera. Powinno pojawić się coś w stylu:
Widzimy więc formę w jakiej informacje z acpid są przekazywane do edytowanego przez nas skryptu. Jeśli naciskanie klawiszy nie daje żadnego efektu, możliwe, że są one traktowane jak zwykłe klawisze klawiatury. Wtedy do odczytania ich kodu możemy użyć programu xev (standardowo w X'ach), a do ich zmapowania xbindkeys.
Parametr $1 to grupa, parametr $2 to nazwa klawisza (np. power lub sleep), jednak większośc klawiszy nie ma swoich unikalnych nazw, dlatego bardzo ważny jest parametr $3 czyli kod klawisza. Żeby dodać przypisania do klawiszy po pierwsze tworzymy nową opcję w instrukcji case, a następnie wewnątrz tworzymy kolejną instrukcję warunkową:
I to by było na tyle
Oczywiście nie wszystkie klawisze które naciskamy muszą znajdywać się w grupie hotkey, wtedy trzeba dodać odpowiednią grupę/warunki.
Przykładowo mój plik /etc/acpi/acpi_handler.sh wygląda tak:
Podziękowania dla Sad Mephisto i auror za cenne sugestie
Na klawiaturze każdego laptopa znajdziemy masę róznych hotkey-ów: wyłączanie, hibernacja, klawisz poczty, przeglądarki... W tym FAQ przedstawię sposób definiowania akcji dla tych klawiszy przy użyciu daemona acpid. Do tego potrzebna nam będzie przede wszystkim wkompilowana w jądro obsługa ACPI, daemon acpid (standardowo w Slacku) oraz koniecznie wkompilowane (na stałe, nie jako moduły) "extrasy" dla naszej marki laptopa.
Sposób ten testowany był na notebooku Asus-a, z wkompilowanym AsusLaptop extras.
Do odpalania programów okienkowych jako dany user możemy użyć następującego polecenia:
Kod: Zaznacz cały
# su <nazwa_uzytkownika> -c "DISPLAY=:0 <polecenie>"
Szerzej o przenoszeniu funkcjonalności sudo na programy X-owe w tym artykule. Możemy do tego celu użyć także programu sux.
Otwieramy konsolę i przy pomocy komendy su logujemy się jako root. Będziemy nasłuchiwać komunikatów sysloggera:
Kod: Zaznacz cały
# tail -f /var/log/messages
Zanim zabierzemy się za przyciskanie hotkeys musimy poczynić jedną zmianę w tym pliku. Odnajdujemy jedną z ostatnich linijek:
Kod: Zaznacz cały
logger "ACPI group $1 / action $2 is not defined"
Kod: Zaznacz cały
logger "ACPI group $1 / action $2 $3 is not defined"
Kod: Zaznacz cały
logger: ACPI group hotkey / action ATKD 00000032 IS NOT defined
Parametr $1 to grupa, parametr $2 to nazwa klawisza (np. power lub sleep), jednak większośc klawiszy nie ma swoich unikalnych nazw, dlatego bardzo ważny jest parametr $3 czyli kod klawisza. Żeby dodać przypisania do klawiszy po pierwsze tworzymy nową opcję w instrukcji case, a następnie wewnątrz tworzymy kolejną instrukcję warunkową:
Kod: Zaznacz cały
hotkey)
case "$3" in
00000032)
<komenda startująca program>
;;
0000005c)
........
;;
...........
*)
logger: ACPI group $1 / action $2 $3 IS NOT defined
;;
esac
;;
Oczywiście nie wszystkie klawisze które naciskamy muszą znajdywać się w grupie hotkey, wtedy trzeba dodać odpowiednią grupę/warunki.
Przykładowo mój plik /etc/acpi/acpi_handler.sh wygląda tak:
Kod: Zaznacz cały
case "$1" in
button)
case "$2" in
power) /sbin/init 0
;;
sleep)
su ethnoe -c "DISPLAY=:0 /usr/bin/hibdialog" &
;;
*) logger "ACPI action $2 is not defined"
;;
esac
;;
hotkey)
case "$3" in
0000005c)
su ethnoe -c "DISPLAY=:0 /usr/bin/amarok" &
;;
00000050)
su ethnoe -c "DISPLAY=:0 /usr/bin/kadu" &
;;
.....................
*) logger "ACPI group $1 / action $2 $3 is not defined"
;;
esac
;;
*)
logger "ACPI group $1 / action $2 $3 is not defined"
;;
esac