X に依存するアプリケーションをシステムサービスとして実行することはできません。

X に依存するアプリケーションをシステムサービスとして実行することはできません。

私はManjaro 17とi3wmを使用しています(該当する場合)。

タッチパッドクリック設定を変更するために起動時にコマンドを実行したいと思います。/usr/bin/オプションを有効にしてそのモードを実行可能に変更するスクリプトを作成しました。

/usr/bin/タッチパッド - 有効 - タブ - クリック:

#!/bin/bash
exec xinput set-prop 11 290 1

スクリプトは端末で問題なくシームレスに実行できます。

私の研究に基づいて、簡単なサービスファイルを準備しました/etc/systemd/system/

/etc/systemd/system/touchpad-enable-tap-click.service:

[Unit]
Description=Allow touchpad tap click

[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-enable-tap-click

[Install]
WantedBy=multi-user.target

再起動する前に、次のコマンドを実行してください。

[sercan@compaq ~]$ sudo systemctl enable touchpad-enable-tap-click.service
Created symlink /etc/systemd/system/multi-user.target.wants/touchpad-enable-tap-click.service → /etc/systemd/system/touchpad-enable-tap-click.service.

私もフルパスを試しました。

サービスが正常に動作しないため、結果は次のようになります。

システム制御状態

[sercan@compaq ~]$ systemctl status touchpad-enable-tap-click.service
● touchpad-enable-tap-click.service - Allow touchpad tap click
   Loaded: loaded (/etc/systemd/system/touchpad-enable-tap-click.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sat 2017-04-22 01:51:17 +03; 14min ago
 Main PID: 32429 (code=exited, status=1/FAILURE)

Nis 22 01:51:17 compaq systemd[1]: Starting Allow touchpad tap click...
Nis 22 01:51:17 compaq bash[32429]: Unable to connect to X server
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Main process exited, code=exited, status=1/FAILURE
Nis 22 01:51:17 compaq systemd[1]: Failed to start Allow touchpad tap click.
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Unit entered failed state.
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Failed with result 'exit-code'.

ログ-xeサービスを再起動した後:

Nis 22 02:09:52 compaq sudo[21550]:   sercan : TTY=pts/0 ; PWD=/home/sercan ; USER=root ; COMMAND=/usr/bin/systemctl restart touchpad-enable-tap-click.service
Nis 22 02:09:52 compaq sudo[21550]: pam_unix(sudo:session): session opened for user root by (uid=0)
Nis 22 02:09:52 compaq systemd[1]: Starting Allow touchpad tap click...
-- Subject: Unit touchpad-enable-tap-click.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit touchpad-enable-tap-click.service has begun starting up.
Nis 22 02:09:52 compaq bash[21553]: Unable to connect to X server
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Main process exited, code=exited, status=1/FAILURE
Nis 22 02:09:52 compaq systemd[1]: Failed to start Allow touchpad tap click.
-- Subject: Unit touchpad-enable-tap-click.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit touchpad-enable-tap-click.service has failed.
-- 
-- The result is failed.
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Unit entered failed state.
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Failed with result 'exit-code'.
Nis 22 02:09:52 compaq sudo[21550]: pam_unix(sudo:session): session closed for user root

あなたが私を助けることができることを願っています。ありがとうございます。

ベストアンサー1

GUIはオペレーティングシステムのユニークな部分であり、システムは複数のGUI環境を持つことができます。サービスが GUI コンテキストの外部で実行されるため、systemd を使用した試みは機能しません。実際には、GUIが起動する前に実行されます。を実行するには、xinput次のように構成されたGUIが必要です。Xサーバー

アプリケーションは、環境変数を介してGUIコンテキストが何であるか(つまり、どのXサーバーと通信するか)を知っていますDISPLAY。これは、GUIが利用可能であることを確認する方法です。変数が設定されていない場合は、GUIコンテキストの外側にあります。 (変数を設定してもGUIコンテキストは生成されません。既存のGUIコンテキストに外部接続できますが、ここでは関係ありません。)

ログインプロンプトがグラフィカルモードの場合は、次を使用しています。ディスプレイマネージャxinputログインプロンプトが表示されたら、すぐに設定を実行して適用するようにディスプレイマネージャを設定できます。これを行う方法は、使用しているディスプレイマネージャによって異なります。ログイン画面の前に起動するスクリプトを実行するには?詳細については。

ログイン方法に関係なく、これらの設定をログインスクリプトの一部として適用できます。 GUI セッションを使用または.xinitrc開始.xsessionするには、ここにコマンドを追加します。起動アプリケーションの概念が適用されたデスクトップ環境を使用している場合は、xinputそれを実行するコマンドまたはスクリプトを起動アプリケーションに追加します。ウィンドウマネージャを直接使用している場合は、ドキュメントを確認して起動時にコマンドを実行する方法を学びます(ほとんどのウィンドウマネージャはこれを行うことができます)。

i3 を使用しているので、GUI にログインした状態で次のように入力してコマンドを実行できます。exec注文するあなたの~/.i3/config

exec xinput set-prop 11 290 1

systemdはディスプレイマネージャをサービスとして起動しますが、生成されたGUIのコンテキストでコマンドを実行する方法を提供しないと思います。ただし、ログイン時にコマンドを実行する方法を提供することもできます。アーチスウィキいくつかの例を見てください。

おすすめ記事