Konfiguracja hotkeys przy użyciu acpid

W tym miejscu zapraszamy Was do współpracy. Czekamy na propozycje, sugestie i rady.
Moderatorzy zatroszczą się o to, by najlepsze teksty trafiły do FAQ.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
ethnoe
Użytkownik
Posty: 653
Rejestracja: 2006-01-31, 17:58
Lokalizacja: Helsinki
Kontakt:

Konfiguracja hotkeys przy użyciu acpid

Post autor: ethnoe » 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:

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 :)
Ostatnio zmieniony 2007-12-31, 19:09 przez ethnoe, łącznie zmieniany 9 razy.
Samo słowo ubuntu pochodzi z języka Zulu i oznacza człowieczeństwo wobec innych, choć niektórzy tłumaczą je jako "nie potrafię skonfigurować Slackware"

Awatar użytkownika
Sad Mephisto
Administrator
Posty: 2824
Rejestracja: 2004-05-22, 13:24
Lokalizacja: Zabrze
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: Sad Mephisto » 2007-09-18, 20:59

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 :)
Ostatnio zmieniony 2007-09-18, 21:00 przez Sad Mephisto, łącznie zmieniany 1 raz.
[i]Thank you for noticing this notice. Now that you've noticed this notice, you may have noticed that this notice is noticably unnoticable.
$ python -c "print int(''.join(map(lambda x: str(len(x)),'Kto z woli i myśli zapragnie Pi spisać cyfry ten zdoła.'.split())))/1e+10"[/i]

Awatar użytkownika
ethnoe
Użytkownik
Posty: 653
Rejestracja: 2006-01-31, 17:58
Lokalizacja: Helsinki
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: ethnoe » 2007-09-18, 21:39

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.
Samo słowo ubuntu pochodzi z języka Zulu i oznacza człowieczeństwo wobec innych, choć niektórzy tłumaczą je jako "nie potrafię skonfigurować Slackware"

Awatar użytkownika
Sad Mephisto
Administrator
Posty: 2824
Rejestracja: 2004-05-22, 13:24
Lokalizacja: Zabrze
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: Sad Mephisto » 2007-09-19, 06:07

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ę.
[i]Thank you for noticing this notice. Now that you've noticed this notice, you may have noticed that this notice is noticably unnoticable.
$ python -c "print int(''.join(map(lambda x: str(len(x)),'Kto z woli i myśli zapragnie Pi spisać cyfry ten zdoła.'.split())))/1e+10"[/i]

Awatar użytkownika
ethnoe
Użytkownik
Posty: 653
Rejestracja: 2006-01-31, 17:58
Lokalizacja: Helsinki
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: ethnoe » 2007-09-19, 08:48

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.
Ostatnio zmieniony 2007-09-19, 08:48 przez ethnoe, łącznie zmieniany 1 raz.
Samo słowo ubuntu pochodzi z języka Zulu i oznacza człowieczeństwo wobec innych, choć niektórzy tłumaczą je jako "nie potrafię skonfigurować Slackware"

Awatar użytkownika
____0
Użytkownik
Posty: 693
Rejestracja: 2005-08-27, 22:42
Lokalizacja: Niepołomice
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: ____0 » 2007-09-20, 18:40

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)
Ostatnio zmieniony 2007-09-20, 22:05 przez ____0, łącznie zmieniany 1 raz.
http://www.linki.cal.pl

Awatar użytkownika
ethnoe
Użytkownik
Posty: 653
Rejestracja: 2006-01-31, 17:58
Lokalizacja: Helsinki
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: ethnoe » 2007-09-20, 19:09

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
Samo słowo ubuntu pochodzi z języka Zulu i oznacza człowieczeństwo wobec innych, choć niektórzy tłumaczą je jako "nie potrafię skonfigurować Slackware"

Awatar użytkownika
____0
Użytkownik
Posty: 693
Rejestracja: 2005-08-27, 22:42
Lokalizacja: Niepołomice
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: ____0 » 2007-09-25, 19:07

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
http://www.linki.cal.pl

Awatar użytkownika
ethnoe
Użytkownik
Posty: 653
Rejestracja: 2006-01-31, 17:58
Lokalizacja: Helsinki
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: ethnoe » 2007-09-25, 19:30

____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..
Samo słowo ubuntu pochodzi z języka Zulu i oznacza człowieczeństwo wobec innych, choć niektórzy tłumaczą je jako "nie potrafię skonfigurować Slackware"

Awatar użytkownika
SaraniS
Użytkownik
Posty: 176
Rejestracja: 2005-08-10, 08:22
Lokalizacja: Olesno Slaskie
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: SaraniS » 2008-04-05, 19:57

LID to nazwa czujnika otwarcia pokrywy laptopa :)
Przy jego pomocy można np. automagicznie usypiać/ hibernować laptopa przy zamknięciu klapy :)
Toshiba Satellite L40-14B: Cel530 1.73GHz/ 2GiB RAM/ 320GiB HDD Slackware 14.0 Linux 3.2.29, KDE 4.8.5, Opera 12, Skype 4.2, XMMS/ amarok/ MPlayer
RLU #398894

matiit
Użytkownik
Posty: 76
Rejestracja: 2007-03-19, 18:29
Kontakt:

Re: Konfiguracja hotkeys przy użyciu acpid

Post autor: matiit » 2009-06-27, 11:11

Żeby sprawdzić kod eventa wystarczy użyć acpi_listen,

ODPOWIEDZ