デスクトップをロードした後にシステムデバイスを起動するように設定するには?

デスクトップをロードした後にシステムデバイスを起動するように設定するには?

以下のように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」ディレクティブをより安全なものに変更することをお勧めします。なぜなら、私はこのディレクティブを私が唯一のユーザーにして、セキュリティ上の問題を気にしないローカルネットワークでのみ使用しているからです。

おすすめ記事