मैं 'मूल' से GUI ऐप क्यों नहीं चला सकता: "कोई प्रोटोकॉल निर्दिष्ट नहीं"?


38

मैंने कल रात अपनी मशीन पर डेबियन स्थापित किया। अब, मुझे समझ नहीं आ रहा है कि रूट के रूप में चलने पर मैं एक टर्मिनल से GUI ऐप क्यों नहीं चला सकता।

उदाहरण के लिए:

sudo -i
glxgears

निम्नलिखित उत्पादन उत्पन्न करता है:

No protocol specified
Error: couldn't open display :0

लेकिन जब मैं पहली बार टर्मिनल खोलता हूं तो मैं glxgearsउपयोगकर्ता खाते से चला सकता हूं । इसके बाद ही मैं यह sudo -iकरता हूं कि समस्या बढ़ गई है। यह किसी भी GUI ऐप के लिए होता है जिसे मैं चलाने की कोशिश करता हूं। मुझे लगता है कि यह शायद X11 से संबंधित है, लेकिन मुझे यकीन नहीं है।


1
stackoverflow.com/a/20612084 यह मेरे लिए पूरी तरह से काम किया।

जवाबों:


39

X सर्वर तक पहुँचने के लिए दो चीजों की आवश्यकता होती है:

  • $DISPLAYचर सही प्रदर्शन की ओर इशारा करते (आमतौर पर :0)
  • उचित प्रमाणीकरण की जानकारी

प्रमाणीकरण जानकारी को स्पष्ट रूप से निर्दिष्ट किया जा सकता है $XAUTHORITY, और ~/.Xauthorityअन्यथा चूक हो सकती है।

तो $DISPLAYऔर $XAUTHORITYअपने उपयोगकर्ता के लिए सेट है, sudoभी नया खोल के लिए भी सेट हो जाएगा, और सब कुछ ठीक काम करना चाहिए।

यदि वे सेट नहीं हैं, तो वे संभवतः गलत मानों के लिए डिफ़ॉल्ट होंगे और आप प्रारंभ नहीं कर सकते हैं और एक्स अनुप्रयोग।

डेबियन $XAUTHORITYमें आमतौर पर स्पष्ट रूप से सेट नहीं किया जाता है। बस जोड़ दो

export XAUTHORITY=~/.Xauthority

अपने .bashrcया स्पष्ट रूप से कहें XAUTHORITY=~/.Xauthority sudo ...और सब कुछ काम करना चाहिए।

आप यह xauth listजांचने के लिए भी उपयोग कर सकते हैं कि क्या उचित प्रमाणीकरण की जानकारी उपलब्ध है।


1
xauth infoप्राधिकरण फ़ाइल का रास्ता दिखाता है
टॉमस टोमसेक

1
xhost +मेरी समस्या तय
खतरे my

3
ध्यान रखें कि xhost +प्रमाणीकरण को पूरी तरह से निष्क्रिय कर देता है और सभी को आपकी स्क्रीन पर सभी एप्लिकेशन को एक्सेस करने की अनुमति देता है ...
michas

1
डेबियन के लिए, क्या मैं XAUTHORITY एक्सपोर्ट को रूट के रूप में टाइप करता हूं? क्योंकि यह deb10 पर काम नहीं कर रहा है? मैं sudo su
marinara

का उपयोग @marinara sudo -iबजाय sudo su -
माइक्स

23

मेरा भी आपसे एक ही सवाल था लेकिन एक सामान्य उपयोगकर्ता के लिए। मान लीजिए कि मैं उपयोगकर्ता खाता फू का उपयोग करके फ़ायरफ़ॉक्स शुरू करना चाहता हूं। मैं बार के रूप में लॉग इन हूं:

[bar@localhost ~]$ sudo -u foo -H firefox

अफसोस की बात है कि यह कमांड उसी त्रुटि के साथ विफल रही जैसे प्रश्न में (अर्थात कोई प्रोटोकॉल निर्दिष्ट नहीं किया गया है और प्रदर्शन नहीं खोल सकता है)

