web-dev-qa-db-ja.com

ACPI開閉スクリプト-xrandrは実行されませんが、他のコマンドは実行されます

最後のソリューションを参照してください。

this guideを使用して、ラップトップの蓋を開閉したときにアクティブになるスクリプトを記述しました。私のセットアップは、ラップトップモニターと外部モニターが連携して動作することです。

基本的に(最初の3つのステップですべてが正常に機能し、混乱はステップ4から始まります):

1)許可の問題に関する〜/ export_x_infoファイルを作成し、以下を含む起動時に実行します。

# 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)次の2行を含むホームディレクトリ上の実際のスクリプトを指す/etc/acpi/lid.shを作成しました。

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

3)lid_eventに以下を置きます:

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

今まではすべてが期待どおりでした。 「/ proc/acpi/button/lid/LID/state」ファイルを確認し、蓋が開いているか閉じているかに応じて変更します。私が作成したすべてのファイルは実行可能であるため、問題はありません。

4)私の「閉じる」スクリプトにはこれがあります(「開く」スクリプトは似ているので、言及する必要はありません)。

 #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

ふたを閉じると、ラップトップの画面を閉じて、VGA画面のみを上げます。上記のコマンドは、ターミナルで手動で実行する場合、またはこのスクリプトを手動で実行する場合に最適に機能しますが、ACPIの場合は実行されません!

さて、奇妙なことは、上記のスクリプトに「touch〜/ file」のような単純なコマンドを入力すると、完全に実行されることです。

Xrandrに特有の問題のようです。未解決の許可の問題があるかもしれないと思うが、解決策が見つからない。

2
user2832080

解決

Ubuntuコミュニティに関する情報は完全ではないようです。動作させるには、もう1ステップ実行する必要があります。 this によると、さらに/ etc/acpi/events/lm_lidを作成して以下を配置する必要があります。

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

今では私にとってはうまく動作します。 Ubuntuガイドを更新したので、ガイドを安全にたどることができます here

2
user2832080

suが実行するコマンドを引用符で囲む必要があるため、1つの文字列になります。

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