मैं वायलैंड के तहत एक कंटेनर में ग्राफिकल एप्लिकेशन कैसे चला सकता हूं?


15

जब मैंने X11 डेस्कटॉप का उपयोग किया, तो मैं $DISPLAYचर और /tmp/X11-unixनिर्देशिका को साझा करके डॉकटर कंटेनरों में ग्राफिकल एप्लिकेशन चला सकता था । उदाहरण के लिए:

docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock

अब, मैं फेडोरा 25 रनिंग वेलैंड पर हूं, इसलिए कंटेनर के साथ साझा करने के लिए कोई X11 बुनियादी ढांचा नहीं है। मैं कंटेनर में ग्राफ़िकल एप्लिकेशन कैसे लॉन्च कर सकता हूं, और क्या यह मेरे डेस्कटॉप पर दिखाई देगा? क्या XWayland में टाई करने का कोई तरीका है?


सुनिश्चित नहीं हैं कि आपके प्रश्न का सही तरीके से उत्तर कैसे दिया जाए (मैंने इसे पहले कभी नहीं किया है) लेकिन मेरे सिस्टम पर वेन्डल द्वारा उपयोग किए गए यूनिक्स डोमेन सॉकेट /run/user/1000/wayland-0मेरे व्यक्तिगत डेस्कटॉप के लिए है।
ब्राचली

जवाबों:


16

जैसा कि आप कहते हैं कि आप वायलैंड के साथ फेडोरा 25 चला रहे हैं, मुझे लगता है कि आप गनोम-वेलैंड डेस्कटॉप का उपयोग कर रहे हैं।

Gnome-Wayland X अनुप्रयोगों का समर्थन करने के लिए Xwayland चलाता है। आप Xwayland पहुंच को साझा कर सकते हैं जैसे आपने Xorg के साथ किया था।

आपका उदाहरण कमांड याद करता है XAUTHORITY, और आप उल्लेख नहीं करते हैं xhost। आपको एक्सकेलैंड (या किसी भी एक्स) तक पहुंचने के लिए डॉक में एक्स अनुप्रयोगों की अनुमति देने के लिए इनमें से एक तरीके की आवश्यकता है। चूंकि यह सब वेलैंड से संबंधित नहीं है, मैं संदर्भित करता हूं कि आप डॉक कंटेनर में GUI एप्लिकेशन कैसे चला सकते हैं? डॉक में एक्स एप्लिकेशन कैसे चलाएं।

संक्षेप में, दो समाधानों के साथ xhost:

  1. अपने स्थानीय उपयोगकर्ता को xhost के माध्यम से जाने की अनुमति दें: xhost +SI:localuser:$(id -un)और docker रन विकल्प के साथ एक समान उपयोगकर्ता बनाएं:--user=$(id -u):$(id -g)
  2. निराश: एक्स के साथ रूट एक्सेस की अनुमति दें xhost +SI:localuser:root

संबंधित नुकसान : एक्स आम तौर पर साझा मेमोरी (एक्स एक्सटेंशन MIT-SHM) का उपयोग करता है । डॉकर कंटेनर अलग-थलग हैं और साझा मेमोरी तक नहीं पहुंच सकते। यह ग्लिट्स और रैम एक्सेस फेलियर को प्रस्तुत कर सकता है। आप डॉक रन विकल्प के साथ इससे बच सकते हैं --ipc=host। यह कंटेनर अलगाव को प्रभावित करता है क्योंकि यह IPC नामस्थान को निष्क्रिय करता है। तुलना करें: https://github.com/jessfraz/dockerfiles/issues/359


X के बिना docker में Wayland एप्लिकेशन को चलाने के लिए , आपको Gnome-Wayland या Weston की तरह एक रनिंग वीलैंड कंपोज़िटर की आवश्यकता होती है। आपको वायलैंड सॉकेट को साझा करना होगा। आप इसे ढूंढते हैं XDG_RUNTIME_DIRऔर इसका नाम इसमें संग्रहीत किया जाता है WAYLAND_DISPLAY। जैसा कि XDG_RUNTIME_DIRकेवल इसके मालिक के लिए उपयोग की अनुमति देता है, आपको होस्ट के रूप में कंटेनर में समान उपयोगकर्ता की आवश्यकता होती है। उदाहरण:

docker run -e XDG_RUNTIME_DIR=/tmp \
           -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
           -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY  \
           --user=$(id -u):$(id -g) \
           imagename waylandapplication

Qt5 अनुप्रयोगों की भी जरूरत है -e QT_QPA_PLATFORM=waylandऔर इसके साथ शुरू किया जाना चाहिएimagename dbus-launch waylandapplication


डॉक में एक्स और वेलैंड अनुप्रयोगों के लिए x11docker एक समाधान में एक सब है। यह कंटेनर अलगाव को संरक्षित करने के बारे में भी परवाह करता है (जो कि खो जाता है यदि आपके उदाहरण के रूप में होस्ट एक्स डिस्प्ले साझा करना)।


अगर मैं जिस ऐप को चलाना चाहता हूं, वह एक्स या वेलैंड है तो क्या होगा? क्या ऐसा कुछ जेनेरिक है जिसे मैं पास कर सकता हूं ताकि यह स्वतः निर्धारित हो सके कि XWayland की जरूरत है या नहीं?
ऑक्सविवि


1
@ShN वेस्टन को एक अन्य वेन्डल कंपोज़िटर में क्लाइंट के रूप में चलाना संभव है। इस क्लाइंट वेस्टन के अंदर आप X एप्लिकेशन के साथ Xwayland चला सकते हैं। X11docker के साथ:x11docker --weston-xwayland imagename application
mviereck

1
इसके अलावा, आप एक वेलैंड ग्राहक के रूप में सीधे Xwayland चला सकते हैं @Shn: Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application। Xwayland पूरे प्रदर्शन को कवर करेगा; आप इसे <Super> <LeftMouseButton> के साथ घुमा सकते हैं। X11docker के साथ: x11docker --xwayland imagename application
मविरेक

1
@ShN आपको किसी भी स्थिति में एक एक्स सर्वर की आवश्यकता है। होस्ट पर एक्स से बचने के लिए मैं x11docker / xwayland प्रदान करता हूं । यदि किसी दिन xpraGTK3 + python3 में पोर्ट किया जाता है, तो यह निर्बाध खिड़कियों के साथ आगे की संभावनाएं प्रदान करेगा। Xvfbकंटेनर में अदृश्य सेटअप संभव है । विस्तार से चर्चा के लिए आप जीथब पर एक मुद्दा टिकट खोल सकते हैं ।
मविरेक

0

मैं Google द्वारा Sommelier की सलाह दूंगा। यह आपको वेलैंड या X11 ऐप लॉन्च करने की अनुमति देता है और उन ऐप्स को सॉकेट प्रदान करता है जिन्हें वे वर्तमान डिस्प्ले सर्वर में लाने के लिए देख रहे हैं। https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/

क्रोमोस पर क्राउटन / क्रॉस्टिनी नहीं बल्कि किसी भी सिस्टम पर काम करने का एक सरल तरीका।

https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.