私のシステムサービスを実行できません。

私のシステムサービスを実行できません。

起動時にノートブックでxinput設定を指定しようとしたので、すべての設定とデフォルトのsystemdサービスファイルを含むスクリプトを作成しました。

[Unit]
Description=Sets my preferred xinput settings

[Service]
ExecStart=/usr/local/bin/SCRIPTS/xinput.sh

[Install]
WantedBy=multi-user.target

実行してもsystemctl enable xinput-settings.service動作しませんが、systemctl start実行sudo bash /usr/local/bin/SCRIPTS/xinput.sh(スクリプトにルートが必要です)も動作しませんが、このシステムサービスは機能しません。私が見た他のいくつかの修正でユーザーをrootに設定しようとしましたが、何も解決しませんでした。

スクリプトの内容は次のとおりです。

xinput --set-prop "TPPS/2 IBM TrackPoint" 320 -0.4
exit 0

私はArch Linuxカーネル5.6.12-arch1-1を使用しています。

systemctl status xinput-settings説明する:

● xinput-settings.service - Sets my preferred xinput settings
     Loaded: loaded (/etc/systemd/system/xinput-settings.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Fri 2020-05-15 23:34:35 +04; 42ms ago
    Process: 16809 ExecStart=/usr/local/bin/SCRIPTS/xinput.sh (code=exited, status=203/EXEC)
   Main PID: 16809 (code=exited, status=203/EXEC)

May 15 23:34:35 ThinkX250 systemd[1]: Started Sets my preferred xinput settings.
May 15 23:34:35 ThinkX250 systemd[16809]: xinput-settings.service: Failed to execute command: No such file or directory
May 15 23:34:35 ThinkX250 systemd[16809]: xinput-settings.service: Failed at step EXEC spawning /usr/local/bin/SCRIPTS/xinput.sh: No such file or directory
May 15 23:34:35 ThinkX250 systemd[1]: xinput-settings.service: Main process exited, code=exited, status=203/EXEC
May 15 23:34:35 ThinkX250 systemd[1]: xinput-settings.service: Failed with result 'exit-code'.

ベストアンサー1

次のサービスユニットを検討してください。

[Unit]
Description=Sets my preferred xinput settings

[Service]
Type=oneshot
ExecStart=/usr/local/bin/SCRIPTS/xinput.sh
Environment="DISPLAY=:0"
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

1行ずつ説明:

  • Type=oneshot一度実行した後に終了するスクリプトに適しています。これを指定しないと、Type=simpleデフォルト値は systemd に設定され、systemd はサービスの終了が早すぎるのに驚くことがあります。私の考えでは、これが最初の理由かもしれません。Active: failed
  • Environment="DISPLAY=:0"。複数のユーザーがログインして複数のモニターを同時にアクティブにできます。 systemdはデスクトップ/モニタに接続されていないため、xinputを実行するとxinputが失敗します。この環境変数を設定すると、使用するディスプレイをxinputに通知できます。
  • RemainAfterExit=yes。必ずしも必要なわけではありませんが、私はこんなoneshotものが好きです。つまり、サービスが完了すると状態にactive (exited)なりますinactive (dead)
  • WantedBy=graphical.targetこれは、xserverの起動後にこのサービスが開始されることを意味します。

それでも問題がある場合は、xauthorityに関連している可能性があります。この場合は、ここで良い答えを確認してください。

systemd サービスファイルの DISPLAY 設定

おすすめ記事