LXDEに切り替えてから、電源ボタンが機能しなくなりました。 Unityや同様のDEのような派手なログアウトメニューを表示できるようになりたいです。どうすればこれを達成できますか?
概要
この問題を解決する方法は多数あります。 Webを見ると、xfce4-power-manager
やgnome-settings-daemon
などの他のデスクトップ環境(DE)で使用されているパワーマネージャーのインストールに関する提案があります。ただし、LXDEユーザーとしては、おそらく軽量なソリューションを求めています。電源ボタンを押したときにログアウトメニューを表示する簡単な方法の1つは、ACPIDスクリプトを使用することです。
ACPIDとは何ですか?
ArchWiki から:
acpidは、ACPIイベントを配信するための柔軟で拡張可能なデーモンです。/proc/acpi/eventをリッスンし、イベントが発生すると、プログラムを実行してイベントを処理します。これらのイベントは、次のような特定のアクションによってトリガーされます。
電源/スリープ/一時停止ボタンなどの特別なキーを押す
ノートブックのふたを閉じる(Un)ノートブックからAC電源アダプターを差し込む
(Un)Pluging phone jackなど.
インストール
Sudo apt-get install acpi acpid
構成
選択したテキストエディタで/etc/acpi/powerbtn.sh
を開きます。リーフパッド:
gksudo leafpad /etc/acpi/powerbtn.sh
ファイルの最後に、次の文章があります。
# If all else failed, just initiate a plain shutdown.
/sbin/shutdown -h now "Power button pressed"
この文章の直前に、次のスニペットを追加します。
# If LXDE is running execute lxsession-logout
if [ -n $(pidof lxsession) ]; then
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
export _LXSESSION_PID=`pidof lxsession`
lxsession-logout
exit
fi
done
fi
スニペットの大部分は、ACPID(XUSER
やDISPLAY
などの環境変数を設定)でログアウトメニューなどのグラフィカルアプリケーションを実行できるようにする関数とコマンドで構成されています。
注:LXDEセッションで実行されているGNOMEコンポーネント(nautilus、さまざまなデーモンなど)がある場合、セッションの検出が間違っている可能性があります。これらの場合、次の方法でコードを挿入することをお勧めします。
if pidof x $PMS > /dev/null; then
if [ -n $(pidof lxsession) ]; then
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
export _LXSESSION_PID=`pidof lxsession`
killall lxsession-logout
lxsession-logout
fi
done
echo "if correct"
exit
else
exit
fi
<...>
トラブルシューティング
何らかの不明な理由により、これらの機能は常に機能するとは限りません。その場合、上記のスニペットを次のスニペットに置き換える必要があります。
if [ -n $(pidof lxsession) ]; then
export DISPLAY=:0
export _LXSESSION_PID=$(pidof lxsession)
export XUSER=user
export XAUTHORITY=/home/user/.Xauthority
lxsession-logout
exit
fi
この環境変数はハードコードされています。自分のユーザー名をuser
に置き換えてください。ほとんどのシングルユーザーシステム構成で機能するはずです。
上記のバリアントが機能しない場合に備えて、別の回避策を示します。 getXuser
関数を次の文章に置き換えます。
getXuser() {
user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
if [ x"$user" = x"" ]; then
startx=`pgrep -n startx`
if [ x"$startx" != x"" ]; then
user=`ps -o user --no-headers $startx`
fi
fi
if [ x"$user" = x"" ]; then # lines added
user=$(pinky -fw | awk '{ print $1; exit; }') # lines added
fi # lines added
if [ x"$user" != x"" ]; then
userhome=`getent passwd $user | cut -d: -f6`
export XAUTHORITY=$userhome/.Xauthority
else
export XAUTHORITY=""
fi
export XUSER=$user
}
それは何をしますか?
powerbtn.sh
スクリプトは、電源ボタンが押されるたびにACPIDによってトリガーされます。ご覧のとおり、Unity、GNOME、KDEなどの一般的なDEのチェックが既に含まれています。これらのチェックは、シャットダウンイベントがそれぞれの電源マネージャーによって処理されることを確認するためにあります。残念ながら、LXDEにはこれらのいずれも組み込まれていません。
そのため、ACPIDをチェックする独自のスニペットを追加しました。 LXDEセッションを検出すると、PCがただちにシャットダウンされないようにし、代わりに使い慣れたログアウトメニューを起動します。
これらの変更により、かさばる電源マネージャーをインストールしなくても、ハードウェアの電源ボタンでログアウトメニューを起動できるようになります。さらに良いことに、これは他のDEに干渉しません。
ソース
http://www.ollie-reardon.co.uk/lxde-tip-power-button-not-working/
https://wiki.archlinux.org/index.php/Acpid
http://forum.lxde.org/viewtopic.php?f=8&t=205
さらに読む
LXDEにはlxsession-logoutパッケージが含まれていないようです。ターミナルでこれを入力してパッケージをインストールします。
Sudo apt install lxsession-logout
私はこれが古いスレッドであることを知っていますが、この問題を経験したばかりで、どこでも直接的な答えを見つけることができませんでした。