comment exécuter un script utilisateur après le réveil de systemd?


10

Lorsque ma boîte de bureau Debian Jessie se réveille du sommeil (via le nouveau système brillant), les paramètres de ma souris reviennent à leurs valeurs par défaut, après avoir réinitialisé ma personnalisation

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

qui s'exécute lorsque je me connecte.

comment exécuter un script utilisateur arbitraire au réveil? (supposez que l'utilisateur est le propriétaire de la session X)

Pour autant que je me souvienne, ce qui suit est la seule personnalisation que j'ai faite de la systemdconfiguration (oui, je sais que c'est complètement faux car cela ne fonctionne pas pour les utilisateurs arbitraires, mais je n'ai pas encore trouvé comment le faire ... c'est quelque peu lié)

en outre, comment puis-je exécuter un script utilisateur arbitraire avant le réveil, en tant qu'utilisateur qui utilise actuellement l'écran 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 Cela m'aide dans mon cas qui est différent du vôtre. Cela peut peut-être vous être utile.
Sun Bear

Réponses:


5

Cette réponse est basée sur askubuntu.com/a/661747/394818 (comme également mentionné dans le commentaire de @ sun-bear), askubuntu.com/q/616272/394818 et superuser.com/a/1269158/585953 .

Utilisation d'un service système:

Créez le fichier /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

Supprimez la suspension / l'hibernation / l'hybride au cas où le service ne devrait être exécuté qu'après s'être réveillé d'un type spécifique de sommeil. Dans le cas où le service doit être exécuté par un utilisateur spécifique, retirez les commentaires User=et les Environment=lignes et remplacer le nom d'utilisateur concerné.

Installez le fichier de service avec:

sudo systemctl enable my_user_script

L'utilisation d'un service utilisateur ne fonctionnera pas:

Afin d'éviter de définir un nom d'utilisateur codé en dur avec User=, on pourrait créer exactement le même fichier de service sur .local/share/systemd/user/my_user_script.serviceet activer avec

systemctl --user enable my_user_script

Cependant, cela ne fonctionnera pas. @grawity explique plus en détail sur unix.stackexchange.com/a/174837/163108 pourquoi:

sleep.targetest spécifique aux services système. La raison en est que ce sleep.targetn'est pas une cible magique qui s'active automatiquement en s'endormant. C'est juste une cible régulière qui met le système en veille - donc les instances «utilisateur» n'auront bien sûr pas d'équivalent. (Et malheureusement, les instances «utilisateur» n'ont actuellement aucun moyen de dépendre des services à l'échelle du système.)


3

J'ai créé un fichier dans / lib / systemd / system-sleep .

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

Le message est appelé au réveil.

ÉDITER:

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


1
Ça n'a pas marché pour moi. Pouvez-vous créer un lien vers une documentation expliquant comment il est censé fonctionner?
Ryan Lue

Cela ne fonctionne pas non plus pour moi. Le contexte dans lequel ce script s'exécute est extrêmement limité et ne s'exécute pas en tant qu'utilisateur actif lorsque le système s'est mis en veille. Ainsi, il n'a pas accès à l'affichage (ce qui exclut la plupart des utilitaires de bureau ici), aux informations / variables de l'utilisateur qui est connecté ou à tout autre élément lié à la session de l'utilisateur actuellement connecté. J'ai besoin d'un script pour s'exécuter en tant que l'utilisateur qui est connecté dans le contexte de la session de bureau. Je n'ai toujours rien trouvé pour le faire, mais je mettrai à jour ici si je le fais.
theferrit32

@ theferrit32 vous devriez pouvoir changer pour votre utilisateur préféré avec la commande 'su' depuis votre script.
borizzzzz

1

Ouvrez ce fichier:

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

Contenu:

#! / bin / sh

cas 1 $ en poste)
    /usr/lib/pm-utils/power.d/95hdparm-apm resume
    ## Collez votre commande pour exécuter votre script
    ;; esac

Votre commande s'exécutera avec les privilèges d'administrateur .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.