web-dev-qa-db-ja.com

LXDEで電源ボタンが機能しません。どうすれば修正できますか?

LXDEに切り替えてから、電源ボタンが機能しなくなりました。 Unityや同様のDEのような派手なログアウトメニューを表示できるようになりたいです。どうすればこれを達成できますか?

2
Glutanimate

ACPIDの方法


概要

この問題を解決する方法は多数あります。 Webを見ると、xfce4-power-managergnome-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(XUSERDISPLAYなどの環境変数を設定)でログアウトメニューなどのグラフィカルアプリケーションを実行できるようにする関数とコマンドで構成されています。

注: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


さらに読む

Lubuntu-電源ボタンでコンピューターの電源が切れない

ラップトップの電源ボタンが機能しない

https://bugs.launchpad.net/xfce4-power-manager/+bug/100865

https://unix.stackexchange.com/questions/87259/why-wont-this-shutdown-script-work-when-executed-by-acpid

4
Glutanimate

LXDEにはlxsession-logoutパッケージが含まれていないようです。ターミナルでこれを入力してパッケージをインストールします。

Sudo apt install lxsession-logout

私はこれが古いスレッドであることを知っていますが、この問題を経験したばかりで、どこでも直接的な答えを見つけることができませんでした。

1
JustinMT