systemd
Bluetoothキーボードが接続されているときにカスタムキーマップを設定するサービスを設定したいと思います。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
ユーザー領域で作業します。これは、システム自体を実行するために必要なのではなく、ユーザーとグラフィカルセッションに固有のものです。この場合、--user
systemdのバスを使用します。バスを使用すると、--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