ACPIDで実行すると、このシャットダウンスクリプトが機能しないのはなぜですか?

グルタニメート

このスレッド基づいて/etc/acpi/powerbtn.sh、LXDEセッションを考慮しスクリプトを変更しました。

# getXuser gets the X user belonging to the display in $displaynum.
# If you want the foreground X user, use getXconsole!
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
                userhome=`getent passwd $user | cut -d: -f6`
                export XAUTHORITY=$userhome/.Xauthority
        else
                export XAUTHORITY=""
        fi
        export XUSER=$user
}

 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

# If all else failed, just initiate a plain shutdown.
/sbin/shutdown -h now "Power button pressed"

スクリプトは、ターミナルで(ユーザーとルートの両方として)実行すると正常に機能しますが、ACPIDで実行すると機能しません。

スクリプトがACPIによってトリガーされる唯一のケースは、gnome-terminalでルートセッションを開いている場合です。

何が悪いのか分かりますか?何が起こっているのかを理解するのに役立つ、私が提供できる他の情報はありますか?

環境変数を手動で設定しようとしましたが、そうすると、rootでコマンドを初めて起動するまでスクリプトは機能しません。


システム情報:

  • Ubuntu 12.04.2 LTS

  • シングルユーザー

  • LXDE / Openboxを実行している


編集

いくつかの診断を実行しましたが、ACPIDで実行すると、XUSERとXAUTHORITYの両方が空のままであることがわかりました。しかし、理由はわかりません。

グルタニメート

そのため、デバッグ作業を行った後、最終的に問題をpinkyによるユーザー検出までさかのぼることができましたいくつかの奇妙な理由pinky -fwで、通常の状況ではユーザーディスプレイが表示されません。ルートセッションを開始した後でのみ、正しい表示を検出できます。

# DEBUG OUTPUT WITHOUT ROOT SESSION

##################
displaynum: 0  # correct
##################
pinkyfw: bob       tty7     04:09  Aug 18 17:59
pinky: Login    Name                 TTY      Idle   When         Where
bob      Bob                  tty7     04:09  Aug 18 17:59              # notice the missing
##################                                                      # information on display used
pinkytest: bob # testing a workaround
user: # empty because awk didin't find a match for ":0" in pinky -fw
##################

# DEBUG OUTPUT WITH ROOT SESSION

##################
displaynum: 0 # correct
##################
pinkyfw: bob       tty7     04:04  Aug 18 17:59
bob       pts/3           Aug 18 21:59 :0
pinky: Login    Name                 TTY      Idle   When         Where
bob      Bob                  tty7     04:04  Aug 18 17:59
bob      Bob                  pts/3           Aug 18 21:59 :0          # after starting a root session
##################
pinkytest: bob
user: bob # awk found a match for ":0"
##################

# DEBUG OUTPUT WITHOUT ROOT SESSION, WORKAROUND APPLIED

##################
displaynum: 0  # correct
##################
pinkyfw: bob       tty7     04:09  Aug 18 17:59
pinky: Login    Name                 TTY      Idle   When         Where
bob      Bob                  tty7     04:09  Aug 18 17:59              
##################                                                      
pinkytest: bob 
user: bob
##################

これは私が適用した回避策です:

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
}

残念ながらpinky、Linuxでのユーザー管理については、この回避策によってさらに問題が発生する可能性があるかどうかを判断するのに十分ではありませんユーザー名をハードコーディングしてファイルに表示するよりも良いと思います(試しても機能しませんでした)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

シャットダウンスクリプトが機能しないのはなぜですか?

分類Dev

このwgetダウンロードスクリプトが機能しないのはなぜですか?

分類Dev

このネストされたドロップダウンリストスクリプトが機能しないのはなぜですか?

分類Dev

このaptコマンドのセットは、行ごとに実行すると機能するのに、スクリプトとして実行すると機能しないのはなぜですか?

分類Dev

バッチスクリプト:このシナリオでstdoutのリダイレクトが機能しないのはなぜですか?

分類Dev

レジスタシャットダウン機能内でfopenが失敗するのはなぜですか?

分類Dev

ブートストラップドロップダウンが機能しないのはなぜですか?

分類Dev

Erlangブートスクリプトがコンソールからは機能するが、initシステム(sysvinit、upstart、systemd)から実行すると機能しないのはなぜですか?

分類Dev

タイムスタンプonEditスクリプトがドロップダウンメニューで機能しないのはなぜですか?

分類Dev

このonclickイベントがスクリプトで機能しないのはなぜですか?

分類Dev

このCloudFormationテンプレートスクリプトが機能しないのはなぜですか?

分類Dev

この単純なPHPログインスクリプトが機能しないのはなぜですか?

分類Dev

&でバックグラウンドで実行すると、Nohup for Pythonスクリプトが機能しない

分類Dev