मेरा समाधान केवल एक्स सर्वर के लिए अधिकृत उपयोग की सूची में उपयोगकर्ता फू को जोड़ना था।

xhost si:localuser:foo

और वह यह था, तब मैं फ़ायरफ़ॉक्स sudoऔर उपयोगकर्ता फू का उपयोग करके फ़ायरफ़ॉक्स (और अन्य एक्स एप्लिकेशन) लॉन्च करने में सक्षम था ।

बैकग्राउंड : एक्स विंडो पर, क्लाइंट / सर्वर आर्किटेक्चर है। जब आप कोई एप्लिकेशन लॉन्च करते हैं तो आप एक्स सर्वर प्राधिकरण से इसे प्रदर्शित करने का अनुरोध करते हैं। डिफ़ॉल्ट रूप से एक बार जब आप एक सत्र (आप ग्राफिक रूप से लॉगिन) खोलते हैं, तो आपको (आपके उपयोगकर्ता) सर्वर और प्रदर्शन अनुप्रयोगों के साथ जाहिर करने की अनुमति होती है। जब तक आप इसे निर्दिष्ट नहीं करते तब तक अन्य उपयोगकर्ताओं के पास इसकी अनुमति नहीं है। xhostअनुमतियों की सूची में हेरफेर करने के लिए एक उपकरण है। siइंगित करता है कि शासन सर्वर साइड है और यह स्थानीय उपयोगकर्ता को प्राधिकृत fooप्रदर्शन आवेदन करने के लिए। इस संबंध में एक्स विंडो बहुत शक्तिशाली है और आप DISPLAYपर्यावरण चर के साथ खेलते हुए और xhost(लेकिन उनके लिए सीमित नहीं) द्वारा दूरस्थ अनुप्रयोगों को स्थानीय रूप से प्रदर्शित कर सकते हैं । पुराने समय में, जब लोग टाइप करते थेxhost + और स्पष्ट रूप से सभी को अपने एक्स सत्र का उपयोग करने की अनुमति दी, प्रैंक्स के लिए अपनी स्क्रीन पर आवेदन प्रदर्शित करना संभव था ;-) इतना नहीं आजकल लोग एक्स विंडो क्लाइंट / सर्वर आर्किटेक्चर का उपयोग करते हुए कम से कम हैं (कम से कम मैं जो कुछ भी देखता हूं उसके लिए) पिछले 10 साल)।

पुनश्च: मैंने फ़ायरफ़ॉक्स को एक तरह के "जेल" में लॉन्च करने के लिए ऐसा किया था ( भविष्य में पीडीएफ़ की तरह एक भेद्यता से बचने के लिए )। लेकिन मुझे जल्दी ही पता चला कि सुडो के माध्यम से फ़ायरफ़ॉक्स कॉल करने से यह ऑडियो और वीडियो हार्डवेयर तक नहीं पहुंच पाएगा। लेकिन एक लड़का है जो स्पष्ट रूप से वीडियो हार्डवेयर त्वरण और ऑडियो को सक्रिय करने के लिए समझाता है जब सुडो के माध्यम से फ़ायरफ़ॉक्स कॉल किया जाता है । इन निर्देशों के साथ YMMV, उदाहरण के लिए मेरे पास अभी भी ऑडियो के साथ इनकार करने की अनुमति है लेकिन वीडियो ठीक है (Fedora 22 पर SELinux के साथ परीक्षण किया गया)।


1
मेरे मामले fooमें root, मुझे xhost si:localuser:rootउबंटू 17.10 पर चलना था ।
कार्ल रिक्टर

आप xhost si:localhost<user>कमांड कहाँ जोड़ते हैं ? यदि कोई उपयोगकर्ता लॉग ऑन नहीं है, तो किसी के पास अनुमति देने के लिए एक्स सर्वर उपलब्ध नहीं है।
cbcoutinho

