Strona 1 z 1

Konfiguracja hotkeys przy użyciu acpid

: 2007-09-18, 20:38
autor: ethnoe
[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:

Kod: Zaznacz cały

# su <nazwa_uzytkownika> -c "DISPLAY=:0 <polecenie>"
, 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:

Kod: Zaznacz cały

# tail -f /var/log/messages 
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:

Kod: Zaznacz cały

logger "ACPI group $1 / action $2 is not defined" 
i zamieniamy na:

Kod: Zaznacz cały

logger "ACPI group $1 / action $2 $3 is not defined" 
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:

Kod: Zaznacz cały

logger: ACPI group hotkey / action ATKD 00000032 IS NOT defined
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ą:

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
;;
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:

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
Podziękowania dla Sad Mephisto i auror za cenne sugestie :)

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-18, 20:59
autor: Sad Mephisto
Czy koniecznie potrzebujemy zaprzęgać programy typu sux? Coś takiego powinno wystarczyć:

Kod: Zaznacz cały

# su nazwa_uzytkownika -c "DISPLAY=:0 polecenie"
W razie potrzeby majstrować przy parametrze DISPLAY :)

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-18, 21:39
autor: ethnoe
Dokładnie to samo jest podane w skrypcie :) A że do tego trochę teorii napisane, to wolałem podac linka do strony zamiast po prostu napisać to, co Ty.

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-19, 06:07
autor: Sad Mephisto
Owszem, ale i tak większość osób przepisze na ślepo to, co tam proponujesz i będą się pluli, że "xsu: command not found". Wydaje mi się, że lepiej będzie zaproponować im jakieś przykładowe rozwiązanie oparte o standardowe rozwiązanie, a dopiero na końcu artykułu podać linka, który poszerza wiedzę.

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-19, 08:48
autor: ethnoe
Dzięki za sugestie, muszę przyznać Ci rację. Art już zmodyfikowany.

Co do rozwoju arta: dzisiaj spróbuję wykompilowac AsusACPI extras z kernela, w przyszłym tygodniu jeśli będę miał szczęście przetestuję to na Toshibie.

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-20, 18:40
autor: ____0
a jesli nie ma w kernelu extras dla marki mojego laptopa (fujitsu-siemens) to nie ma mozliwosci przypisania hotkeys? (w moim przypadku to przycisk email, info?, (na windzie) wlaczenie radio w karcie bezprzewodowej i power (ale on dziala)

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-20, 19:09
autor: ethnoe
To już musisz spróbować czy po przyciskaniu ich jest jakiś output do /var/log/messages. Możliwe też jest, że te klawisze działają jak zwykłe przyciski klawiatury -> http://gentoo-wiki.com/HARDWARE_Gentoo_ ... .2FHotkeys

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-25, 19:07
autor: ____0
Jak ja mam rozumiec te komunikaty

Kod: Zaznacz cały

Sep 25 20:10:28 LAPTOP root: ACPI group  / action   is not defined
Sep 25 20:10:43 LAPTOP logger: ACPI action lid is not defined
Sep 25 20:11:01 LAPTOP last message repeated 3 times

Re: Konfiguracja hotkeys przy użyciu acpid

: 2007-09-25, 19:30
autor: ethnoe
____0 pisze:Sep 25 20:10:43 LAPTOP logger: ACPI action lid is not defined
Zauważ, że jeśli nie wypisywna jest grupa ("group"), to znaczy że jestesmy w grupie button. Więc dodaj wpis tam dla lid, nie wiem co to za klawisz.
A ten pierwszy wpis.. hmm.. wygląda tak, jakby zmienne były puste..? Trudno mi powiedzieć dlaczego..

Re: Konfiguracja hotkeys przy użyciu acpid

: 2008-04-05, 19:57
autor: SaraniS
LID to nazwa czujnika otwarcia pokrywy laptopa :)
Przy jego pomocy można np. automagicznie usypiać/ hibernować laptopa przy zamknięciu klapy :)

Re: Konfiguracja hotkeys przy użyciu acpid

: 2009-06-27, 11:11
autor: matiit
Żeby sprawdzić kod eventa wystarczy użyć acpi_listen,