सु उपयोगकर्ता के लिए 'कोई प्रोटोकॉल निर्दिष्ट नहीं' कैसे हल करें


15

मैं अपने सिस्टम पर ग्राफ़िकल सॉफ़्टवेयर को निष्पादित करने के लिए एक वैकल्पिक उपयोगकर्ता (गैर-व्यवस्थापक) का उपयोग करने का प्रयास कर रहा हूं। इस वैकल्पिक उपयोगकर्ता को नाम दिया गया है और उसी नाम के दूरस्थ सिस्टम उपयोगकर्ता से मिलान करने के लिए यूआईडी और जीआईडी ​​दिया गया है। यूआईडी 500 है इसलिए मेरा मानना ​​है कि यह उपयोगकर्ता को 'गैर-लॉगिन' उपयोगकर्ता बनाता है।

उबंटू से शुरू होकर मेरे मुख्य खाते में प्रवेश किया, मैं एक टर्मिनल खोलता हूं और suवैकल्पिक उपयोगकर्ता के लिए। फिर मैं आवेदन शुरू करने और 'कोई प्रोटोकॉल निर्दिष्ट नहीं' प्राप्त करने के लिए कमांड निष्पादित करने का प्रयास करता हूं।

क्या यह यूआईडी <1000 की वजह से है, suया उपयोगकर्ता के गैर-प्रशासन के कारण है? मैं इस उपयोगकर्ता को GUI के साथ एप्लिकेशन निष्पादित करने के लिए कैसे प्राप्त कर सकता हूं?

जवाबों:


15

उपयोगकर्ता के UID के कारण समस्या उत्पन्न नहीं हो रही है। 500 यूआईडी की तरह ही ठीक है, और यह कि यूआईडी इसे कुछ गैर-प्रदर्शन प्रबंधकों की डिफ़ॉल्ट सेटिंग्स की नजर में छोड़कर 'गैर-लॉगिन' उपयोगकर्ता नहीं बनाता है।

त्रुटि संदेश कोई भी प्रोटोकॉल निर्दिष्ट नहीं करता है जैसे अनुप्रयोग-विशिष्ट त्रुटि संदेश, और उस पर कोई अनहेल्दी, लेकिन मैं यह अनुमान लगाने जा रहा हूं कि त्रुटि आपके X11 डिस्प्ले से संपर्क करने में असमर्थ है क्योंकि इसमें अनुमति नहीं है इसलिए क्योंकि यह एक अलग उपयोगकर्ता के रूप में चल रहा है। X11 सर्वर से बात करने के लिए अनुप्रयोगों को एक "मैजिक कुकी" (गुप्त टोकन) की आवश्यकता होती है ताकि अन्य उपयोगकर्ताओं के तहत चल रहे सिस्टम पर अन्य प्रक्रियाएं आपके प्रदर्शन पर घुसपैठ न कर सकें, खिड़कियां बना सकें और आपके कीस्ट्रोक्स को स्नूप कर सकें। अन्य सिस्टम उपयोगकर्ता के पास इस मैजिक कुकी की पहुंच नहीं है क्योंकि अनुमतियाँ सेट की गई हैं, इसलिए यह केवल उस उपयोगकर्ता के लिए सुलभ है जिसने डेस्कटॉप वातावरण शुरू किया था (जो कि जैसा होना चाहिए) है।

अपने मूल उपयोगकर्ता के रूप में चल रहे इस प्रयास करें, X11 कुकी को दूसरे खाते में कॉपी करने के लिए:

su - <otheruser> -c "unset XAUTHORITY; xauth add $(xauth list)"

फिर अपना एप्लिकेशन चलाएं। आपको XAUTHORITYउस शेल में भी परेशान करना पड़ सकता है। वह कमांड xauth listआपके मुख्य उपयोगकर्ता से मैजिक कुकी ( ) को निकालता है और इसे ( xauth add) में जोड़ता है जहां से दूसरा उपयोगकर्ता प्राप्त कर सकता है।


