これは19.04(および過去のリリース)では問題なく機能していましたが、19.10(カーネル5.3.0-24、ThinkPad X1 Carbon gen 5)へのリリースアップグレード後に機能しなくなったことは非常に肯定的です。
GNOME-Tweaksで対応するスイッチを設定し、手動で/etc/systemd/logind.conf
を提案されたように編集しようとしました here 、つまり次の行のコメントを外して調整してから、再起動します。
$ grep -v '^#' /etc/systemd/logind.conf
[Login]
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=suspend
LidSwitchIgnoreInhibited=yes
(厳密に言うと、最初の1つだけが必要ですが、念のため、2行目と3行目、および#4を適切に追加しました...
systemctl status systemd-logind
の出力を見ると、次のことがわかります。
Dec 17 17:56:50 x1c5 systemd-logind[8959]: Lid closed.
Dec 17 17:57:03 x1c5 systemd-logind[8959]: Lid opened.
したがって、ふたイベントは正しく検出されます。サスペンドプロセス自体の問題を除外するために、テストの目的で、[設定]-> [電源]-> [サスペンドと電源ボタン]で電源ボタンをサスペンドに設定しました。電源ボタンを押すと、systemctl status systemd-logind
の出力が表示されます(サスペンド/再開サイクルが成功した後)。
Dec 17 18:13:58 x1c5 systemd-logind[8959]: Power key pressed.
Dec 17 18:14:28 x1c5 systemd-logind[8959]: Delay lock is active (UID 121/gdm, PID 9215/gsd-power) but inhibitor timeout is reached.
Dec 17 18:14:39 x1c5 systemd-logind[8959]: Operation 'sleep' finished.
結論:ふたのイベントは正しく検出され、中断は問題なく動作しますが、ふたを閉じると動作しません...
蓋を閉める機能を一時停止する方法を復活させる方法はありますか?もちろん、電源ボタンで回避策を使用することもできますが、忘れがちで、ラップトップがバッグなどで過熱する原因になります。
---編集して追加---
this ticket の礼儀をもう少し得ましたが、問題は説明されているとおりではありません。ここに喫煙銃があります:
$ systemd-inhibit --list --mode=block
WHO UID USER PID COMM WHAT WHY MODE
gdm 121 gdm 2231 gsd-power handle-lid-switch External monitor attached or configuration changed recently block
gdm 121 gdm 2252 gsd-media-keys handle-power-key:handle-suspend-key:handle-hibernate-key GNOME handling keypresses block
user 1000 user 3017 gsd-media-keys handle-power-key:handle-suspend-key:handle-hibernate-key GNOME handling keypresses block
これは、「外付けモニターが接続されたか、構成が最近変更された」ために、蓋を閉じる動作がブロックされていることを示しています。 USB-Cケーブルを使用してラップトップをモニターに接続していますが、これを書いている時点では、ドッキングが解除され、バッテリーで約3時間動作しています(GNOME設定では、ラップトップディスプレイのみが利用可能と表示されます)。ただし、systemdまたはこれを担当するコンポーネントのいずれかは、外部ディスプレイが接続されていると誤って認識し、チケットごとに、このようなシナリオではGNOMEによってサスペンドがサポートされていないようです...
興味深いことに、gsd-power
プロセス(PID 2231)は、私のUIDではなくgdm
が所有しています。これを強制終了すると、lid-on-lid-close機能が復元されます。このプロセスが存在する理由を理解する必要があります...実際に外部ディスプレイに接続すると、systemd-inhibit --list --mode=block
はインタラクティブユーザーが所有する2番目のgsd-power
プロセスを報告します。これは正しく、十分に見えます。
質問の最後の調査によると、問題はGDMが冗長なgsd-power
プロセスを実行していることが原因であると思われます。これは、ログインするとすぐに強制終了できます。これが私が行った方法です。
次のようにkillスクリプトを作成します。
script=~/bin/kill_gdm_gsd-power.sh
cat > $script << EOF
#!/bin/sh
Sudo pkill -u gdm gsd-power
EOF
chmod 755 $script
アカウントは、パスワードプロンプトなしでSudo pkill
を実行できるようにする必要があります(これに慣れていることを確認してください)。 Sudo visudo -f /etc/sudoers.d/NOPASSWD
を実行し、次のように入力します
Cmnd_Alias PKILL = /usr/bin/pkill
user ALL=(ALL) NOPASSWD: PKILL
(上のuser
を自分のユーザーIDに置き換えます)
GNOME起動アプリアプレット(gnome-session-properties
)を開き、スクリプトにエントリを追加して、ログオンするとすぐに実行されるようにします。
理想的には、gsd-power
が完全に起動しないようにする方法を見つけますが、これは簡単なことではないことがわかりました...より良い方法を見つけたら、チップを入れてください。
少しすっきりした解決策は、カスタムのhandle-lid-switch
スクリプトを この解決策 でクックすることですが、スクリプトは主にgdm
ユーザー用にインストールする必要があり、これも可能ではない場合がありますささいな...
Gdmのgsd-power
プロセスを強制終了すると、いくつかの副作用が発生する可能性があります。たとえば、ログアウトしてラップトップをGDMのグリーティング画面にそのままにしておくと、多くの人が遭遇するシナリオではないと思います。