اجرای یک برنامه ویندوزی در لینوکس در پس‌زمینه

برای یک پروژه نیاز داشتیم که یه برنامه ویندوزی که خروجی کنسول داشت را توی لینوکس اجرا کنیم. مشکل این بود که وقتی برنامه را اجرا می‌کردی با وجودی که در پس‌زمینه کار می‌کرد اما به محض اینکه ارتباط sshای که دستور شروع اجرا برنامه را داده بود، بسته می‌شد. برنامه خطا می‌داد و می‌ترکید!
دو راه حل برای اینکار پیدا کردیم:
۱. اولین تجربه این بود که با استفاده از vnc یک محیط گرافیکی ایجاد کردیم و گفتیم که برنامه توی اون اجرا بشه! مشکل حل شد. توی محیط x که از طریق vnc باز شده بود. برنامه هم بعد از بستن ارتباط ssh کار می‌کرد.
۲.راه حل دوم این بود که از دستور nohup استفاده کنیم. برای اطلاعات بیشتر برین man دستور را بخونید! 🙂
اما برای روش اول (که حتی به درد نرم‌افزارهای عادی ویندوز هم قابل استفاده است) باید اول سرویس‌دهنده vnc نصب کنید:

$ apt-get install vnc4server

یه رمز برای اتصال به vnc تعیین کنید:

$ vncpasswd
Password:
Verify:
Password too long - only the first 8 characters will be used

بعد یه محیط x باهاش استارت کنید:

$ vnc4server
New 'sadeqnet:1 (sadeq)' desktop is sadeqnet:1

Creating default startup script /home/sadeq/.vnc/xstartup
Starting applications specified in /home/sadeq/.vnc/xstartup
Log file is /home/sadeq/.vnc/sadeqnet:1.log

حالا کافیه که بگید برنامه بره اون تو اجرا بشه:

$ DISPLAY="sadeqnet:1" wine explorer.exe &

تمام!