dell lid

Debian auf Notebooks und speziellen Geräten wie eingebetteten Systemen, Routern, Set-Top-Boxen, ...
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

dell lid

Beitrag von Voyager_MP » 09.08.2004 15:41:47

Hi, Ich möchte die lid taste dazu benutzen mein inspiron 8600 in den sleep modus zu versetzen. Dazu hab ich ein script geschrieben, welches auch einwandfrei funkt

Nur bin ich ja Faul, und möchte das halt nicht jedesmal manuell machen ;)

cat /proc/acpi/button/lid/LID/state
state: open

oder
cat /proc/acpi/button/lid/LID/state
state: closed

Den status bekomm ich von acpi, Ich will aber nicht irgend was ständig im hintergrund laufen lassen, was mir den status abfragt.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 09.08.2004 15:52:04

wie stellst du dir das denn bitte sonst vor??

du willst also ohne das ein Tool/Script ständig abfragt ob LID open/closed ist das trotzdem dein Sleep-Script gestartet wird???
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
emge
Beiträge: 1525
Registriert: 20.10.2003 22:05:46
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: 50° 45' 0" N 12° 10' 0" E

Beitrag von emge » 09.08.2004 16:02:32

Savar hat geschrieben:wie stellst du dir das denn bitte sonst vor??

du willst also ohne das ein Tool/Script ständig abfragt ob LID open/closed ist das trotzdem dein Sleep-Script gestartet wird???
Nun ja, in nahezu jeder aktuellen Programmiersprache gibt es das Konzept, an bestimmte ereignisauslösende Elemente sog. Listener zu knüpfen, die bei Eintreten eines Ereignisses aktiviert werden.

Kann ja gut sein, dass Linux so etwas auch auf ACPI-Ebene unterstützt.

Von daher fände ich die Frage gar nicht so abwegig.

Grüße, Marco

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 09.08.2004 16:09:38

Der Kernel wird ja den procfs auch sagen das es den zustand auf cloesd setzen soll.
Da sollte man abgreifen können und ein script binden.

Benutzeravatar
sebas
Beiträge: 419
Registriert: 15.01.2004 19:02:29
Wohnort: Nijmegen / NL
Kontaktdaten:

Beitrag von sebas » 09.08.2004 16:17:10

Genau, wie emge sagt, es gibt ein ACPI event layer. Die Knoepfe sind nicht weiter schwer einzurichten, ein paar Ansatzpunkte findest du unter 10. auf http://forums.gentoo.org/viewtopic.php?t=170548

Falls du KDE benutzt, das kcontrol Modul fuer Laptop Energy Saving hat auch diese Option.
Zuletzt geändert von sebas am 09.08.2004 16:48:15, insgesamt 1-mal geändert.
Magic is always the best solution -- especially reliable magic.

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 09.08.2004 16:41:36

Nein ich mag KDE nicht, ich bevorzuge blackbox, habs jedoch noch nicht hinbekommen.

laut dem link

cat /etc/acpi/events/powerbtn
event=button[ /]lid
action=/etc/acpi/lid.sh

event=button[ /]power
action=/etc/acpi/power.sh

jedoch passiert gar nichts ;)
Zuletzt geändert von Voyager_MP am 09.08.2004 16:51:26, insgesamt 1-mal geändert.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 09.08.2004 16:46:04

hmm..

