Il mio pulsante di accensione non funziona sotto LXDE. Come posso risolvere questo?

Da quando sono passato a LXDE il mio pulsante di accensione non funzionerà più. Mi piacerebbe poter visualizzare un menu di logout di fantasia come quello di Unity e simili. Come posso raggiungere questo objective?

Il modo ACPID


Panoramica

Esistono numerosi modi per risolvere questo problema. Se guardi attraverso il web troverai suggerimenti sull’installazione di power manager usati in altri ambienti desktop (DE) come xfce4-power-manager o gnome-settings-daemon . Tuttavia, come utente LXDE, probabilmente stai cercando una soluzione leggera. Un modo leggero per visualizzare un menu di logout sul pulsante di accensione è quello di utilizzare uno script ACPID.

Cos’è l’ACPID?

Da ArchWiki :

acpid è un demone flessibile ed estensibile per la distribuzione di eventi ACPI. Ascolta su / proc / acpi / event e quando si verifica un evento, esegue programmi per gestire l’evento. Questi eventi sono innescati da alcune azioni, come ad esempio:

  • Premendo i tasti speciali, incluso il pulsante di accensione / sospensione / sospensione

  • Chiusura del coperchio del notebook (Un) Inserendo un adattatore CA da un notebook

  • (Un) Colbind il jack del telefono ecc.

Installazione

 sudo apt-get install acpi acpid 

Configurazione

Apri /etc/acpi/powerbtn.sh in un editor di testo a tua scelta, ad es.

 gksudo leafpad /etc/acpi/powerbtn.sh 

Alla fine del file troverai il seguente passaggio:

 # If all else failed, just initiate a plain shutdown. /sbin/shutdown -h now "Power button pressed" 

Poco prima di questo passaggio aggiungi il seguente frammento:

 # If LXDE is running execute lxsession-logout if [ -n $(pidof lxsession) ]; then for x in /tmp/.X11-unix/*; do displaynum=`echo $x | sed s#/tmp/.X11-unix/X##` getXuser; if [ x"$XAUTHORITY" != x"" ]; then export DISPLAY=":$displaynum" export _LXSESSION_PID=`pidof lxsession` lxsession-logout exit fi done fi 

La maggior parte dello snippet consiste in funzioni e comandi che assicurano che un’applicazione grafica come il menu di logout possa essere eseguita da ACPID (impostazione di variabili di ambiente come XUSER e DISPLAY ).

Nota: se nella sessione LXDE sono presenti componenti GNOME (ad esempio nautilus, vari daemon), il rilevamento della sessione potrebbe non funzionare correttamente. In questi casi ti consiglierei di inserire il codice nel modo seguente:

  if pidof x $PMS > /dev/null; then if [ -n $(pidof lxsession) ]; then for x in /tmp/.X11-unix/*; do displaynum=`echo $x | sed s#/tmp/.X11-unix/X##` getXuser; if [ x"$XAUTHORITY" != x"" ]; then export DISPLAY=":$displaynum" export _LXSESSION_PID=`pidof lxsession` killall lxsession-logout lxsession-logout fi done echo "if correct" exit else exit fi <...> 

Risoluzione dei problemi

Per qualche ragione sconosciuta queste funzioni non sempre funzionano. In tal caso dovrai sostituire lo snippet sopra con il seguente:

 if [ -n $(pidof lxsession) ]; then export DISPLAY=:0 export _LXSESSION_PID=$(pidof lxsession) export XUSER=user export XAUTHORITY=/home/user/.Xauthority lxsession-logout exit fi 

Le variabili di ambiente sono hard-coded in questo. Assicurati di sostituire l’ user con il tuo nome utente. Dovrebbe funzionare per la maggior parte delle configurazioni di sistema per utente singolo.

Ecco un’altra soluzione, nel caso in cui nessuna delle varianti sopra funzionino. Sostituisci la funzione getXuser con il seguente passaggio:

 getXuser() { user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'` if [ x"$user" = x"" ]; then startx=`pgrep -n startx` if [ x"$startx" != x"" ]; then user=`ps -o user --no-headers $startx` fi fi if [ x"$user" = x"" ]; then # lines added user=$(pinky -fw | awk '{ print $1; exit; }') # lines added fi # lines added if [ x"$user" != x"" ]; then userhome=`getent passwd $user | cut -d: -f6` export XAUTHORITY=$userhome/.Xauthority else export XAUTHORITY="" fi export XUSER=$user } 

Che cosa fa?

Lo script powerbtn.sh viene triggersto da ACPID ogni volta che viene premuto il pulsante di accensione. Come puoi vedere, include già un certo numero di controlli per DEs comuni come Unity, GNOME e KDE. Questi controlli sono lì per assicurarsi che l’evento di shutdown sia gestito dal rispettivo power manager. Ahimè, LXDE non ha uno di quelli integrati.

Ecco perché abbiamo aggiunto uno snippet di nostra proprietà che esegue il controllo per ACPID. Se rileva una sessione LXDE, si assicura che il tuo PC non si spenga immediatamente e avvia invece il menu di disconnessione con cui dovresti avere familiarità.

Con questi cambiamenti ora dovresti essere in grado di avviare il tuo menu di logout con il pulsante di accensione dell’hardware – senza dover installare un gestore di alimentazione ingombrante. E ancora meglio, questo non interferisce con gli altri DE in alcun modo.

fonti

http://www.ollie-reardon.co.uk/lxde-tip-power-button-not-working/

https://wiki.archlinux.org/index.php/Acpid

http://forum.lxde.org/viewtopic.php?f=8&t=205


Ulteriori letture

Lubuntu: il pulsante di accensione non spegne il computer,

Il pulsante di alimentazione del portatile non funziona

https://bugs.launchpad.net/xfce4-power-manager/+bug/1008650

https://unix.stackexchange.com/questions/87259/why-wont-this-shutdown-script-work-when-executed-by-acpid

Sembra che LXDE non includa il pacchetto lxsession-logout. Installa il pacchetto digitandolo nel terminale:

 sudo apt install lxsession-logout 

So che questo è un thread vecchio, ma ho appena avuto questo problema e non sono riuscito a trovare una risposta diretta da nessuna parte.