@cbcoutinho उपरोक्त उपयोग मामला तब है जब कोई व्यक्ति लॉग ऑन है और उसी होस्ट पर किसी अन्य व्यक्ति के रूप में XWindow एप्लिकेशन चलाना चाहता है। यदि आप अपने उपयोग के मामले की व्याख्या करते हैं (आप क्या समस्या हल करना चाहेंगे) तो मैं संभावित रूप से आपकी मदद कर सकता हूं।
ह्यूजेंस

@ ह्युजेंस मेरे पास तरल पदार्थों का अनुकरण करने के लिए एक कार्य केंद्र है जो एक GPU से भी सुसज्जित है। मैं विज़ुअलाइज़ेशन के साथ प्रस्तुत करता हूं ParaView, एक प्रोग्राम बनाया जाता है vtk, आमतौर पर वर्कस्टेशन पर ही। ParaViewssh के माध्यम से एक सुरक्षित हेडलेस क्लाइंट / सर्वर रेंडरिंग मॉडल भी प्रदान करता है, जिसे मैं VNC के उपयोग के बजाय रिमोट का लाभ उठाना चाहूंगा। कार्य केंद्र में प्रवेश करने और निष्पादित किए बिना xhost, मैं GPU का उपयोग नहीं कर सकता। इसका मतलब है कि मैं दूर से मशीन को रीबूट नहीं कर सकता और अभी भी जीपीयू तक पहुंच सकता हूं।
cbcoutinho

1
@cbcoutinho X विंडो एक क्लाइंट सर्वर आर्किटेक्चर है। जब आप ssh से जुड़ते हैं, तो आपका स्थानीय कार्य केंद्र क्लाइंट X विंडो बन जाता है। आप rlogin जैसे असुरक्षित प्रोटोकॉल के साथ xhost का उपयोग कर सकते हैं, लेकिन ssh नहीं। आपको इसे करने के लिए ssh को निर्देश देने की आवश्यकता है। या तो -X(बेहतर?) -YSsh पर ध्वज का उपयोग करें , यह उचित पुनर्निर्देशन करेगा। बेशक आपको फिर एक स्थानीय सी सर्वर की आवश्यकता है। हालांकि GPU और OpenGL के साथ, मुझे यकीन नहीं है कि जहां प्रतिपादन / गणना होती है, शायद यह क्लाइंट की तरफ है, सर्वर की नहीं। मुश्किल हो सकता है।
ह्यूजेंस

10

आप या तो यह कर सकते हैं

कमांड लाइन पर उपयोग किए जाने वाले डिस्प्ले को जोड़कर निर्दिष्ट करें -display :0.0

या

