
私は Manjaro 17 と i3wm を使用しています (関連性がある場合)。
起動時に 1 つのコマンドを実行して、タッチパッドのタップ クリック設定を修正したいと思います。オプションを有効にして/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.
フルパスも試してみました。
結果として、サービスは機能しません:
システムctlステータス
[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環境を持つことができます。systemdでの試みは、サービスがGUIコンテキストの外で実行されるため機能しません。実際、サービスはGUIが起動する前に実行されます。を実行するにはxinput
、GUIが必要です。これは、Xサーバー。
アプリケーションは、環境変数を通じて GUI コンテキスト (つまり、どの X サーバーと通信するか) を認識しますDISPLAY
。これは、GUI が使用可能かどうかを確認する方法です。この変数が設定されていない場合は、GUI コンテキストの外側にいます。(変数を設定しても GUI コンテキストは作成されません。外部から既存の GUI コンテキストに接続できるようになりますが、ここでは関係ありません。)
ログインプロンプトがグラフィカルモードの場合、ディスプレイマネージャーディスプレイマネージャを を実行するように設定するxinput
と、ログインプロンプトが表示されるとすぐに設定が適用されます。その方法は、使用しているディスプレイマネージャによって異なります。ログイン画面の前に開始されるスクリプトを実行するにはどうすればよいですか?詳細については。
ログイン方法に関係なく、ログイン スクリプトの一部として設定を適用できます。.xinitrc
またはを使用して.xsession
GUI セッションを開始する場合は、そこにコマンドを追加します。スタートアップ アプリケーションの概念があるデスクトップ環境を使用している場合は、コマンドxinput
またはそれを実行するスクリプトをスタートアップ アプリケーションに追加します。ウィンドウ マネージャーを直接使用している場合は、起動時にコマンドを実行する方法についてそのドキュメントを確認してください (ほとんどすべてのウィンドウ マネージャーで実行できます)。
i3を使用している場合は、GUIログイン時にコマンドを実行することができます。exec
指示あなたの~/.i3/config
:
exec xinput set-prop 11 290 1
systemdはディスプレイマネージャをサービスとして起動しますが、結果として得られるGUIコンテキストでコマンドを実行する方法は提供していないと思います。ただし、ログイン時にコマンドを実行する方法は提供されている可能性があります。アーチウィキたとえば。
答え2
これは、X がロードされる前に X システム (GUI) の動作を変更するコマンドを実行しようとしているために発生します。したがって、当然のことながら、X サーバーに接続できないというエラーが表示されます。ヒントは、実行しているコマンドの名前です。バツ入力します。
今のところ、systemd が近い将来、まだ起動していないサーバーと対話する機能を開発しないという保証はありませんが、現時点では、これはこの作業に適したツールではありません。
exec
最初に試すべきことは、(不要な なしで)コマンドを~/.profile
(または、 を使用してbash
いて が存在する場合は~/.bash_profile
)に追加することです。
xinput set-prop 11 290 1
ただし、非グラフィカルログインの場合はエラーが発生することに注意してください。これが機能しない場合は(ここ詳細は、デスクトップ環境のスタートアッププログラムに追加する方法を参照してください。Gnome、Cinnamon、KDE、Unity などの人気の DE には、ログイン時にプログラムをロードできる GUI ツールがあります。ここOpenboxでそれを行う方法についてはここLXDEの場合は、ここを使用したよりグローバルなソリューション~/config/autostart
。