صورة Docker التي تتضمن Wine و Winetricks لتشغيل تطبيقات Windows على Linux و MacOS
يمكن تشغيل حاوية Docker-Wine مع إعادة توجيه X11 أو كخادم RDP لتناسب حالة الاستخدام الخاصة بك. يتمثل الافتراضي في استخدام X11 Towning الذي يستخدم خادم X لجهازك لتقديم الرسومات مباشرة في جلستك الحالية وتشغيل الأصوات من خلال Pulseaudio (إعادة توجيه الصوت على Linux فقط).
يتيح استخدام Docker-Wine مع خادم RDP تشغيل الحاوية على جهاز مقطوع الرأس أو جهاز قد لا يعمل خادم X. يمكنك بعد ذلك استخدام عميل سطح مكتب عن بُعد للاتصال بالحاوية التي قد تكون موجودة إما على جهازك المحلي أو جهاز بعيد. هذا هو الحل الوحيد حاليًا إذا كنت بحاجة إلى صوت على MacOS.
يعد استخدام برنامج docker-wine هو أسهل طريقة للبدء ويجب أن يكون كل ما تحتاجه لـ Linux و MacOS.
docker-wineعلى Linux:
wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-wineعلى ماكوس:
curl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-winedocker-wine مع إعادة توجيه X11سيبدأ تشغيل البرنامج النصي بدون حجج أخرى في جلسة تفاعلية:
./docker-wine يمكنك تجاوز جلسة Bash التفاعلية الافتراضية عن طريق إضافة wine أو winetricks أو winecfg أو أي أوامر صالحة أخرى مع الحجج المرتبطة بها:
./docker-wine wine notepaddocker-wine مع XVFBيبدأ عرض المخزن المؤقت للإطار عن السداد: XVFB: 95 -شاشة 0 320x200x8 عرضة إلى رقم الخادم: 95
./docker-wine --xvfb./docker-wine --xvfb=:95,0,320x200x8docker-wine مع Notty ./docker-wine --nottydocker-wine مع RDP Server قم بتشغيل خيار --rdp لبدء خادم RDP بجلسة تفاعلية:
./docker-wine --rdpأو يمكنك تشغيل الحاوية كخفي منفصل يعمل في الخلفية. لبدء البرنامج الخفي:
./docker-wine --rdp=startثم لوقف الخفي:
./docker-wine --rdp=stopتأتي جميع أجهزة سطح المكتب والخوادم Windows مع عميل اتصال سطح المكتب عن بُعد ، ويمكن لمستخدمي MacOS تنزيل تطبيق سطح المكتب Microsoft Remote مجانًا من متجر التطبيقات. بالنسبة لمستخدمي Linux ، أقترح استخدام عميل Remmina Remote Desktop.
بالنسبة إلى اسم المضيف ، استخدم localhost إذا تم استضافة الحاوية على نفس الجهاز ، فأنت تقوم بتشغيل عميل سطح المكتب البعيد الخاص بك على الاتصالات عن بُعد ، فقط استخدم اسم الجهاز الذي تتصل به. ملاحظة: للاتصال بجهاز بعيد ، سيتطلب تعرض منفذ TCP 3389 من خلال جدار الحماية.
لتسجيل الدخول ، استخدم تفاصيل حساب المستخدم الافتراضية التالية:
Username: wineuser
Password: wineuserdocker-wineابدأ الحاوية كجذر:
./docker-wine --as-rootأو ابدأ الحاوية بنفسك مع نفس اسم المستخدم و UID و GID ومسار المنزل (مفيد بشكل خاص عند الارتباط بنظام الملفات المحلي):
./docker-wine --as-meيمكنك الجمع بين الخيارات:
./docker-wine --as-root --rdpيمكنك أيضًا استخدام بناء جملة Docker القياسي لإضافة أكبر عدد ممكن من متغيرات البيئة والأجهزة والمجلدات التي تحتاجها:
./docker-wine --env= " MY_ENV_VAR=some_value " --device=/dev/snd --volume= " myvol:/some/path:ro " --volume= " /usr/data:data " راجع مساعدة docker-wine للحصول على قائمة كاملة بالخيارات:
./docker-wine --help كلمة المرور الافتراضية هي wineuser وستتغير إلى اسم المستخدم الخاص بك افتراضيًا إذا كنت تستخدم --as-me . يمكنك تجاوز كلمة المرور الافتراضية باستخدام --password="your_password" ولكن على الرغم من أن كلمة المرور هذه مشفرة قبل نقلها إلى الحاوية ، إلا أن كلمة المرور الخاصة بك لا تزال تظهر في نص عادي في قائمة المعالجة لأي مستخدم آخر متصل بجهاز المضيف نفسه. اعتمادًا على حالة الاستخدام ، قد تكون هذه مشكلة.
يتمثل أحد الحلول في استخدام- --password-prompt ويتم مطالبته بإدخال كلمة مرور المستخدم عند إنشاء حاوية Docker-Wine. سيمنع هذا كلمة المرور الخاصة بك من الظهور في قائمة عمليات جهازك ، ولكنه يتطلب إدخال كلمة المرور يدويًا في كل مرة.
إذا كان المطالبة غير مرغوب فيه ، فإن الحل هو تشفير كلمة المرور الخاصة بك قبل نقلها إلى نص docker-wine ، باستخدام openssl . سوف ينتج هذا الأمر تجزئة مشفرة MD5 من كلمة المرور الخاصة بك مع ملح عشوائي مما يعني أن كل تشغيل سوف ينتج تجزئة مختلفة:
openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password "
تتمثل إحدى طرق استخدام هذه السلسلة الآمنة في تخزينها على القرص:
echo $( openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password " ) > ~ /.docker-wine ثم ببساطة cat الملف عند استخدام البرنامج النصي docker-wine :
./docker-wine --rdp --as-me --secure-password= " $( cat ~ /.docker-wine ) " أولاً ، استنساخ المستودع من جيثب:
git clone https://github.com/scottyhardy/docker-wine.git
cd docker-wineلبناء الحاوية ، ما عليك سوى التشغيل:
./build لتشغيل الحاوية التي تم إنشاؤها محليًا ، استخدم docker-wine مع مفتاح --local :
./docker-wine --local wine notepad عندما يتم إنشاء مثيل للحاوية النبيلة مع برنامج docker-wine ، يتم إنشاء حاوية حجم تسمى winehome ويتم تعيينها إلى منزل المستخدم داخل الحاوية. يتيح استخدام حاوية الصوت إزالة حاوية Docker-Wine بأمان بعد كل تنفيذ حيث ستستمر بيانات المستخدم طالما لم يتم إزالة حجم winehome . يتيح هذا بشكل فعال تبديل صورة docker-wine للحصول على إصدار أحدث في أي وقت.
يمكنك إنشاء حاوية حجم winehome يدويًا عن طريق التشغيل:
docker volume create winehomeإذا كنت لا تريد حاوية الصوت ، فيمكنك حذفها باستخدام:
docker volume rm winehome إذا كنت تخطط لاستخدام scottyhardy/docker-wine كقاعدة لصورة أخرى من Docker ، فيجب عليك إعداد نفس ENTRYPOINT لتمكين أوضاع خادم RDP X11 لمواصلة التشغيل:
FROM scottyhardy/docker-wine:latest
... <your code here>
ENTRYPOINT [ "/usr/bin/entrypoint" ]docker runهناك عدد من المتطلبات المسبقة للحصول على إعادة توجيه Pulseaudio على Linux ولإعادة توجيه X11 للعمل على MacOS. أخطط لتوثيقها في ويكي في المستقبل القريب ، لكن هذا يجب أن يكون كافياً لتبدأ.
أولاً ، اسحب أحدث صورة من DockerHub:
docker pull scottyhardy/docker-wine فيما يلي أمر docker run الأساسي لإعادة توجيه X11 على Linux الذي سيبدأ جلسة باش تفاعلية:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " DISPLAY "
--volume= " ${XAUTHORITY :- ${HOME} / .Xauthority} :/root/.Xauthority:ro "
--volume= " /tmp/.X11-unix:/tmp/.X11-unix:ro "
scottyhardy/docker-wine /bin/bash فيما يلي أمر docker run الأساسي لبدء خادم RDP على كل من MacOs و Linux مع جلسة Bash التفاعلية:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " RDP_SERVER=yes "
--publish= " 3389:3389/tcp "
scottyhardy/docker-wine /bin/bashلاختبار الفيديو ، حاول فتح المفكرة:
./docker-wine wine notepad لاختبار الصوت ، حاول استخدام pacat :
./docker-wine pacat -vv /dev/urandom