web-dev-qa-db-fra.com

Scripts d’ouverture / fermeture de ACPI - xrandr ne s’exécute pas mais d’autres commandes

Voir SOLUTION à la fin.

J'ai utilisé this guide pour écrire un script qui s'active lorsque j'ouvre ou ferme le couvercle de l'ordinateur portable. Ma configuration est un moniteur d'ordinateur portable et un moniteur externe qui fonctionnent bien ensemble.

En gros (tout fonctionne bien les 3 premières étapes, la confusion commence à l’étape 4):

1) J'ai créé le fichier ~/export_x_info sur les problèmes d'autorisation et je l'exécute au démarrage avec:

# Export the dbus session address on startup so it can be used by any other environment
sleep 5
touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
# Export XAUTHORITY value on startup so it can be used by cron
env | grep XAUTHORITY >> $HOME/.Xdbus
echo 'export XAUTHORITY' >> $HOME/.Xdbus

2) J'ai créé /etc/acpi/lid.sh pointant vers le script actuel de mon répertoire personnel contenant ces deux lignes:

#!/bin/bash
/home/myname/scripts/lid_event

3) Sur le lid_event j'ai mis le texte suivant:

grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
    /home/myname/scripts/close;
else
    /home/myname/scripts/open;
fi

Jusqu'à présent, tout est comme prévu. J'ai vérifié le fichier "/ proc/acpi/bouton/couvercle/LID/état" et change en fonction du couvercle ouvert ou fermé. Tous les fichiers que j'ai créés sont exécutables, il n'y a donc aucun problème.

4) Sur mon script "close", j'ai ceci (le script "open" est similaire, donc inutile de le mentionner):

 #This runs so that root can run the following command under the user's environment
source /home/myname/.Xdbus

#When laptop lid closes, close laptop screen.
DISPLAY=:0.0 su myname -c xrandr --output eDP1 --off

Lorsque je ferme le couvercle, je souhaite que l'écran de l'ordinateur portable se ferme et que seul l'écran VGA soit activé. La commande ci-dessus fonctionne très bien lorsque vous l'exécutez manuellement sur le terminal ou ce script, mais lorsqu'il s'agit d'ACPI, il ne s'exécute pas!

Ce qui est étrange, c’est que si je mets une simple commande du type "touch ~/file" sur le script ci-dessus, elle s’exécute parfaitement!

Cela semble être un problème spécifique à xrandr. Je suspecte qu'il puisse y avoir des problèmes de permission non résolus mais je ne trouve pas de solution.

2
user2832080

SOLUTION

Il semble que les informations sur la communauté Ubuntu ne soient pas complètes. Vous devez faire un pas de plus pour pouvoir travailler. Selon this , vous devez en plus créer/etc/acpi/events/lm_lid et mettre:

event=button/lid.*
action=/etc/acpi/lid.sh

Maintenant cela fonctionne bien pour moi. J'ai mis à jour le guide Ubuntu afin que vous puissiez suivre le guide en toute sécurité ici

2
user2832080

Vous devez citer la commande que su doit exécuter pour qu'il s'agisse d'une chaîne:

DISPLAY=:0.0 su myname -c 'xrandr --output eDP1 --off'
0
meuh