रूट के लॉगिन स्क्रिप्ट (.bashrc (.profile, .bash_profile ...) में से एक पर्यावरण चर सेट करें।

export DISPLAY=:0.0

आप देख सकते हैं कि क्या यह सेट है,

$ env |grep DISPLAY
DISPLAY=:0.0

अपने सामान्य उपयोगकर्ता के रूप में सभी होस्टों से सभी उपयोगकर्ताओं के लिए अपना प्रदर्शन खोलने के लिए आप इसके साथ कर सकते हैं:

xhost +


1
xhost + sudo में जाने से पहले एक अस्थायी उपाय के रूप में काम करता है
ऑक्टोपस

1
xhost +मेरे लिए भी काम किया, केवल यह कि वे यह उल्लेख करना भूल गए कि हमें इसे उपयोगकर्ता के टर्मिनल से अधिकृत करना चाहिए, न कि किसी टर्मिनल से sudo su
नेक्सी

1
बूम की तरह सही काम
Adiii

3

यह देखते हुए कि आप डेबियन में हैं, सरल और समर्थित समाधान sudoआपके X11 प्राधिकरण क्रेडेंशियल्स की प्रतिलिपि बनाने की व्यवस्था करना है। इस उद्देश्य के लिए पैकेज pam_xauthमें शामिल है libpam-modules; इसका उपयोग करने के लिए, आपको बस जोड़ना होगा

session  optional  pam_xauth.so

आपकी /etc/pam.d/sudoफ़ाइल पर। आप इसे जोड़ने के लिए भी चुन सकते हैं su, भी। पूरी जानकारी के लिए, pam_xauthमैन पेज से जरूर सलाह लें ।


2

मेरी क्या मदद की:

  1. आप xauth generate :0 . trustedउस userतरफ कर सकते हैं , जो एक नया उत्पन्न करेगाMIT-MAGIC-COOKIE-1
  2. xauth list' asउपयोगकर्ता andरूट (they should be the same if yourxAuthority` चर के साथ नई बनाई गई कुंजी को जांचें एक ही फ़ाइल की ओर इशारा किया गया है।

  3. Voila, rootकिसी भी X-Appटर्मिनल से एक्सेस करेगा , लेकिन केवल अस्थायी रूप से।

इसे स्थायी बनाने के लिए, @Huygens का उत्तर देखें!


1

दूसरा तरीका :

रूट के तहत चलने वाली क्रॉन जैसी सेवाओं का प्रदर्शन करने के लिए उपयोग नहीं होता है यदि वर्तमान एक्स उपयोगकर्ता रूट नहीं है।

हमें बस x में रूट उपयोगकर्ता जोड़ने की जरूरत है, आप इसे स्टार्टअप स्क्रिप्ट के साथ लॉगिन समय पर कर सकते हैं

xhost local:root

परीक्षण के उद्देश्य के लिए हम बस वर्तमान उपयोगकर्ता के तहत कमांड से चला सकते हैं और रूट स्क्रिप्ट / नौकरी / सेवा / ...


बस जिज्ञासु, आप एक क्रोन के माध्यम से एक गुई ऐप क्यों चला रहे होंगे?
ऑक्टोपस

मेरे डिस्ट्रो में मेरे पास एक रूट क्रोन जॉब (मिसेक) है जो सिस्टम सुरक्षा स्वास्थ्य की जांच करता है और एक रिपोर्ट बनाता है ... इसलिए उस रिपोर्ट की जांच करने के लिए लॉग पर जाने के बजाय मैं रिपोर्ट के साथ पॉपअप गुई पसंद करता हूं जब वह नौकरी चलती है
इंटिका

मेरे लिए काम किया
मार्कस विनीसियस पोम्पेउ

0

sudoआदेश एक स्विच वातावरण चर को बचाने के लिये है।

 -E, --preserve-env            preserve user environment when running command

ताकि आप -E स्विच के साथ कमांड चला सकें। उदाहरण:

sudo -E wireshark

यदि आपको वेब ब्राउज़र जैसे गोपनीयता महत्वपूर्ण एप्लिकेशन चलाने की आवश्यकता नहीं है, तो आप sudo के साथ -E स्विच जोड़ना बेहतर होगा। हम केवल ई- स्विच जोड़कर क्रोम या फ़ायरफ़ॉक्स नहीं चला सकते हैं । क्योंकि कई ब्राउज़रों ने यूजर स्पेस उल्लंघन के खिलाफ सुरक्षा को लागू किया है। @ huygens के जवाब में इस विषय पर अंतर्दृष्टि हो सकती है।

ध्यान दें: यदि आपके उपयोगकर्ता का वातावरण ठीक नहीं है DISPLAY और XAUTHORITY पहले से ही सही तरीके से सेट है तो ऐड-ई स्विच मदद नहीं करेगा


-1

इस कमांड का उपयोग करें और यह काम करेगा

sudo cp /home/user/.Xauthority .Xauthority

2
यह cp: cannot stat ‘/home/user/.Xauthority’: No such file or directoryउन 10+ डेबियन आधारित मशीनों में से किसी एक पर देगा जिसकी मुझे पहुँच है।
एंथन

यह थोड़ा संदर्भ देता है (उदाहरण के लिए, आप चुपचाप कुछ वर्तमान निर्देशिका की अपेक्षा करते हैं) और आप कई X11 सत्रों में ऐसा करते समय मुसीबतों जैसे दुष्प्रभावों का उल्लेख नहीं करते हैं। मुझे लगता है कि यह तरीका थोड़ा हैकी है।
v6ak
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.