コマンドラインからVMWare Workstation仮想マシンを起動しようとしています。root
次のコマンドを実行して(代わりに)私のユーザーとしてこれを実行できます。
/usr/bin/vmplayer /home/myUser/vmware/myVm.vmx
これで、この仮想マシンが起動時に起動するように設定するために、 /lib/systemd/system/myService.service
次のコンテンツでサービスを作成します。
[Unit]
Description=my vm service
[Service]
User=myUser
ExecStart=/usr/bin/vmplayer /home/myuser/vmware/myVm.vmx
Environment=DISPLAY=:0
[Install]
WantedBy=multi-user.target
sudo systemctl restart myService
端末でサービスを実行すると(たとえば)、仮想マシンウィンドウがポップアップして正しく起動することがわかります。ただし、システムを再起動すると、仮想マシンが起動せずに表示されますstatus
。
Jan 23 12:55:59 home systemd[1]: Started myService service.
Jan 23 12:56:00 home truenas.sh[848]: [AppLoader] Use shipped Linux kernel AIO access library.
Jan 23 12:56:00 home truenas.sh[848]: An up-to-date "libaio" or "libaio1" package from your system is preferred.
Jan 23 12:56:00 home vmplayer[848]: cannot open display: :0
Jan 23 12:56:00 home systemd[1]: myService.service: Main process exited, code=exited, status=1/FAILURE
Jan 23 12:56:00 home systemd[1]: myService.service: Failed with result 'exit-code'.
環境が問題を解決すると思いましたが、DISPLAY=:0
これはエラーで修正できません。
答え1
@Stephen Bostonがコメントで指摘したように、システムユーザーサービスを使用する必要がありますが、ユニット内のいくつかのディレクティブを変更、削除、および追加する必要があります。
WantedBy=multi-user.target
に変更WantedBy=graphical-session.target
- ディレクティブ:
PartOf=graphical-session.target
とAfter=graphical-session.target
セクションが追加されました[Unit]
。 [Service]
ディレクティブに追加します。Type=exec
- あなたは削除することができます
Environment=DISPLAY=:0
[Service]
おそらく、次のセクションにこのディレクティブを追加したいと思うかもしれません。Restart=no
したがって、あなたの単位は次のようになります。
[Unit]
Description=my vm service
PartOf=graphical-session.target
After=graphical-session.target
[Service]
Type=exec
Restart=no
ExecStart=/usr/bin/vmplayer /home/myuser/vmware/myVm.vmx
[Install]
WantedBy=graphical-session.target
最後に、デバイスを$HOME/.config/systemd/user/
:ディレクトリの下に置いて有効/開始するには、次のものを使用する必要がありますsystemctl --user ....
。
systemctl --user enable myService.service
systemctl --user start myService.service
.desktop
ファイルを使用してStartUpでアプリケーションを実行したり、ビューに配置したりすることも/etc/xdg/autostart
できます~/.config/autostart
。この回答詳細については。