
以下のようにx0vncserver用のsystemdデバイスを作成しました。
[Unit]
Description=Remote desktop service (VNC)
After=graphical.target
[Service]
Type=forking
User=user
ExecStart=/usr/bin/sh -c '/usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/user/.vnc/passwd &'
[Install]
WantedBy=multi-user.target
実行しましたが失敗しました。その後、x0vncserverを使用して元のデスクトップをロードしようとすると、デスクトップ自体が完全にロードされた後にのみロードできることに気づきました。それでは、デスクトップをロードした後に実行するようにシステムデバイスを設定する必要がありますが、どうすればよいですか?それとも設定できるタイミング方法はありますか?デスクトップセッションツールを使用することは可能かもしれませんが、システム化された方法のソリューションはありますか?
私のdefault.targetは
# systemctl デフォルト値の取得 グラフィックターゲット
答え1
私は何らかの追加の解決策が含まれていない答えがないことを見た後、直接この解決策を思いつきました。すべてのソリューションがユニットファイルに含まれていることを確認しました。システム装置"After ="の下のmanファイルは、現在のユニットを起動する前に特定の宛先/サービスを実行する必要があります。 "Requires=" のみサービスとその依存関係を同時に開始します。以下はマニュアルの引用です。
foo.service デバイスに Requires= で構成される bar.service デバイスが必要で、After= または Before= で構成された順序がない場合、foo.service が有効になると、2 つのデバイス間で遅延なく同時に起動されます。
したがって、xサーバーとx0vncserverが同時に起動すると、x0vncserverは初期化されたxサーバーに接続できないため失敗します。これを行うには、「Requires =」と「After =」に自分のDMを具体的に追加する必要があります。これでこれが完了したので、追加の魔法なしで毎回動作します。 "nodm.service"エントリを使用している特定のディスプレイマネージャに置き換える必要があります。ログアウトしてセッションを再開することにした場合、「restart」行が存在します。これにより、Xサーバーがシャットダウンしてすぐに再起動します(私はnodmを使用しているためです)。わかりませんが、標準DMを使用する場合にも適用されると思います。これは、xサーバーがログインを実行し、成功したログイン後に新しいユーザーのxセッションに置き換えて終了するためです。これの唯一の副作用は、VNCセッションの接続が切断され、再起動する必要があることです。しかし、追加の魔法がなければ、この特定の問題に対する解決策はないと思います。
これは私のものです。[Eメール保護]文書:
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target multi-user.target nodm.service
Requires=nodm.service
[Service]
Type=simple
ExecStart=/usr/bin/x0vncserver -display %i -rfbport 5900 -securitytypes none
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
参考までに、「-securitytypes」ディレクティブをより安全なものに変更することをお勧めします。なぜなら、私はこのディレクティブを私が唯一のユーザーにして、セキュリティ上の問題を気にしないローカルネットワークでのみ使用しているからです。
答え2
最初の提案は私には適していません。だから解決策を試しました。次のようにx0vncserver systemdデバイスを設定しました。
[Unit]
Description=Remote desktop service (VNC)
After=multi-user.target
[Service]
Type=forking
User=user
ExecStart=/bin/sh -c '/usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/user/.vnc/passwd &'
[Install]
WantedBy=default.target
その後、上記のサービスは、Desktop:0がロードされる前にロードしようとしましたが失敗したため、私のコンピュータのデスクトップロード時間(以前の設定が悪い)を考慮して、定義された時間後にx0vncserver.timer
実行されるようにsystemdタイマーデバイスを設定しました。x0vncserver.service
[Unit]
Description=x0vncserver timer
[Timer]
# Time to wait after booting before it run for first time
OnBootSec=2m
Unit=x0vncserver.service
[Install]
WantedBy=default.target
その後、タイマーデバイスを有効にしてsystemctl enable x0vncserver.timer
再起動します。今回は手動介入なしにサーバーを起動することが目標だったので効果がありました:)。
答え3
これはすでに含まれていますsystemd サービスファイルの DISPLAY 設定。
それでも機能しない場合は、ほとんどのデスクトップで利用可能な「自動起動」機能を使用することをお勧めします。それでも失敗した場合はアプリが再起動されるため、使用する方がsystemd
好まれますが、この機能はそうではありません。systemd
autostart
答え4
あなたはそれを使用することができます
Requires=xdg-desktop-autostart.target
これは後に起こりますgraphical.target