@sebas: das was auf der von dir geposteten Seite steht, funktioniert auch "nur" über den acpid, ist also quasi auch "nur" ein Programm was die ganze Zeit abfragt (ok vielleicht wird es mittels C und IRQ's gelöst)

@emge:

siehe oben.. ja klar diese Listeners (verdammt mir will partout nicht einfallen wie's genau heißt) kann man verwenden. Aber ich dachte nicht, dass er das machen wollte, da er sonst wahrscheinlich kein Script geschrieben hätte. Mag mich getäuscht haben.

btw: scheiße das bei mir im Büro die KLimaanlage im A**** ist :-(
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
sebas
Beiträge: 419
Registriert: 15.01.2004 19:02:29
Wohnort: Nijmegen / NL
Kontaktdaten:

Beitrag von sebas » 09.08.2004 16:50:01

Ja, selbstversta:ndlich muss das regelmaessig abgefragt werden, acpid ist "the way to do it".
Magic is always the best solution -- especially reliable magic.

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 09.08.2004 16:53:16

ok, dann muss es halt so sein, trotz allem klappts nicht ;)

Ich hab bei mir noch nicht einmal ne klimaanlage, und ich trottel hab heute auch noch meinen ventilator verliehen :oops:

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 10.08.2004 09:43:06

Vielen Dank für eure Hilfe, es funzt ;)

hier meine conf's

acpid läuft,
root@mp:/etc/acpi# ll
total 20
drwxr-xr-x 3 root root 4096 Aug 10 09:35 .
drwxr-xr-x 158 root root 8192 Aug 10 09:07 ..
drwxr-xr-x 2 root root 4096 Aug 10 09:36 events
lrwxr-xr-x 1 root root 23 Aug 9 16:35 lid.sh -> /usr/local/bin/sleep.sh
-rwxr-xr-x 1 root root 284 Apr 23 18:06 powerbtn.sh

#!/bin/bash

COL="\\033[20G"
CS="\\033[1;32m"
CF="\\033[1;31m"
CW="\\033[1;33m"
CN="\\033[0;39m"


if [ $EUID -ne 0 ]; then
echo "You must be root, sorry"
exit
fi

SERVICES=""
MODULES="ehci_hcd sg"
UNLOADED=""

echo
echo "-------------------------------------------------------------"
echo "ACPI: Setting System to \"Suspent to RAM\""
echo "-------------------------------------------------------------"
echo

for i in $SERVICES; do
/etc/init.d/$1 stop
done

for i in $MODULES; do
if /sbin/lsmod | grep -q $i; then
UNLOADED="$UNLOADED $i"
fi
done

echo -n "Entferne Module: "

for i in $UNLOADED; do
/sbin/modprobe -r $i
if [ $? -eq 0 ]; then
echo -n -e $CS "$i "$CN
else
echo -n -e $CF "$i "$CN
fi
done
echo
sleep 2
echo 3 > /proc/acpi/sleep

#after resume
echo -n "Lade Module: "
for i in $UNLOADED; do
modprobe $i
if [ $? -eq 0 ]; then
echo -n -e $CS "$i "$CN
else
echo -n -e $CF "$i "$CN
fi
done

for i in $SERVICES; do
/etc/init.d/$i start
done
echo
echo "-------------------------------------------------------------"
echo


root@mp:/etc/acpi# cat events/lidbtn
event=button[ /]lid
action=/etc/acpi/lid.sh "%e"

root@mp:/etc/acpi# cat events/powerbtn
event=button[ /]power
action=/etc/acpi/powerbtn.sh

==> /var/log/acpid <==
[Tue Aug 10 09:38:22 2004] starting up
[Tue Aug 10 09:38:22 2004] 2 rules loaded

der_simon
Beiträge: 39
Registriert: 20.07.2004 18:49:17
Kontaktdaten:

Beitrag von der_simon » 21.08.2004 15:25:52

Dieses Script zum Module ent- und wiederladen könnte ich auch brauchen. Aber wie muß ich die Datei nennen und wohin muß sie gespeichert werden?
Eine kleine Anleitung währe nett.

Der Simon

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 22.08.2004 21:47:57

hi, also das script heißt bei mir sleep.sh und liegt unter /usr/local/bin

aufgerufen wird es so /usr/local/bin/sleep.sh 3
die Zahl am ende gibt den jeweiligen zustand an (suspend to ram) zur zeit.

ich habs bei mir so eingerichtet, das wenn ich das notebook schließe das /etc/acpid/lid.sh aufgerufen wird, welches lediglich mit einer verzögerung das sleep.sh script aufruft.

Code: Alles auswählen

#!/bin/bash
#===================================================================================
#
#         FILE:  lid.sh
#
#        USAGE:  ./lid.sh 
#
#     SYNOPSIS:  
#
#  DESCRIPTION:  
#      OPTIONS:  ---
# REQUIREMENTS:  ---
#         BUGS:  ---
#        NOTES:  ---
#       AUTHOR:  Michel Pelzer (), michel@pelzernet.de
#      COMPANY:  ATecoM GmbH
#      VERSION:  1.0
#      CREATED:  11.08.2004 08:49:53 CEST
#     REVISION:  ---
#===================================================================================

sleep 1m && /usr/local/bin/sleep.sh 3
Gruß Michel

der_simon
Beiträge: 39
Registriert: 20.07.2004 18:49:17
Kontaktdaten:

Beitrag von der_simon » 23.08.2004 10:56:55

Blöde Frage: wie stelle ich es an, dass es das lid Script beim Deckel schließen ausführt?

Der Simon

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 23.08.2004 15:47:56

installier mal acpid

apt-get install acpid
erstell dann die datei /etc/acpi/events/lidbtn
mit folgendem inhalt.

Code: Alles auswählen

 event=button[ /]lid
action=/etc/acpi/lid.sh
Jetzt /etc/init.d/acpid start

tail -f /var/log/acpid

und dann lid drücken und hoffen das im log was erscheint ;)
Gruß Michel

der_simon
Beiträge: 39
Registriert: 20.07.2004 18:49:17
Kontaktdaten:

Beitrag von der_simon » 23.08.2004 16:15:35

