web-dev-qa-db-ja.com

ロック画面でパスワードが入力されたときにスクリプトを実行する方法は?

接続されたUSBマウスに応じてノートブックのタッチパッドの有効化/無効化を切り替えるために、接続されたデバイスを監視し、適切なアクションを実行するデーモンを実行するタッチパッドインジケーターを使用しました。ノートブックをスリープ状態にしてからマウスを抜くと、ウェイクアップ時にタッチパッドが無効になるため、マウスを接続/切断して有効にする必要があります!このフォーラムで問題を検索し、両方の解決策を見つけました(/etc/pm/sleep.dまたは/usr/lib/pm-utils/sleep.d)動作しませんでした! question を付けて解決しましたが、結局、タッチパッドインジケーターの代わりにudevのルールを使用してリワークしても、問題は解決しません!

私はそれを明確にしたい:タッチパッドがシステムレベルで無効になっている場合(つまり、ログインする前でも無効になっていて、スクリプトがrc.local、しかし、私は試してみましたが、機能しませんでした)、スクリプトを/ etc/pmとusr/lib/pm-utilsに入れて動作します

ただし、セッションレベルまたはudevが適用されるレベルでは無効になっています。パスワードを入力したときに実行されるスクリプトの配置場所を教えてください。 ログインしていませんが、パスワードを入力してください起床後。

更新:@terdonよくわかりませんでした。私はxscreensaverを有効にしてさえいません。インストールされているかどうかは疑っています。私のアカウントにはパスワードがあるため、「ログアウト」または「ユーザーの変更」を押すと、OR SLEEP MODE、その後パスワードを入力する必要があります。 xscreensaverで行うOR持っていないスクリーンセーバー。

この質問をする前にあなたが提案したことを試しましたが、うまくいきませんでした。

更新2:OK、いくつかの調査の後、これはLubuntu固有の問題であることがわかります。私は現在、lightdmの「友だち」(udev以外のレベルotherに当てはまると思います)とudevに取り組んでいます。 lighdmを使用した経験のある方は大歓迎です。

更新3: buntu Wiki のおかげで、私は(正しく?)私のスクリプトの呼び出しをどこに置くべきかを見つけました。そこで、session-setup-script=/home/n76/tptoggle.shから/etc/lightdm/lightdm.conf現在の状況は最初と同じですが、ユーザーセッションの開始時にlightdmが実際にタッチパッドをオンにしようとしていることを除いて

問題はなくなっていませんが、私は近いと感じており、lightdmに適切な特権を与えるだけです。

方法を提案してください。

6
mekkanizer

パスワードを要求したとおりに入力した後に実行する方法があるかどうかはわかりませんが、デスクトップ環境(おそらくスクリーンセーバーデーモン)によって処理されるため、あるとは思いません。ただし、/etc/pm/sleep.dに適切なスクリプトを追加すれば、完全に機能するはずです。あなたが試したスクリプトを表示していないので、私の推測では、単にスクリプトを正しく記述しなかったのではないでしょうか。私のシステムでは以下がうまく機能します:

  1. 次の内容の/etc/pm/sleep.d/20_resumeというファイルを作成します。

    #!/bin/sh
    
    case "$1" in
        thaw|resume)
        /home/terdon/scripts/onoff.sh
        ;;
    esac
    exit $?
    

    上記のパス(/home/terdon/scripts/onoff.sh)をステップ3に示すスクリプトの実際のパスに合わせてください。

  2. ファイルに適切な権限を付与します(rwxr-xr-x

    Sudo chmod 755 /etc/pm/sleep.d/20_resume
    
  3. マウスが接続されている場合はタッチパッドをオフにし、接続されているマウスがない場合はオンにするスクリプトを作成します。

    #!/bin/sh
    
    ## Get the xinput ID of the touchpad
    TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')
    
    ## Check if a mouse is connected and act accordingly
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    

    ここで、手順1のパスと名前(この例では/home/terdon/scripts/onoff.sh)を使用して上記のスクリプトを保存し、実行可能(chmod +x /home/terdon/scripts/onoff.sh)にすると、設定する必要があります。

これがすでに試したことがある場合は、質問を編集して、使用したスクリプトを表示してください。


私が考えることができる他のアプローチは、私の あなたの他の質問への答え で概説されている手順を使用することです。私はあなたがループに対して何を持っているのか理解していません、それらは完全に有効で実際に非常に貴重なプログラミング構造です。私が考えることができる唯一の問題は、無限ループを実行するとCPUに負担がかかることですが、スクリプトがsleepを使用して各ループ実行の間に1〜2秒待機する場合は問題になりません。私の提案はまさにそれを行うので、上記が失敗した場合、あなたは単にそれを使用することができます。

2
terdon