sxhkdをsystemdサービスとして起動できません

sxhkdをsystemdサービスとして起動できません

私はArch Linuxインストールでbspwmを使用しており、アプリケーションを起動するにはsxhkdホットキーデーモンを実行する必要があります。

これまで、起動スクリプトは私の.config/bspwm/bspwmrc(単純なbashスクリプトファイル)にあります。

# Keyboard bindings manager
pkill sxhkd
sxhkd -m 1&

議論-m 1は私がクォーティキーボードを持っていないからです。

自動的にログインすると、ディスプレイマネージャのLightDMはbspwmrcスクリプトを実行します。今まではそんなに良くなった。

読書アーチスウィキ、私はSystemdで直接sxhkdを起動できることに気づきました。でも協会サンプルサービスファイルには以下が含まれます。

[Unit]
Description=Simple X Hotkey Daemon
Documentation=man:sxhkd(1)
BindsTo=display-manager.service
After=display-manager.service

[Service]
ExecStart=/usr/bin/sxhkd
ExecReload=/usr/bin/kill -SIGUSR1 $MAINPID

[Install]
WantedBy=graphical.target

ではなぜできないのだろうか。 sxhkd.serviceファイルをコピーし/etc/systemd/system(-m 1パラメータを追加した後)、アクティベーションサービスを使用してsudo systemctl enable sxhkdbspwmrcスクリプトの行にコメントを付けて再起動します。

ああ、これはうまくいきません。と入力すると、systemctl status sxhkd次のエラーメッセージが表示されます。

Warning: The unit file, source configuration file or drop-ins of sxhkd.service changed on disk. Run 'systemctl daemon-rel>
● sxhkd.service - Simple X Hotkey Daemon
     Loaded: loaded (/etc/systemd/system/sxhkd.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Fri 2020-07-24 10:29:05 CEST; 14min ago
       Docs: man:sxhkd(1)
   Main PID: 662 (code=exited, status=1/FAILURE)

Jul 24 10:29:05 Solgaleo systemd[1]: Started Simple X Hotkey Daemon.
Jul 24 10:29:05 Solgaleo sxhkd[662]: Can't open display.
Jul 24 10:29:05 Solgaleo systemd[1]: sxhkd.service: Main process exited, code=exited, status=1/FAILURE
Jul 24 10:29:05 Solgaleo systemd[1]: sxhkd.service: Failed with result 'exit-code'.

私が理解したのは、これはCan't open displaysxhkdが早すぎると言うことです。この問題を解決する理由と方法がわかりません。

私は以前の設定に戻ることができることを知っていますが、Arch Wikiで動作しないものがある場合は、私が間違っているのか、Wikiを更新する必要があるのか​​を知りたいのですが。

編集する:

さらなる調査は、sxhkdをrootとして実行すると機能しないことを示しました。

これが私が変えたものです:

/etc/systemd/systemsxhkd.serviceファイルをからに移動し/etc/systemd/user、コマンドを介して有効にしましたsystemctl --user enable sxhkd

それでも動作しませんが、他のエラーメッセージが表示されます。

Failed to start sxhkd.service: Unit display-manager.service not found. 

入力すると、systemctl status display-manager次のようになります。

● lightdm.service - Light Display Manager
     Loaded: loaded (/usr/lib/systemd/system/lightdm.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2020-07-25 11:11:07 CEST; 10min ago
       Docs: man:lightdm(1)
   Main PID: 602 (lightdm)
      Tasks: 4 (limit: 38412)
     Memory: 63.7M
     CGroup: /system.slice/lightdm.service
             ├─602 /usr/bin/lightdm
             └─666 /usr/lib/Xorg -bs -core :0 -seat seat0 -auth /run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

Jul 25 11:11:05 Solgaleo systemd[1]: Starting Light Display Manager...
Jul 25 11:11:07 Solgaleo lightdm[602]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop>
Jul 25 11:11:07 Solgaleo systemd[1]: Started Light Display Manager.
Jul 25 11:11:08 Solgaleo lightdm[670]: pam_succeed_if(lightdm-autologin:auth): requirement "user ingroup autologin" was m>
Jul 25 11:11:08 Solgaleo lightdm[670]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop>
Jul 25 11:11:08 Solgaleo lightdm[670]: pam_unix(lightdm-autologin:session): session opened for user ben by (uid=0)
lines 1-17/17 (END)

これは、ディスプレイマネージャが正常に動作していることを意味します。たぶん始まったサービスでは見ることができませんか--user

編集2:

BindsTo実際にはAfter必要ありません。サービスはユーザーとして開始されるため、ユーザーセッションが開始された後です。ただし、アンインストールすると、起動時にサービスがまったく開始されません。手動で起動するとうまくいきます。

編集3:

私が行ったステップの詳細については、こちらをご覧ください。https://bbs.archlinux.org/viewtopic.php?id=257626&p=2

答え1

あなたが説明するアプローチは不可能であるか、少なくとも私が知っている限り不可能です。次の反例を考えてみましょう。マルチヘッド設定がある場合は2回ログインします。systemdホットキーデーモンのコピーを開始します。これで、システムユーザーの2人のうちの1人がショートカットを押しました。誰が画面で結果を見ることができますか? ;)

したがって、最善のアプローチは、セッションにホットキーデーモンを開始させることです。簡単な方法は、以前と同様にウィンドウマネージャの起動スクリプトを使用することです。より近代的なアプローチは、一種のユーザーセッションを介して管理することです。これは実際にはシステムとウィンドウマネージャの設定によって異なります。私の経験によると、これはいつも少し間違いがあり、よく文書化されていませんが、起動スクリプトは非常に簡単です。

dbus サービスファイルの作成方法の例は、ここで確認できます。https://serverfault.com/a/906224/107282。前述のデーモンにはdbusは必要ありませんが、設定された変数を使用して適切なタイミングで起動できるようにする必要がありますDISPLAY

関連情報