विचित्र रूप से, आपके उद्धृत आदेश का उपयोग करके 'su: टर्मिनल से चलाया जाना चाहिए'। लेकिन यह है एक टर्मिनल में ...
जम्मू कोलिन्स

@JCollins कोशिश करते हैं, xauth list >/tmp/xa.$$; su - <otheruser> -c "unset XAUTHORITY; xargs xauth add </tmp/xa.$$"; rm -f /tmp/xa.$$लेकिन जानते हैं कि वहाँ एक भयानक दौड़ की स्थिति है।
रोजा

@JCollins उफ़, हाँ, यह एक समस्या है अगर suएक पासवर्ड के लिए पूछना चाहता हूँ। इस नए आदेश का प्रयास करें।
सेलडा

@ केलदा, सोना, एक इलाज का काम किया। क्या आप यह बता सकते हैं कि कमांड क्या कर रहा है और कैसे कर रहा है? और शायद यह समझाते हुए कि मूल अवतार क्यों नहीं था?
जे कोलिन्स

1
@Jollins आपको लॉग आउट करने और लॉग इन करने के बाद हर बार इसे फिर से करना होगा क्योंकि हर बार एक बिलकुल नया मैजिक कुकी तैयार होता है। यह सामान्य है, यह सुरक्षा मॉडल का हिस्सा है।
सेलाडा

6

मैं अपने मामले में नया प्रदर्शन सर्वर waylandसमस्या थी,

बस xhost + local:तब अन्य उपयोगकर्ताओं (जैसे रूट) को आपके सत्र में प्रोग्राम चलाने की अनुमति है, लेकिन नेटवर्क कनेक्शन की अनुमति नहीं होगी।

यदि आप किसी होस्ट से क्लाइंट्स की अनुमति लेना चाहते हैं , तो आप xhost +किसी भी होस्ट को निर्दिष्ट किए बिना उपयोग कर सकते हैं । यह हालांकि असुरक्षित है , केवल होस्ट (एस) को निर्दिष्ट करना बेहतर होगा जिसके लिए आप अपने सत्र तक पहुंच प्रदान करना चाहते हैं।


1
मेरे मामले xhost +में पर्याप्त पर्याप्त था
खतरे

1
@ dang89 जब यह काम करता है, तो यह किसी भी होस्ट को आपके सत्र से कनेक्ट करने की अनुमति देता है यदि आपके पास रिमोट एक्सेस को रोकने के लिए कोई फ़ायरवॉल नियम नहीं हैं (प्रत्येक वितरण में फ़ायरवॉल नियम नहीं हैं जो आने वाले सभी अनुरोधों को अस्वीकार करते हैं जैसे ubuntu के पास सर्वर जैसे एक्सेस को रोकने के लिए पूर्व-निर्धारित नियम नहीं हैं सांबा या अपाचे जिसे उपयोगकर्ता स्थापित करना चाहता है) ताकि नए लिनक्स उपयोगकर्ताओं के लिए यह एक समस्या बन सके। व्यक्तिगत रूप से मैं केवल सहेजने के लिए पहुंच को सीमित कर
दूंगा

3

कुछ ऐसा प्रयास करें

$ export LOGIN_USER="Math"
$ su - $LOGIN_USER
$ sudo xhost local:$LOGIN_USER &>/dev/null

स्रोत

Ps : स्वीकृत उत्तर ने मेरे लिए काम नहीं किया


3

मान लें कि आप बल को अपने आप को एक्स के साथ संबंध बनाना चाहते हैं ...

मान लें कि आप पहले से ही सर्वर पर अपनी कमांड चला रहे हैं (जहां एक्स रन करता है), अन्यथा इसे पहले काम करने के लिए प्राप्त करें और फिर क्लाइंट से 'ssh -X user @ सर्वर) का उपयोग करें;)।

