web-dev-qa-db-ja.com

GNOME:19.10アップグレード以降、ラップトップの蓋を閉じるとサスペンドが機能しなくなりました

これは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プロセスを報告します。これは正しく、十分に見えます。

5
sxc731

質問の最後の調査によると、問題はGDMが冗長なgsd-powerプロセスを実行していることが原因であると思われます。これは、ログインするとすぐに強制終了できます。これが私が行った方法です。

  1. 次のようにkillスクリプトを作成します。

    script=~/bin/kill_gdm_gsd-power.sh
    cat > $script << EOF
    #!/bin/sh
    Sudo pkill -u gdm gsd-power
    EOF
    chmod 755 $script
    
  2. アカウントは、パスワードプロンプトなしでSudo pkillを実行できるようにする必要があります(これに慣れていることを確認してください)。 Sudo visudo -f /etc/sudoers.d/NOPASSWDを実行し、次のように入力します

    Cmnd_Alias PKILL = /usr/bin/pkill
    user ALL=(ALL) NOPASSWD: PKILL
    

    (上のuserを自分のユーザーIDに置き換えます)

  3. GNOME起動アプリアプレット(gnome-session-properties)を開き、スクリプトにエントリを追加して、ログオンするとすぐに実行されるようにします。

理想的には、gsd-powerが完全に起動しないようにする方法を見つけますが、これは簡単なことではないことがわかりました...より良い方法を見つけたら、チップを入れてください。

少しすっきりした解決策は、カスタムのhandle-lid-switchスクリプトを この解決策 でクックすることですが、スクリプトは主にgdmユーザー用にインストールする必要があり、これも可能ではない場合がありますささいな...

Gdmのgsd-powerプロセスを強制終了すると、いくつかの副作用が発生する可能性があります。たとえば、ログアウトしてラップトップをGDMのグリーティング画面にそのままにしておくと、多くの人が遭遇するシナリオではないと思います。

2
sxc731