Gnomeのデスクトップエントリとして実行されるスクリプトで「ソース」が機能しないのはなぜですか?

分類Dev

このシェルスクリプトが機能しないのはなぜですか?

分類Dev

バックグラウンドスクリプトコンソールを監視しているときにのみGoogle拡張機能が実行を開始するように見えるのはなぜですか

分類Dev

マウントスクリプトが機能しないのはなぜですか?

分類Dev

並べ替え用のこのドロップダウンリストがInternet Explorerでは機能するがChromeでは機能しないのはなぜですか?

分類Dev

systemdサービスでスクリプトを実行するのはシャットダウン時のみで再起動しない

分類Dev

単純なスケーリングアニメーションを実行する方法と、これが機能しないのはなぜですか?

分類Dev

このラムダ式がステートメントでは機能しないのに、メソッドでは機能するのはなぜですか?

分類Dev

スワップ機能を使用すると、テキストシャドウがオフにならないのはなぜですか?

分類Dev

パンダが、日時に、シリーズでは機能するが、グループ化されたオブジェクトでは機能しないことを意味するのはなぜですか

分類Dev

シェルスクリプトでjobsコマンドが機能しないのはなぜですか?

分類Dev

このストリームとラムダ式がSpEL宣言で機能しないのはなぜですか?

分類Dev

このブートストラップモーダルが機能しないのはなぜですか?

分類Dev

スクリプト付きのボタンが機能しないことがあるのはなぜですか?

分類Dev

カウント関数がこのサブクエリで機能しないのはなぜですか?

分類Dev

ng-optionsとcontrollerAsを使用するこのAngularドロップダウンディレクティブが機能しないのはなぜですか?

Related 関連記事

  1. 1

    シャットダウンスクリプトが機能しないのはなぜですか?

  2. 2

    このwgetダウンロードスクリプトが機能しないのはなぜですか?

  3. 3

    このネストされたドロップダウンリストスクリプトが機能しないのはなぜですか?

  4. 4

    このaptコマンドのセットは、行ごとに実行すると機能するのに、スクリプトとして実行すると機能しないのはなぜですか?

  5. 5

    バッチスクリプト:このシナリオでstdoutのリダイレクトが機能しないのはなぜですか?

  6. 6

    レジスタシャットダウン機能内でfopenが失敗するのはなぜですか?

  7. 7

    ブートストラップドロップダウンが機能しないのはなぜですか?

  8. 8

    Erlangブートスクリプトがコンソールからは機能するが、initシステム(sysvinit、upstart、systemd)から実行すると機能しないのはなぜですか?

  9. 9

    タイムスタンプonEditスクリプトがドロップダウンメニューで機能しないのはなぜですか?

  10. 10

    このonclickイベントがスクリプトで機能しないのはなぜですか?

  11. 11

    このCloudFormationテンプレートスクリプトが機能しないのはなぜですか?

  12. 12

    この単純なPHPログインスクリプトが機能しないのはなぜですか?

  13. 13

    &でバックグラウンドで実行すると、Nohup for Pythonスクリプトが機能しない

  14. 14

    Gnomeのデスクトップエントリとして実行されるスクリプトで「ソース」が機能しないのはなぜですか?

  15. 15

    このシェルスクリプトが機能しないのはなぜですか?

  16. 16

    バックグラウンドスクリプトコンソールを監視しているときにのみGoogle拡張機能が実行を開始するように見えるのはなぜですか

  17. 17

    マウントスクリプトが機能しないのはなぜですか?

  18. 18

    並べ替え用のこのドロップダウンリストがInternet Explorerでは機能するがChromeでは機能しないのはなぜですか?

  19. 19

    systemdサービスでスクリプトを実行するのはシャットダウン時のみで再起動しない

  20. 20

    単純なスケーリングアニメーションを実行する方法と、これが機能しないのはなぜですか?

  21. 21

    このラムダ式がステートメントでは機能しないのに、メソッドでは機能するのはなぜですか?

  22. 22

    スワップ機能を使用すると、テキストシャドウがオフにならないのはなぜですか?

  23. 23

    パンダが、日時に、シリーズでは機能するが、グループ化されたオブジェクトでは機能しないことを意味するのはなぜですか

  24. 24

    シェルスクリプトでjobsコマンドが機能しないのはなぜですか?

  25. 25

    このストリームとラムダ式がSpEL宣言で機能しないのはなぜですか?

  26. 26

    このブートストラップモーダルが機能しないのはなぜですか?

  27. 27

    スクリプト付きのボタンが機能しないことがあるのはなぜですか?

  28. 28

    カウント関数がこのサブクエリで機能しないのはなぜですか?

  29. 29

    ng-optionsとcontrollerAsを使用するこのAngularドロップダウンディレクティブが機能しないのはなぜですか?

ホットタグ

アーカイブ