La documentation sur les verrous inhibiteurs de Systemd et aussi man systemd-inhibit vont très loin pour expliquer comment démarrer un processus d'une manière qui bloque quelque chose (par exemple, le handle-lid-switch
événement).
Je n'ai pas pu trouver un moyen de me permettre de supprimer un tel "verrou"/"inhiber"/"bloquer".
Question : Existe-t-il un moyen de supprimer le systemd-inhibit
verrouiller, par exemple via un dbus
message ?
Contexte : pourquoi aurais-je besoin de supprimer un verrou inhibiteur pour **
Mon ordinateur portable a un interrupteur de fermeture du couvercle de l'ordinateur portable, qui systemd-logind
surveille et dans le cas où le couvercle est fermé suspend l'ordinateur portable - fonctionnalité "close-lid -> suspend
".
Une fois l'ordinateur portable placé dans sa station d'accueil, pour faire usage d'un écran plus grand, le gsd-power de Gnome est arbitrairement (et erronément et sans aucun paramètre disponible dans Gnome pour le modifier) décide de créer un verrou inhibiteur, empêchant la fonctionnalité "close-lid -> suspend
” pour travailler.
Savoir supprimer un verrou inhibiteur, me permettrait de remédier au paramétrage erroné effectué par le gnome-setting-deamon power gsd-power
de Gnome . Le paramètre de Gnome est incorrect, car l'appel manuel suspend systemctl suspend
n'a en effet montré aucun problème.
Le verrou inhibiteur que je souhaite supprimer, comme indiqué dans systemd-inhibit --list
est-ce :
Who: alex (UID 1000/alex, PID 4248/gsd-power)
What: handle-lid-switch
Why: Multiple displays attached
Mode: block
Réponse acceptée :
À partir de la documentation du développeur des verrous inhibiteurs :
Inhibit() renvoie une seule valeur, un descripteur de fichier qui encapsule
le verrou. Dès que le descripteur de fichier est fermé (et tous ses
doublons), le verrou est automatiquement relâché. Si le client meurt
alors que le verrou est pris, le noyau ferme automatiquement le descripteur de fichier
afin que le verrou soit automatiquement libéré. Un verrou de retard
pris de cette manière doit être libéré dès que possible à la réception de
PrepareForShutdown(true) (voir ci-dessous), mais bien sûr seulement après
l'exécution des actions que l'application a voulu retarder l'opération
pour en premier lieu.
Vous ne voulez probablement pas tuer gsd-power
, vous devrez donc fermer le descripteur de fichier qui encapsule le verrou. Il est très probablement détenu par gsd-power
. Forcer un autre processus à fermer l'un de ses descripteurs de fichier n'est pas une chose normale à faire et peut entraîner des effets secondaires dans gsd-power
. Mais si vous voulez le faire, lisez cette question dans Stack Overflow.
Au lieu de cela, vous pouvez essayer de supprimer gsd-power
l'autorisation d'exécuter l'action DBus org.freedesktop.login1.inhibit-handle-lid-switch
. La page de manuel dbus-daemon(1)
pourrait être utile.