acpi_ibm howto

Dieses Thema im Forum "Howtos & Wiki" wurde erstellt von Kamikaze, 17 April 2006.

  1. Kamikaze

    Kamikaze Bottom Poster Mitarbeiter

    Registriert seit:
    26 Mai 2005
    Beiträge:
    9.951
    Wohnort:
    /Earth/Europe/Germany/Karlsruhe
    Ich dachte es wäre mal an der Zeit einige Tasten an meinem Thinkpad zu belegen. Dazu muss man erstmal zu ein paar Dateien Einträge hinzufügen:

    /boot/loader.conf
    Code:
    # load ibm acpi
    acpi_ibm_load="YES"
    
    /etc/sysctl.conf
    Code:
    # enable acpi_ibm devd events
    dev.acpi_ibm.0.events=1
    
    /etc/devd.conf
    Code:
    # ACPI_IBM
    notify 10 {
            match   "system"        "ACPI";
            match   "subsystem"     "IBM";
            action  "/usr/local/sbin/acpi_ibm $notify 2>&1 > /var/run/acpi_ibm.log";
    };
    

    Dannn legt man das Skript '/usr/local/sbin/acpi_ibm' an.
    Code:
    #!/bin/sh
    
    event=$1
    status=
    
    case $1 in
    	0x03) {
    		event="'backlight'";
    		status=$(/usr/local/bin/radeontool light | grep -Eo '[^ ]+$')
    		if [ "$status" = "on" ]; then
    			status=off
    		else
    			status=on
    		fi
    		/usr/local/bin/radeontool light $status
    	};;
    	0x05) {
    		event="'wireless'"
    		command=start
    		status=on
    		if /etc/rc.d/wpa_supplicant onestatus > /dev/null; then
    			command=stop
    			status=off
    		fi
    		/etc/rc.d/wpa_supplicant one$command > /dev/null
    	};;
    	0x07) {
    		event="'dac'"
    		status=$(/usr/local/bin/radeontool dac | grep -Eo '[^ ]+$')
    		if [ "$status" = "on" ]; then
    			status=off
    		else
    			status=on
    		fi
    		/usr/local/bin/radeontool dac $status
    	};;
    	0x10) {
    		event="'raise brightness'"
    		status=$(sysctl dev.acpi_ibm.0.lcd_brightness | grep -Eo '[0-9]+$')
    	};;
    	0x11) {
    		event="'lower brightness'"
    		status=$(sysctl dev.acpi_ibm.0.lcd_brightness | grep -Eo '[0-9]+$')
    	};;
    	0x12) {
    		event="'thinklight'"
    		status=$(sysctl dev.acpi_ibm.0.thinklight | grep -Eo '[^ ]+$')
    		if [ $status -eq 1 ]; then
    			status=on
    		else
    			status=off
    		fi
    	};;
    	0x15) {
    		event="'raise volume'"
    		status=$(sysctl dev.acpi_ibm.0.volume | grep -Eo '[0-9]+$')
    	};;
    	0x16) {
    		event="'lower volume'"
    		status=$(sysctl dev.acpi_ibm.0.volume | grep -Eo '[0-9]+$')
    	};;
    esac
    
    echo "ACPI_IBM event ($1) $event."
    if [ "$status" != "" ]; then
    	echo "	status: $status"
    fi
    
    Jetzt noch ein:

    # chmod +x /usr/local/sbin/acpi_ibm

    und radeontool installieren, falls es noch nicht vorhanden ist:

    # cd /usr/ports/sysutils/radeontool
    # make install clean

    Wenn man das ganze ohne Neustart ausprobieren will einfach:

    # /etc/rc.d/devd restart

    Jetzt sollte ein Fn-F3 den Bildschirm dunkel schalten und ein Fn-F5 den wpa_supplicant stoppen, bzw. wieder einschalten. Die Ausgabe des Skriptes kann man mit dem Befehl:

    # tail -f /var/run/acpi_ibm.log

    ansehen. Was vor allem zum Testen nützlich ist. Praktischerweise kann man das Skript im laufenden Betrieb ändern und testen.
  2. markus

    markus New Member

    Registriert seit:
    4 Mai 2004
    Beiträge:
    141
    Wohnort:
    Dortmund
    An dieser Stelle möchte ich noch zusätzlich auf zwei Ports hinweisen, die vom acpi_ibm Treiber Gebrauch machen:

    deskutils/tpb (Screenshot):

    With TPB it is possible to bind programs to the ThinkPad, Mail, Home and
    Search buttons. TPB can also run a callback program on each state change with
    the changed state and the new state as options. So it is possible to trigger
    several actions on different events.

    TPB has an on-screen display (OSD) to show volume, mute, brightness and some
    other information. Furthermore TPB supports a software mixer, as the R series
    ThinkPads have no hardware mixer to change the volume.

    sysutils/kmilo für KDE User (Screenshot):

    Kmilo is a utiltiy that enables special keys on a number of custom keyboards on
    devices such as IBM ThinkPad notebooks.
  3. Kamikaze

    Kamikaze Bottom Poster Mitarbeiter

    Registriert seit:
    26 Mai 2005
    Beiträge:
    9.951
    Wohnort:
    /Earth/Europe/Germany/Karlsruhe
    Das ist seltsam, denn mein R-40 hat einen Hardware-Mixer (will heißen die Lautstärketasten funktionieren einfach so, in jeder Lebenslage). Dafür hat es keinen Home-, Mail- oder Search-Button.
  4. markus

    markus New Member

    Registriert seit:
    4 Mai 2004
    Beiträge:
    141
    Wohnort:
    Dortmund
    Das bezieht sich auf R30-R32. Vielleicht sollte ich "as the R series ThinkPads" in der pkg-descr in "as some models of the R series ThinkPads" ändern.

    Die sind nur auf relativ alten ThinkPads vorhanden. Falls jemand so ein ThinkPad hat, möchte ich denjenigen bitten, sich kurz bei mir zu melden.
  5. destiny

    destiny New Member

    Registriert seit:
    25 Februar 2004
    Beiträge:
    509
    Wohnort:
    /home/leipzig/east/torgauer-platz
    tpb funktioniert hier manuell aufgerufen mit einem X31 wunderbar.

    Die Lautstärke funktioniert auch so (Hardware) allerdings sieht man grafisch wo man ist. Frage ist nur, wie tpb beim Start aktiviert wird?
  6. markus

    markus New Member

    Registriert seit:
    4 Mai 2004
    Beiträge:
    141
    Wohnort:
    Dortmund
    Ich werd nachher mal ein rc.d script zum Port hinzufügen. Dann kannst du tpb einfach in der rc.conf mit tpb_enable="YES" starten.
  7. destiny

    destiny New Member

    Registriert seit:
    25 Februar 2004
    Beiträge:
    509
    Wohnort:
    /home/leipzig/east/torgauer-platz
    Yes ;)

    Ich habe es schon so eingetragen, wurde immer zurückgeworfen ... ein "tpb -d" hat es dann für die Sitzung geklärt. Wenn ich mal gross bin und das alles richtig blicke ... ;)

    Danke
  8. markus

    markus New Member

    Registriert seit:
    4 Mai 2004
    Beiträge:
    141
    Wohnort:
    Dortmund
    Hmm, da hab ich wohl zu viel versprochen. tpb versucht beim start xosd zu initialisieren, was einen X server benötigt. Du wirst tpb also in .xinitrc eintragen müssen oder von xdm/kdm/gdm starten lassen müssen.

    @[LoN]Kamikaze: pkg-descr hab ich grad bzgl. R-Serie und software mixer geändert.
  9. Kamikaze

    Kamikaze Bottom Poster Mitarbeiter

    Registriert seit:
    26 Mai 2005
    Beiträge:
    9.951
    Wohnort:
    /Earth/Europe/Germany/Karlsruhe
    Du kannst deinen deamon doch veranlassen zu warten bis der Xserver Prozess auftaucht.

    Kann mein Skript irgendetwas was dein Port nicht kann? Oder habe ich das umsonst geschrieben?
  10. markus

    markus New Member

    Registriert seit:
    4 Mai 2004
    Beiträge:
    141
    Wohnort:
    Dortmund
    Theoretisch ja, praktisch ist es nicht "mein" daemon sondern ein Programm, das ich portiert habe. Insofern habe ich wenig Motivation nur wegen der Datei, wo man den Startaufruf einträgt, tpb umzuschreiben.

    Da du devd Events benutzt, hat dein Script einen entscheidenen Vorteil gegenüber tpb: es muss keine sysctls pollen und nimmt somit etwas Last vom System. Diesen Weg mußte ich bei tpb und kmilo leider für maximale Kompatibilität gehen, da IBM erst bei neueren ThinkPad Modellen die komplette Bandbreite an ACPI Events nutzt.
  11. fader

    fader Klaatu Verrata Nectu

    Registriert seit:
    18 August 2004
    Beiträge:
    364
    Rueckfrage zu acpi_ibm

    Geraet ist bei mir ein TP X21. Folgende Fragen:

    1) Wenn ich auf die ThinkPad Taste druecke (betrifft auch andere Events) passiert gar nichts. Auf devctl kommt da schon keinerlei Event an. Die Lautstaerketasten funktionieren auch so, aber liefern ebefalls keinerlei Events. Jetzt gibt es ja diese availmask, mit der ich das vermutlich aendern koennte, wenn ich Glueck habe (richtig?). Gibt es irgendeinen Weg, abseits von Durchprobieren, mit dem ich zu diesen Bitmasken kommen kann? Die in der Manpage passen bei mir vermutlich nicht (habs jetzt auf dem X21 noch nicht probiert, aber auf dem R32 klappte das mit dem Access IBM Button schonmal irgendwie nicht).

    2) Wenn ich z.B. Fn-F3 druecke, wirft er mir auf der Console folgende Meldung:
    Code:
    IBM:NOTIFY:80
    notify:1003
    Unknown key 3
    
    Aber kein ACPI Event dazu - devctl schweigt. Helfen mir die Werte in irgendeiner Form weiter bei Frage 1?

    Gruss
    Dierk
    Zuletzt bearbeitet: 1 September 2006
  12. Kamikaze

    Kamikaze Bottom Poster Mitarbeiter

    Registriert seit:
    26 Mai 2005
    Beiträge:
    9.951
    Wohnort:
    /Earth/Europe/Germany/Karlsruhe
    Versuch mal die Zeile
    match "subsystem" "IBM";
    aus der devd.conf zu entfernen, dann bekommst du mehr Ereignisse.
  13. fader

    fader Klaatu Verrata Nectu

    Registriert seit:
    18 August 2004
    Beiträge:
    364
    Ich lese schon unmittelbar aus devctl.
  14. markus

    markus New Member

    Registriert seit:
    4 Mai 2004
    Beiträge:
    141
    Wohnort:
    Dortmund
    Hast du dev.acpi_ibm.0.events auf 1 gesetzt? Wenn nicht, werden keine ACPI Events generiert. Gleichzeitig bewirkt das, dass das Maximum an ACPI-Events generiert wird (eventmask wird auf den Wert von availmask gesetzt).

    "availmask" (read-only) ist eine Bitmaske, die alle verfügbaren Events angibt. Welche Events dann wirklich feuern wird durch "eventmask" bestimmt.