ภาพนักเทียบท่าที่มีไวน์และไวน์สำหรับใช้งานแอปพลิเคชัน Windows บน Linux และ MacOS
คอนเทนเนอร์ Docker-Wine สามารถทำงานได้ด้วยการส่งต่อ X11 หรือเป็นเซิร์ฟเวอร์ RDP เพื่อให้เหมาะกับกรณีการใช้งานของคุณ ค่าเริ่มต้นคือการใช้การส่งต่อ X11 ซึ่งใช้เซิร์ฟเวอร์ 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บน macOS:
curl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-winedocker-wine ด้วยการส่งต่อ x11การรันสคริปต์โดยไม่มีอาร์กิวเมนต์อื่นจะเริ่มเซสชันการทุบตีแบบโต้ตอบ:
./docker-wine คุณสามารถแทนที่เซสชันการทุบตีเชิงโต้ตอบเริ่มต้นได้โดยการเพิ่ม wine , winetricks , winecfg หรือคำสั่งอื่น ๆ ที่ถูกต้องด้วยอาร์กิวเมนต์ที่เกี่ยวข้อง:
./docker-wine wine notepaddocker-wine ด้วย XVFBเริ่มต้นการแสดงผลเฟรมบัฟเฟอร์ค่าเริ่มต้นเป็น: xvfb: 95 -screen 0 320x200x8 การส่งออกแสดงไปยังหมายเลขเซิร์ฟเวอร์: 95
./docker-wine --xvfb./docker-wine --xvfb=:95,0,320x200x8docker-wine ที่แนบมากับ Notty ./docker-wine --nottydocker-wine ด้วยเซิร์ฟเวอร์ RDP รันด้วยตัวเลือก --rdp เพื่อเริ่มเซิร์ฟเวอร์ RDP ด้วยเซสชันการทุบตีแบบโต้ตอบ:
./docker-wine --rdpหรือคุณสามารถเรียกใช้คอนเทนเนอร์เป็น daemon เดี่ยวที่ทำงานในพื้นหลัง เพื่อเริ่ม daemon:
./docker-wine --rdp=startจากนั้นจะหยุด daemon:
./docker-wine --rdp=stopเดสก์ท็อปและเซิร์ฟเวอร์ Windows ทั้งหมดมาพร้อมกับไคลเอนต์การเชื่อมต่อเดสก์ท็อประยะไกลที่ติดตั้งไว้ล่วงหน้าและผู้ใช้ MACOS สามารถดาวน์โหลดแอปพลิเคชันเดสก์ท็อประยะไกลของ Microsoft ได้ฟรีจาก App Store สำหรับผู้ใช้ Linux ฉันขอแนะนำให้ใช้ไคลเอนต์เดสก์ท็อปรี Remmina ระยะไกล
สำหรับชื่อโฮสต์ให้ใช้ localhost หากคอนเทนเนอร์โฮสต์บนเครื่องเดียวกันกับที่คุณใช้ไคลเอนต์เดสก์ท็อประยะไกลของคุณและสำหรับการเชื่อมต่อระยะไกลเพียงแค่ใช้ชื่อหรือที่อยู่ IP ของเครื่องที่คุณกำลังเชื่อมต่อ หมายเหตุ: ในการเชื่อมต่อกับเครื่องระยะไกลจะต้องใช้พอร์ต 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 ) " ก่อนอื่นโคลนที่เก็บจาก GitHub:
git clone https://github.com/scottyhardy/docker-wine.git
cd docker-wineในการสร้างคอนเทนเนอร์เพียงแค่เรียกใช้:
./build ในการเรียกใช้คอนเทนเนอร์ที่สร้างขึ้นในพื้นที่ของคุณให้ใช้ docker-wine ด้วยสวิตช์ --local :
./docker-wine --local wine notepad เมื่อคอนเทนเนอร์ Docker-Wine ถูกสร้างอินสแตนซ์ด้วยสคริปต์ docker-wine คอนเทนเนอร์ปริมาณที่ชื่อ winehome ถูกสร้างขึ้นและถูกแมปกับบ้านของผู้ใช้ภายในคอนเทนเนอร์ การใช้คอนเทนเนอร์ระดับเสียงช่วยให้ตู้คอนเทนเนอร์ Docker Wine ถูกลบออกอย่างปลอดภัยหลังจากการดำเนินการทุกครั้งเนื่องจากข้อมูลผู้ใช้จะยังคงอยู่ตราบใดที่ปริมาณ winehome ไม่ได้ถูกลบออก สิ่งนี้จะช่วยให้ภาพ docker-wine ได้อย่างมีประสิทธิภาพเปลี่ยนไปเป็นเวอร์ชันใหม่ได้ตลอดเวลา
คุณสามารถสร้างภาชนะบรรจุ winehome ด้วยตนเองได้ด้วยการวิ่ง:
docker volume create winehomeหากคุณไม่ต้องการคอนเทนเนอร์ระดับเสียงคุณสามารถลบได้โดยใช้:
docker volume rm winehome หากคุณวางแผนที่จะใช้ scottyhardy/docker-wine เป็นฐานสำหรับอิมเมจนักเทียบท่าอื่นคุณควรตั้ง ENTRYPOINT ร่วมเดียวกันเพื่อเปิดใช้งานโหมดการส่งต่อ X11 และโหมดเซิร์ฟเวอร์ RDP เพื่อดำเนินการต่อ:
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 ด้วยเซสชันการทุบตีแบบโต้ตอบ:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " RDP_SERVER=yes "
--publish= " 3389:3389/tcp "
scottyhardy/docker-wine /bin/bashในการทดสอบวิดีโอลองเปิด Notepad:
./docker-wine wine notepad ในการทดสอบเสียงลองใช้ pacat :
./docker-wine pacat -vv /dev/urandom