kbdをシステムサービスとして使用

kbdをシステムサービスとして使用

しばらく前に画面がロックされているときにミュージックプレーヤーを停止する方法を尋ねました。答えはactkbdを使うことです。それは魅力のように動作します。さて、actkbdをsystemdにサービスとして追加して、起動時に自動的に起動するようにしたいと思います。ご覧のとおり、サービスが正しく開始され、htopにも表示されます。以下はいくつかの出力です。

[root@hostname init.d]# systemctl start actkbd.service
[root@hostname init.d]# systemctl status actkbd.service
actkbd.service - Actkbd: Daemon for X-independent shortcuts
      Loaded: loaded (/etc/systemd/system/multi-user.target.wants/actkbd.service)
      Active: active (running) since Tue, 10 Apr 2012 17:50:36 +0200; 2s ago
     Process: 23526 ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D (code=exited, status=0/SUCCESS)
    Main PID: 23527 (actkbd)
      CGroup: name=systemd:/system/actkbd.service
              └ 23527 /usr/local/sbin/actkbd -d /dev/input/event3 -D
[root@hostname init.d]# systemctl stop actkbd.service
[root@hostname init.d]# ps -C actkbd
  PID TTY          TIME CMD

actkbd.service次のファイルがあります/etc/systemd/system/multi-user.target.wants/

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
Type=forking
ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -15 $MAINPID
Restart=always
User=root

だから問題は、systemctlを使用してサービスを開始した後にRhythmboxを一時停止する一般的なショートカットを押しても何も起こらないということです。/usr/local/sbin/actkbd -d /dev/input/event3 -Dルート端末からコマンドを実行すると、すべてがうまく機能します。なぜ?

これが明らかな場合は申し訳ありません。私はシステムビジネスに初めて触れましたが、役に立つものが見つかりませんでした。

乾杯。

編集:これはまだ機能していません。誰もが時間をかけて試してみて、再現してみていただければ幸いです。可能であれば、バグレポートを送信します。

答え1

ユーザーがデバイスにアクセスしてサービスユニットを実行できるようにするには、ユーザーがデバイスにアクセスできるようにルールを作成し、udev適切な権限を設定する必要があります。セッションを root ではなくユーザーとして実行するため、MODES単にユニットファイルを起動するのは正しくありません。User=rootルート端末で実行すると、ユーザセッション内でルート端末が有効になります。これについての詳細は、で情報を確認してくださいsystemd --user

udevルールの設定

udevルールの入力に必要な情報を提供するには、次のコマンドを使用します。

udevadm info --path=$(udevadm info -q path -n /dev/input/event3)

上記のコマンドの出力からudevルールを作成します/etc/udev/rules.d/<device>.conf。お気に入りのテキストエディタで開き、変数を入力してください。

 SUBSYSTEM=="device",
 SYSFS{idVendor}=="ID Vendor Here" ,
 SYSFS{idProduct}=="ID Model Here",
 MODE="666"

本番および命名udev規則の詳細については、man udevLinuxディストリビューションのWikiを参照してください。ルールを設定して再起動してください。次に X にログインし、デバイスを起動します。

また、ここではたくさんあなたが提供したよりも強力なシステム単位ファイルです。

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always

関連情報