inputplugを実行しているシステムサービスの終了コード1を修正する方法は?

inputplugを実行しているシステムサービスの終了コード1を修正する方法は?

systemdBluetoothキーボードが接続されているときにカスタムキーマップを設定するサービスを設定したいと思います。inputplug提案した通りを使用しています。ここ

空白なしで実行可能なコマンドが必要です(参照)ここ、オプション-c)、実行可能なラッパースクリプトを作成しました。

/home/maddin/.local/bin/setmykeymap:

#!/bin/sh

setxkbmap us-de

inputplug端末で実行すると、使用するかどうかにかかわらず、すべてが期待どおりに機能しますsudo

$ [sudo] /usr/bin/inputplug -c /home/maddin/.local/bin/setmykeymap
Linked without daemon(), running in foreground.

キーボードに接続すると、キーボードのレイアウトが設定されます。使用してもしなくても、メッセージは同じです-d。その理由は、ターミナルで実行したが、なんとか検出されたからだそうです。

今まではそんなに良くなった。

systemdこれで、次のようにサービスを設定しました。このガイド。私の外観は次のとおりです /etc/systemd/system/inputplug-keymap-daemon.service::

[Unit]
Description=Sets xkbmap to us-de anytime a device is plugged or unplugged

[Service]
Type=simple
ExecStart=/usr/bin/inputplug -c /home/maddin/.local/bin/setmykeymap
Restart=on-failure
RestartSec=10
KillMode=mixed

[Install]
WantedBy=multi-user.target

サービスを有効にして再起動すると、次のようになります。

$ sudo systemctl status inputplug-keymap-daemon.service                                                                                                                              
● inputplug-keymap-daemon.service - Sets xkbmap to us-de anytime a device is plugged or unplugged
     Loaded: loaded (/etc/systemd/system/inputplug-keymap-daemon.service; enabled; vendor preset: disabled)
     Active: activating (auto-restart) (Result: exit-code) since Tue 2021-01-19 13:26:48 CET; 1s ago
    Process: 74130 ExecStart=/usr/bin/inputplug -c /home/maddin/.local/bin/setmykeymap (code=exited, status=1/FAILURE)
   Main PID: 74130 (code=exited, status=1/FAILURE)

私は何が間違っていましたか?

WantsそのようなサービスのためにどれAfterを設定しますか?WantedBy

答え1

あなたのコメントに基づいて問題を解決しました203。これでエラーコードが表示されます1。これはアプリケーション自体で発生します。

journalctl -u inputplug-keymap-daemon.serviceアプリケーションがstdoutまたはstderrに何かを書いているかどうかを監視します。より多くの情報を得るには、コマンドライン引数に-vを追加すると便利です。

私が見るときマニュアルページDISPLAY、このアプリケーションが環境変数を使用していることは明らかです。これはシステムデーモンが一般的に動作するのではなく、これが失敗した理由についての私の推測です。

DISPLAYへのアクセスを必要とするサービスを処理した後は、通常はXAUTHORITYユーザー領域で作業します。これは、システム自体を実行するために必要なのではなく、ユーザーとグラフィカルセッションに固有のものです。この場合、--usersystemdのバスを使用します。バスを使用すると、--userサービスは次のような環境にアクセスできますDISPLAY

これを行うには、次のようにします。

sudo systemctl disable inputplug-keymap-daemon.service
cp /etc/systemd/system/inputplug-keymap-daemon.service ~/.config/systemd/user/
sudo rm /etc/systemd/system/inputplug-keymap-daemon.service
systemctl --user start inputplug-keymap-daemon.service

sudo最後の行がありません。確認しsystemctl --user status ...てくださいjournalctl --user -u inputplug-keymap-daemon.service

機能している場合は、[Install]サービスを有効にする前にセクションを変更してください。

[Install]
WantedBy=default.target

今できるsystemctl --user enable inputplug-keymap-daemon.service

関連情報