web-dev-qa-db-ja.com

ふたが閉じているときにスクリプトを実行する方法は?

LUbuntu 18.04を実行しているラップトップを構成して、最初にログイン画面に移動し、次にログイン画面が表示されたら、中断します。この理由は、単純に一時停止してから再開時にログイン画面を表示するというデフォルトでは、再開時にログイン画面が表示されるまでに約5秒の遅延が生じるのに対し、マシンが一時停止しているときにログイン画面がすでにアップしている場合は、再開するとすぐに利用できます。

いずれにせよ、私はこれを行う方法を研究しており、私の最善のオプションは、ふたが閉じたときにスクリプトを実行することです。最初にdm-tool lockを呼び出し、その後、ログインを待機する必要がある場合は遅延します。画面を表示し、次にsystemctl suspend

ただし、ふたを閉じる動作をこのスクリプトの実行にリンクする方法を教えてください。私の研究から、それはが表示されますacpidが進むべき道です。 manページを読むと、/etc/acpi/eventslidbtnという実行可能スクリプトが必要なようです。私のシステムにはディレクトリが存在しますが、そのようなスクリプトは存在せず、manページには、何を含める必要があるのか​​が明確ではありません。このディレクトリの他のスクリプトを見ると、「event =」行に何を配置するかを知る必要があるようですが、どこにも見つかりませんでした。

このイベントを処理するウィンドウマネージャーについても触れられていますが、スクリプトがこれと競合しないようにするために何をする必要があるかは不明です。 Xfce Power Manager([メニュー]-> [設定]-> [Power Manager])の下の[全般]タブに「ノートパソコンの蓋が閉じているとき」と表示されます...一時停止しますが、他の選択肢は[ディスプレイのスイッチを切る]と[画面のロック]だけです。 「何もしない」という選択肢はありません。ここで何をする必要がありますか?要求されたアクションは、作成する可能性のあるacpidスクリプトが実行される前または後に実行されますか、それともこれを完全に上書きしますか?

1
Michael

まず、新しいファイルを作成しました/etc/acpi/events/laptop-lid以下を含む:

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

次に、/etc/acpi/laptop-lid.shこのコードを含む:

#!/bin/bash

source /home/michael/.Xdbus
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
    # close action
    dm-tool switch-to-greeter
    sleep 5
    systemctl suspend
else
    # open action
fi

/home/michael/.Xdbus私は次のように置きます:

export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0

そして私は/etc/acpi/laptop-lid.sh実行可能ファイル(chmod a+x)。

それから私は走った/etc/init.d/acpid restart

最後に、XFCEパワーマネージャーを起動し、ラップトップの蓋を閉じたときに「ディスプレイのスイッチを切る」に設定しました。これにより、改善された新しい機能との競合を回避しています。

しかし、それでも問題があることに気づきました。サスペンドを解除した後、ログイン画面が表示され、マシンが再びサスペンドします。少し検索した結果、これはUbuntuの bug によるもので、18.04にもまだ存在しているようです。 5秒間スリープしようとしてから6秒間以上経過したかどうかを確認し、経過した場合は中断しませんでした。私のラップトップは実際には2秒未満でサスペンドするようですので、これは常に私にとってはうまくいきます。 Xfceを設定して画面をロックしようとしましたが、どちらも受け入れられなかったようです。どちらの場合も、私のマシンは2秒未満でサスペンドされましたが、スクリプトはそれを少なくとも5回待機させる必要があります。

更新:

このすべてを行った後、私はまだ完全に満足していませんでした。 XFCE Power Manager設定は基本的に無視されるため、蓋を閉じるとマシンが常にスリープ状態になるため、スリーププロセスとdm-toolが到達する距離の間に競合状態が発生します。グリーターの作成に向けて、そのプロセスがグリーターの起動を完了する間、常に再開時にsome遅延が発生します。だから私は上記の作業をすべて完全に取り消し、代わりに次のことをしました:

編集~/.config/openbox/lubuntu-rc.xml。画面をロックするキーバインディングを見つけて、代わりにグリーターに切り替えるように変更します。これの主な効果は、ディスプレイをオフにするではないようです。これは、再開時にグリーターを即座に表示するために重要なようです。

    <keybind key='W-L'>
        <action name='Execute'>
            <command>dm-tool switch-to-greeter</command>
        </action>
    </keybind>

ふたを閉じる代わりに、Win + Lを押し、グリーターが表示されたらすぐに、ふたを閉じます

注:私は最初にグリーターに切り替えてから一時停止する別のスクリプトを作成することを望んでいますが、どのように一時停止しようとしても(systemctl、dbusなど)彼らallは、手動の介入なしにロック画面からの一時停止を拒否します-ダイアログボックスからパスワードを入力します-ロック画面にいるため、満足することはできません!

2
Michael