come eseguire uno script utente dopo il wakeup di systemd?


10

Quando la mia scatola desktop debian jessie si riattiva dalla modalità di sospensione (tramite il nuovo brillante systemd), le impostazioni del mio mouse vengono ripristinate sui valori predefiniti, dopo aver ripristinato la mia personalizzazione

xinput set-prop 12 'Device Accel Constant Deceleration' 2.5

che viene eseguito quando eseguo l'accesso.

come posso eseguire uno script utente arbitrario al risveglio? (supponiamo che l'utente sia il proprietario della sessione X)

Per quanto posso ricordare, la seguente è l'unica personalizzazione che ho fatto dell'installazione systemd(sì, lo so che è completamente sbagliato perché non funziona per utenti arbitrari, ma non ho ancora capito come farlo ... questo è in qualche modo correlato)

inoltre, come posso eseguire uno script utente arbitrario prima della riattivazione, come utente che sta attualmente utilizzando la schermata X?

cat /etc/systemd/system/i3lock.service

#systemctl enable i3lock.service

[Unit]
Description=i3lock
Before=sleep.target

[Service]
User=fommil
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -c 000000

[Install]
WantedBy=sleep.target

askubuntu.com/a/661747 Mi aiuta nel mio caso che è diverso dal tuo. Forse può esserti utile.
Sun Bear

Risposte:


5

Questa risposta si basa su askubuntu.com/a/661747/394818 (come indicato anche nel commento di @ sun-bear), askubuntu.com/q/616272/394818 e superuser.com/a/1269158/585953 .

Utilizzando un servizio di sistema:

Crea il file /etc/systemd/system/my_user_script.service:

[Unit]
Description=Run my_user_script
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target


[Service]
ExecStart=/path/to/my_user_script
#User=my_user_name
#Environment=DISPLAY=:0

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

Rimuovere suspend / hibernate / hybrid nel caso in cui il servizio debba essere eseguito solo dopo essersi svegliato da uno specifico tipo di sospensione. Nel caso in cui il servizio deve essere eseguito da un utente specifico, togliere la User=e Environment=linee e sostituire il nome utente in questione.

Installa il file di servizio con:

sudo systemctl enable my_user_script

L'uso di un servizio utente non funzionerà:

Per evitare di impostare un nome utente hard coded con User=, è possibile creare lo stesso file di servizio esatto .local/share/systemd/user/my_user_script.servicee attivarlo con

systemctl --user enable my_user_script

Tuttavia, ciò non funzionerà. @grawity spiega in modo più dettagliato su unix.stackexchange.com/a/174837/163108 perché:

sleep.targetè specifico per i servizi di sistema. Il motivo è che sleep.targetnon è un bersaglio magico che si attiva automaticamente quando si va a dormire. È solo un obiettivo normale che mette il sistema in stand-by, quindi ovviamente le istanze "utente" non avranno un equivalente. (E sfortunatamente le istanze "utente" al momento non hanno modo di dipendere da servizi a livello di sistema.)


3

Ho creato un file in / lib / systemd / system-sleep .

#!/bin/sh
case $1 in
  post)
    /bin/runme
  ;;
esac

Il post viene chiamato al risveglio.

MODIFICARE:

https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html


1
Questo non ha funzionato per me. Puoi collegarti ad alcuni documenti che spiegano come dovrebbe funzionare?
Ryan Lue,

Questo non funziona neanche per me. Il contesto in cui viene eseguito questo script è estremamente limitato e non funziona come l'utente che era attivo quando il sistema è andato in sospensione. Quindi non ha accesso al display (che qui esclude la maggior parte delle utility desktop), informazioni / variabili per l'utente che ha effettuato l'accesso o qualsiasi altra cosa relativa alla sessione dell'utente attualmente connesso. Ho bisogno di uno script per eseguire come l'utente che ha effettuato l'accesso nel contesto della sessione desktop. Non ho ancora trovato nulla per farlo, ma aggiornerò qui se lo faccio.
theferrit32

@ theferrit32 dovresti essere in grado di passare al tuo utente preferito con il comando 'su' dallo script.
Borizzzzz,

1

Apri questo file:

sudo vim / lib / systemd / system-sleep / hdparm

Contenuti:

#! / Bin / sh

caso $ 1 in posta)
    /usr/lib/pm-utils/power.d/95hdparm-apm resume
    ## Incolla il tuo comando per eseguire lo script
    ;; esac

Il tuo comando verrà eseguito con i privilegi di amministratore .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.