Supi es funktioniert... alles bis auf den Sound... Und er braucht schon ein wenig bis er schläft... ist das normal?
Kann ich irgendwo die Module, die er ent/läd beeinflussen?

Besten Dank!!!

Der Simon

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 23.08.2004 16:32:12

klar, also bei dauert es ca 5 sekunden bis er einschläft, wenn es bei dir länger dauert, dann meinst du warscheinlich die verzögerung die ich eingebaut habe, 1 minute nachdem der lid gedrückt wird, wird das sleep script ausgeführt. das kannst du rausnehmen indem die den inhalt der /etc/acpid/lid.sh fogendermaßer änderst.

Code: Alles auswählen

#!/bin/bash
/usr/local/bin/sleep.sh 3
die module die du entladen willst, gibst du im sleep.sh script ein.

Zeile 36
MODULES="ehci_hcd sg blamod blamod usw."
Gruß Michel

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 27.08.2004 11:29:46

Ich habe folgendes Problem, wenn ich die lid taste drücke wird mein lid.sh 2 mal ausgeführt, wenn ich das lid.sh einfach so starte, läufts nur einmal

lid.sh

Code: Alles auswählen

#!/bin/bash
/usr/local/bin/ask &
sleep 1m && /usr/local/bin/sleep.sh 3

Code: Alles auswählen

#!/bin/bash
#\
exec wish "$0"
# ---------------------------------------------------------------------------------
global env
set global_var(titel)   "ACPI - Sleep"

proc stop_sleep { } {
#eval exec /usr/bin/X11/xclock 
eval exec xterm -e "killall -9 lid.sh sleep"
}

# Now, the Main-Window
frame .menuFrame        -borderwidth 1 -relief raised
frame .mittlererRahmen  -borderwidth 1 -relief raised
frame .controlFrame     -borderwidth 1 -relief raised

pack .menuFrame         -side top -fill x
pack .mittlererRahmen   -side top -fill x
pack .controlFrame      -side top -fill x

# Buttons (DV-Grab)
button .sleep           -text "Sleep"      -default active -command exit
button .bexit           -text "Stop Sleep" -state   active -command stop_sleep

pack .sleep             -in .controlFrame -side left -fill x -expand yes
pack .bexit             -in .controlFrame -side left -fill x -expand yes

# Labels, left side
label .lsource          -text "Lid wurde gedrückt, bitte wählen sie wie sie weiter fortfahren wollen"

grid .lsource         -in .mittlererRahmen -row 1  -column 0 -sticky sw


# Window-Settings
wm title .              $global_var(titel)
wm minsize .            380 150
und hier das sleep.sh

Code: Alles auswählen

#!/bin/bash
#===================================================================================
#
#         FILE:  sleep.sh
#
#        USAGE:  ./sleep.sh 
#
#     SYNOPSIS:  
#
#  DESCRIPTION:  
#      OPTIONS:  ---
# REQUIREMENTS:  ---
#         BUGS:  ---
#        NOTES:  ---
#       AUTHOR:  Michel Pelzer (), michel@pelzernet.de
#      COMPANY:  ATecoM GmbH
#      VERSION:  1.0
#      CREATED:  08/09/04 14:18:39 CEST
#     REVISION:  ---
#===================================================================================


COL="\\033[20G"
CS="\\033[1;32m"
CF="\\033[1;31m"
CW="\\033[1;33m"
CN="\\033[0;39m"


if [ $EUID -ne 0 ]; then
    echo "You must be root, sorry"
    exit
fi

SERVICES=""
MODULES="ehci_hcd sg"
UNLOADED=""
STATE=$1

echo
echo "-------------------------------------------------------------"
echo "ACPI:      Setting System to \"Suspent to RAM\""
echo "-------------------------------------------------------------"
echo 

for i in $SERVICES; do
    /etc/init.d/$i stop
done

for i in $MODULES; do
    if /sbin/lsmod | grep -q $i; then
        UNLOADED="$UNLOADED $i"
    fi
done

echo -n "Entferne Module:         "

for i in $UNLOADED; do
    /sbin/modprobe -r $i
    if [ $? -eq 0 ]; then
            echo -n -e $CS "$i "$CN
        else
            echo -n -e $CF "$i "$CN
    fi
done
echo 
sleep 2
echo $STATE > /proc/acpi/sleep

#after resume
echo -n "Lade Module:             "
sleep 20 && killall -9 sleep
    for i in $UNLOADED; do
        modprobe $i
        if [ $? -eq 0 ]; then
                echo -n -e $CS "$i "$CN
            else
                echo -n -e $CF "$i "$CN
        fi
    done

for i in $SERVICES; do
    /etc/init.d/$i start
done
echo
echo "-------------------------------------------------------------"
echo 
Hab ich schon gesagt das ich scripten liebe ;)
Gruß Michel

Antworten