X-WindowsとDBusへのアクセスを必要とするサービスを設定しようとしています。最初はバックグラウンドアプリで作ってみましたが、うまくいきませんでした。 「自動ログインユーザー」機能を使用します。それでは、自動ログインユーザー(例alexis
:)でサービスを実行する必要があると思います。私の問題は、そのユーザーとして実行されるサービス(設定やUser=alexis
変数Group=alexis
など)を簡単に作成できることです。環境変数(DISPLAY=:0
)も追加する必要がありました。ただし、サービスはまだシステムサービスとして開始されます。
私のアイデアは、ユーザーがログインしたときに開始される方法でサービスを作成することです。実行すると、多くのsystemdエントリが表示されます。
systemctl --user list-units
しかし、これらのサービスファイルを生成し、OS全体ではなくユーザーのためのサービスを生成するためにUbuntuパッケージ生成ツールチェーンを取得する方法はわかりません。
プロジェクトフォルダmy-daemon.service
に残っている現在のファイルは次のとおりです。debian
# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
[Unit]
Description=Daemon
[Service]
Type=simple
WorkingDirectory=~
ProtectHome=false
NoNewPrivileges=true
ExecStart=/usr/sbin/my-daemon
ExecStop=kill "$MAINPID"
Restart=on-failure
RestartSec=1min
User=alexis
Group=alexis
LimitNPROC=1000
[Install]
WantedBy=xsession.target
だから私は以下にサービスファイルをインストールしますが、/lib/systemd/system
私の場合は間違っているようです。それ以外の場合は、期待どおりに動作しているように見えますが、ユーザーごとのユニットが正しく設定されていることを実際に100%確信できません。周りを見回したが、ユーザー単位に関する多くの情報が見つかりません。一流の秘密のようなものです...
答え1
@ajgringo619と@meuhのコメントに基づいて、次のソリューションを使用しました。
my-daemon.service ファイルを手動でインストール
my-daemon.service
プロジェクトdebian
ディレクトリから別のディレクトリ(私が使用しているディレクトリ)に移動しましたconf
。.install
サービスをユーザーサービスとしてインストールするために、私のプロジェクトファイルに行を追加しました。conf/my-daemon.service /usr/lib/systemd/user/.
これも見てくださいアーチLinuxページ(リンク提供:@meuh)
サービスの有効化
インストールを実行すると、そのユーザーに対してdbusが実行されないため、これを行うことはできません
systemctl
(つまり、自分のアカウントからインストールし、インストールパッケージは存在しますが非アクティブな「newuser」を作成します)。だからサービスを有効にするには手動ソフトリンクを作成します。これには少し作業が必要です。まずフォルダがあることを確認し、ソフトリンクを作成してから、ユーザーの所有権を変更してください。
mkdir -p /home/newuser/.config/systemd/user/default.target.wants ln -s /usr/lib/systemd/user/my-daemon.service /home/newuser/.config/systemd/user/default.target.wants/. chown -R newuser:newuser /home/newuser/.config/systemd
掃除する
(3)と反対の方法が必要な場合は、ソフトリンクを削除し、そのフォルダを削除する必要があります。
-f
このオプションが削除された場合は、そのオプションを使用してrmdir
から使用してください--ignore-fail-on-non-empty
。の場合、rmdir
最も深いものから一つずつ削除しなければインストール前と同様の状態になります。自動的に起動しますか?
(3)で作成されたリンクが自動的に起動(アクティブ化)され、コンピュータを再起動またはログアウトしてから再度ログインすると、新しいユーザーとデバイスが自動的に起動します。もちろん、これはサービスが正常に機能しているという前提で行われます。あなたの〜したい正しく定義されました。
[Install] WantedBy=default.target
ユーザーサービスでは機能しない他のオプションがあります。たとえば、
User=...
またはオプションを指定することはできませんGroup=...
。これらのエラーはそのジャーナルに表示されますjournalctl --user -u my-daemon
重要:これは
--user
非常に重要です。以前にサービスをシステムサービスとして実行した場合、--user
システムサービスのログは表示されますが、ユーザーログの内容は表示されません。
もう1つの詳細は、ウィンドウを開く必要があり、ウィンドウが機能するために環境変数を追加する必要があることです。
Environment="DISPLAY=:0"
デバイスログに表示されるエラーに基づいてこれらの調整を行う必要があります。