以下のようにサンプルテストサービスを作成しました。
[Unit]
Description=Test service
[Service]
Type=dbus
BusName=test.sample
Restart=on-failure
ExecStart=/usr/sbin/testbin -n
StandardOutput=null
[Install]
WantedBy=multi-user.target
xorg.service
これで、追加した後にこのサービス(または単位ファイル)を起動したいと思います。
After=xorg.service
Requires=xorg.service
マイサービスファイルの単位セクションに移動してシステムを再起動します。しかし、私のサービスファイルには何の影響もありません。したがって、私の目標は、ユーザーセッションの後(登場後を意味するX
)このサービスを開始することです。ここで欠けている部分が何であるかを教えてください。それとも遅れるかもしれない他の選択肢がありますか?
答え1
実際に持つという単位ですxorg.service
。私が知っている限り、このようにXを実行するディストリビューションはありません。したがって、自分で書かない限りxorg.service
、そのようなユニットはありません。。
また、単にXサーバー以降(またはディスプレイマネージャ以降)サービスを開始するだけでは、Xと通信するのに基本的に不十分であることを強調します。
簡単に言えば、systemdまたは他の初期化システムは、ユーザーGUIアプリケーションを実行するためのものではありません。ある程度ハッキングが可能な場合は確かに可能ですが、お勧めできません。ただxinitrcだけを使用してください。
答え2
まず@intelfxが言ったように、xorg.serviceが存在することを確認する必要があります。私の考えのより良いアプローチは、グラフィックシステムの起動時にトリガーされるgraphic.targetを参照することです。
サービスがユーザーセッションで使用される場合は、次の使用を考慮する必要があります。
systemctl --user enable test.service
これにより、他のすべての要件が満たされると、サービスを有効にしたユーザーがログインしたときにサービスがトリガーされます。最初の方法は、ユーザーが認証される前に発生する可能性があるため、ユーザーセッションの外部で発生する可能性があります。
すべてのユーザーに対して--userサービスを有効にするには、/etc/systemd/user/default.target.wantsに追加して、ユーザーがオプトアウトしない限り有効にすることができます。