उदाहरण के लिए xauth कमांड को चलाने के कई तरीके हो सकते हैं, उदाहरण के लिए, आप 'sudo' का उपयोग कर सकते हैं, लेकिन वह पर्यावरण चर खो सकता है या बदल सकता है। निम्नलिखित पर्यावरण चर को संरक्षित करने की आवश्यकता है: प्रदर्शन और XAUTHORITY। यह जाँचने के लिए कि आप जिस तरह से अपनी कमांड चलाते हैं, उसी तरह 'इको $ XAUTHORITY' चला सकते हैं, लेकिन यह सुनिश्चित करें कि आप उन कमांड को चलाने से पहले पर्यावरण चर का विस्तार नहीं कर रहे हैं। उदाहरण के लिए, प्रयास करें: sudo bash -c 'echo "$ XAUTHORITY"' यह देखने के लिए कि आपके sudo को चलाने के बाद XAUTHORITY वास्तव में क्या है (यदि यह गायब हो जाता है तो आपको अपने sudo फ़ाइल में कुछ जोड़ने की आवश्यकता हो सकती है, अन्यत्र देखें)।

आखिरकार, निम्नलिखित कमांड को उस उपयोगकर्ता के रूप में चलाएं जिसे आप सर्वर पर एक्सेस करना चाहते हैं:

xauth info

यह 'प्राधिकरण फ़ाइल' दिखाएगा जो कि (/root/.Xauthority डिफ़ॉल्ट रूप से, रूट के लिए, या कुछ /home/theuser/.Xauthority जैसी) का उपयोग करेगा। यदि यह सही .Xauthority फ़ाइल दिखाता है, तो आपको वास्तव में XAUTHORITY पर्यावरण चर के बारे में चिंता करने की ज़रूरत नहीं है (वास्तव में, मुझे नहीं पता होगा कि यह तब नहीं होगा, जब आप उस फ़ाइल के गैर-मानक स्थान में हेरफेर करना चाहते हैं। )।

उस फ़ाइल को निकालें (यदि यह मौजूद है):

rm /root/.Xauthority

/root/.Xauthorityअपने मामले के लिए सही XAUTHORITY फ़ाइल से बदलें ।

इसे फिर से बनाएँ, लेकिन खाली (यह बहुत सारी आज्ञाओं के लिए आवश्यक है):

touch /root/.Xauthority

इस बिंदु पर आपको कोई प्रोटोकॉल निर्दिष्ट त्रुटि नहीं मिलेगी , भले ही आपको पहले अमान्य MIT-MAGIC-COOKIE-1 मिला हो। उस समय अधिकार फ़ाइल खोजें, जो X सर्वर उपयोग कर रहा है:

ps aux | grep Xorg

यह कुछ इस तरह दिखाना चाहिए:

root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7

फ़ाइल नाम के बाद -authआपको अगले कमांड में क्या चाहिए। इसे रूट के रूप में चलाएं:

sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list

यह 32 अंकों की हेक्साडेसिमल कुंजी को सूचीबद्ध करता है। उदाहरण के लिए आउटपुट हो सकता है:

hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7

अपनी .Xauthority फ़ाइल बनाने के लिए इसका उपयोग करें (उपयोगकर्ता को फिर से लॉगिन करने की आवश्यकता है):

xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7

'c0eaf749aa252101a0f57d5087089db7' को बदलें जो आपके लिए लिस्ट कमांड द्वारा वापस किया गया था। अब आपकी .Xauthority का आकार 51 बाइट्स होना चाहिए और आप X सर्वर (फिर से) से जुड़ सकते हैं।


कोई धागा नहीं है, यह एक क्यू एंड ए साइट है, न कि एक मंच
एंथन डे

1

मेरे पास यह त्रुटि "कोई प्रोटोकॉल निर्दिष्ट नहीं" थी जब मैंने सेस्टेनियम 3.3.1 की शुरुआत एक अपस्ट्रीम स्क्रिप्ट से की थी और तब सेलेनियम में क्रोम ड्राइवर का उपयोग किया था। सेलेनियम X11 के समान उपयोगकर्ता के रूप में चला, और DISPLAY शेल पर्यावरण चर को सही ढंग से सेट किया गया था। मजे की बात यह है कि यह त्रुटि तब नहीं हुई जब मैंने फ़ायरफ़ॉक्स ड्राइवर का उपयोग किया था। सक्रिय X11 उपयोगकर्ता की $ XAUTHORITY के मूल्य को इंगित करने के लिए अपस्टार्ट स्क्रिप्ट के अंदर XAUTHORITY शेल वातावरण चर सेट करना Chrome ड्राइवर के लिए त्रुटि तय करता है।

