web-dev-qa-db-fra.com

Écran de verrouillage avec gnome-screensaver-command en tant que root (à partir du script /etc/pm/sleep.d)

Mon système (Ubuntu 15.10) a un bug: j'ai activé "Exiger mon mot de passe au réveil de la suspension" dans le panneau de configuration "Luminosité et verrouillage", mais il ne demande PAS mon mot de passe, ce qui est incroyablement précaire.

Pour contourner ce problème, j'essaie d'écrire un script qui vivra sous /etc/pm/sleep.d. Cela devrait être quelque chose comme ceci:

#!/bin/bash

case "${1}" in
  hibernate)
    # Do nothing
    ;;
  resume|thaw)
    su -c "gnome-screensaver-command --lock" MYUSERNAME
    ;;
esac

Le problème est que cela ne fonctionne pas; les gnome-screensaver-command échoue avec le message suivant:

** Message: Failed to get session bus: Could not connect: Connection refused

Ensuite, j'ai essayé de changer la commande en:

su MYUSERNAME -c "export $(dbus-launch) && gnome-screensaver-command -l"

Ce qui échoue alors avec:

** Message: Failed to get session bus: The connection is closed

Donc, la question est: quelle serait la bonne façon de procéder?

1
dsetton

Vous devez exporter DBUS_SESSION_BUS_ADDRESS de la machine distante dans votre ssh avant d'utiliser les commandes dbus

Vous devez le trouver localement sur la machine à laquelle vous souhaitez envoyer des commandes à distance en tapant la commande:

set | grep DBUS

Cela vous donnera les coquilles actuelles DBUS_SESSION_BUS_ADDRESS valeur que vous devez exporter dans votre shell ssh après vous être connecté à la machine distante, puis en profiter.

2
sandman

J'ai pu résoudre ce problème en lisant le bon DBUS_SESSION_BUS_ADDRESS de la session gnome en cours. Exemple complet:

dbus_address=$(xargs -n 1 -0 < /proc/`pgrep gnome-session`/environ | grep DBUS)
su USERNAME -c "export $dbus_address && gnome-screensaver-command -l"
0
Joe