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

2

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 ottenere questo?

    
posta Glutanimate 18.08.2013 - 17:54

2 risposte

4

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.

Che cos'è l'ACPID?

Da ArchWiki :

  

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

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

  •   
  • Chiudere un coperchio del notebook (Un) Collegare un adattatore di alimentazione CA da un notebook

  •   
  • (Un) Collegare 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. leafpad:

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 di funzioni e comandi che assicurano che un'applicazione grafica come il menu di logout possa essere eseguita da ACPID (impostando 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 user per 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 funzionasse. Sostituisci la funzione getXuser con il seguente passaggio:

getXuser() {
        user='pinky -fw | awk '{ if ( == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print ; 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 ; 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 attivato 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 che esegue il controllo per ACPID. Se rileva una sessione LXDE, fa in modo che il tuo PC non si spenga immediatamente e avvia invece il menu di disconnessione con cui dovresti avere familiarità.

Con queste modifiche ora dovresti essere in grado di avviare il tuo menu di logout con il tuo pulsante di accensione dell'hardware - senza la necessità di installare un power manager ingombrante. E ancora meglio, questo non interferisce con gli altri DE in alcun modo.

Fonti

link

link

link

Ulteriori letture

Lubuntu - il pulsante di accensione non spegne il computer,

Pulsante di accensione del laptop non funziona

link

link

    
risposta data Glutanimate 18.08.2013 - 17:54
1

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 riscontrato questo problema e non sono riuscito a trovare una risposta diretta da nessuna parte.

    
risposta data JustinMT 10.04.2017 - 06:24

Leggi altre domande sui tag