systemd でサービスとして Actkbd を実行する

systemd でサービスとして Actkbd を実行する

少し前に、画面がロックされているときに音楽プレーヤーを停止する方法を尋ねました。その答えは、うまく機能する 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ルート ターミナル経由でコマンドを実行すると、すべて正常に動作します。なぜでしょうか?

明らかなことであれば申し訳ありませんが、私は systemd のビジネスに不慣れですが、役立つものは何も見つかりませんでした。

乾杯。

編集: これはまだ機能していません。時間のある方がいらっしゃいましたら、再現を試していただければ幸いです。可能であれば、バグレポートを提出します。

答え1

ユーザーがデバイスにアクセスしてサービス ユニットを実行できるようにするには、ルールを作成し、ユーザーがデバイスにアクセスできるようにudev適切な設定を行う必要があります。 ユニット ファイルを として起動するだけでは、セッションを root としてではなくユーザーとして実行しているため、正しくありません。 ルート ターミナルから実行すると、ユーザー セッション内からルート ターミナルがアクティブになります。 これに関する詳細については、 を参照してください。MODESUser=rootsystemd --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"

ルールの作成と命名の詳細については、または Linux ディストリビューションの Wikiudevを参照してくださいman udev。ルールを設定したら、再起動します。その後、X にログインしたらユニットを起動します。

また、ここには多くのあなたが提供したものよりも健全なシステム ユニット ファイルです。

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

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

関連情報