साइड नोट पर, त्रुटि "कोई प्रोटोकॉल निर्दिष्ट नहीं" क्रोम / क्रोम ड्राइवर द्वारा पूरी तरह से दफन किया गया था और इसे खोजने के लिए आसान नहीं था। मैंने देखा कि क्रोम पैटर्न में निर्देशिका बना रहा था /tmp/.org.chromium.Chromium.*, लेकिन वे जल्दी से गायब हो रहे थे। मैं यह नोटिस करने में कामयाब रहा कि उनके पास एक फाइल chrome_debug.logथी जिसमें एक संदेश था "खुले प्रदर्शन नहीं कर सकता"। मुझे लगा कि यह अजीब है क्योंकि मैंने सत्यापित किया है कि सेलेनियम प्रक्रिया में सही प्रदर्शन था /proc/$pid/environऔर straceसेलेनियम प्रक्रिया पर अधिक अच्छी तरह से आउटपुट की जांच की गई , जिसने "कोई प्रोटोकॉल निर्दिष्ट नहीं किया" जो मुझे अंततः इस प्रश्न की ओर ले गया।

यह त्रुटि XAUTHORITY को परेशान करने और कुछ X11 क्लाइंट को चलाने का प्रयास करके पुन: प्रस्तुत किया जा सकता है। उदाहरण के लिए:

$ XAUTHORITY= xeyes
No protocol specified
Error: Can't open display: :0.0

0

यह सरल था। समस्या तब होती है जब आप रूट sate में होते हैं और gksu का उपयोग करना चाहते हैं बस रूट स्थिति से बाहर निकलें और फिर से प्रयास करें


0

अपने टर्मिनल में इसे टाइप करें इसके xhost +SI:localuser:rootबाद आप export DISPLAY=:0.0फिर टाइप करें


0

स्वीकृत उत्तरों में सुराग का उपयोग करते हुए, मैं इस मुद्दे को अलग तरीके से हल करने में सक्षम था:

  1. काम करने वाले खाते में Xauth फ़ाइल का पता लगाएँ (Xauth1)
  2. खाते में Xauth फ़ाइल का पता लगाएँ जो नहीं करता है (Xauth2)
  3. Xauth1 की कॉपी Xauth2 करें
  4. Xauth2 की अनुमति बदलें

कोड में:

root@45c4933a8f1a:~# xauth info
Authority file:       /headless/.Xauthority
<snip>
root@45c4933a8f1a:~# su OtherUser
OtherUser@45c4933a8f1a:/headless$ xauth info
Authority file:       /home/OtherUser/.Xauthority
<snip>
OtherUser@45c4933a8f1a:/headless$ exit
exit
root@45c4933a8f1a:~# cp /headless/.Xauthority /home/OtherUser/.Xauthority 
root@45c4933a8f1a:~# chown OtherUser:OtherUser /home/OtherUser/.Xauthority
root@45c4933a8f1a:~# su OtherUser

0

Let आप के रूप में जीयूआई के लिए उपयोग करने की कोशिश का कहना है user2 ( सामान्य उपयोगकर्ता ), तो आप के रूप में स्थापना यूआई लोड करने के लिए की जरूरत है user2

इसका अनुसरण करने का प्रयास करें:

रूट के रूप में लॉगिन करें :

sudo su

एक्स सर्वर का परीक्षण करें:

xclock

यदि आप घड़ी चलाते हुए देख सकते हैं, तो जाना अच्छा है, अब इसे चलाने का प्रयास करें:

xhost

परिणाम इस तरह होना चाहिए:

xhost SI:localuser:tri
# tri is my user name

अब user2 को xhost एक्सेस करें

xhost +SI:localuser:user2

अब user2 में फिर से लॉगिन करने की कोशिश करें और किसी भी GUI प्रोग्राम को खोलने का प्रयास करें।

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