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