একটি রিমোট এক্স ডিসপ্লেতে একটি উইন্ডো খুলুন (কেন "প্রদর্শন খুলতে পারে না")?


81

একদা,

DISPLAY=:0.0 totem /path/to/movie.avi

ssh 'এর পরে আমার ল্যাপটপ থেকে আমার ডেস্কটপে প্রবেশের ফলে টোটেমটি movie.aviআমার ডেস্কটপে খেলতে পারে ।

এখন এটি ত্রুটি দেয়:

No protocol specified
Cannot open display:

উভয় কম্পিউটারে স্থিতিশীল হয়ে গেলে আমি ডেবিয়ান স্কিজে পুনরায় ইনস্টল করেছিলাম এবং আমার ধারণা আমি কনফিগারটি ভেঙেছি broke

আমি এটি সম্পর্কে গোগুলি করেছি, এবং আমার জীবনের জন্য আমি কী করব বলে অনুমান করতে পারি না।

(ভিএলসির একটি HTTP ইন্টারফেস রয়েছে যা কাজ করে তবে এটি ssh এর মতো সুবিধাজনক নয়))

যখন আমি ক্রোন জব থেকে এটি চালানোর চেষ্টা করি তখন একই সমস্যা দেখা দেয়।


1
আপনার দূরবর্তী মেশিনটি একটি। Xauthority ফাইল প্রদর্শন করে? অন্যান্য সুস্পষ্ট প্রশ্নটি হল - আপনার এসএস সার্ভার এবং ক্লায়েন্ট কি এক্স ফরওয়ার্ডিংয়ের অনুমতি দেওয়ার জন্য কনফিগার করা আছে? Ssh করতে আপনি কোন আদেশ ব্যবহার করেছেন?
ফাহিম মিঠা

1
আমি কি এক্স ফরোয়ার্ড করার চেষ্টা করছি? আমি কমান্ডটি ক্লায়েন্ট নয়, হোস্টের উপর কার্যকর করাতে চাই। আমার ssh কমান্ডটি কেবলমাত্র আমাকে @ হোস্ট সনাক্তকরণের জন্য এসএসএস করুন host হোস্ট কম্পিউটারে অনুমোদন কোনও ফাইলের সাথে মেলে না।
জাস্টিন

ফাহিমের পরামর্শ অনুসারে, totemআপনার এক্স কুকিটি খুঁজে না পাওয়ার কারণে আপনার সমস্যাটি এসেছে এবং XAUTHORITYএটির জন্য আপনার ডেস্কটপে আপনার নিয়মিত সেশনের যথাযথ মান, অর্থাৎ মানটি নির্ধারণ করা দরকার a লিনাক্স পড়ুন : কিছু পটভূমির জন্য ssh + স্ক্রিনের মাধ্যমে সেশন শুরু করার সময় wmctrl প্রদর্শনটি খুলতে পারে না ; সম্পর্কিত উত্তরটিও দেখুন মূল হিসাবে আমি অন্য ব্যবহারকারীদের ডেস্কটপে গ্রাফিক্যাল প্রোগ্রাম চালু করতে পারি?
গিলস

1
ঠিক আছে, কম্পিউটারে শারীরিকভাবে বসে এবং প্রতিধ্বনি টাইপ করা $ XAUTHORITY ssh সেশনে / var / run / gdm3 / auth-for-jcress-bb32gX / ডাটাবেস দেয়, টাইপিং প্রতিধ্বনি $ DISPLAY = (উপরের পাথ) সমস্যার সমাধান করে না
জাস্টিন

1
আমি GDM3, কেন তারা শুধু রাখা না পারে দোষারোপ $XAUTHORITY~/.Xauthorityসবাই মত এটা হতে প্রত্যাশা করে।
অ্যারোমাস্টার

উত্তর:


78

( লিনাক্স থেকে অভিযোজিত : ssh + স্ক্রিনের মাধ্যমে সেশন শুরু করার সময় wmctrl প্রদর্শন খুলতে পারে না )

প্রদর্শন এবং সত্যতা

এক্স ডিসপ্লের সাথে সংযোগ স্থাপনের জন্য একটি এক্স প্রোগ্রামের জন্য দুটি টুকরো তথ্য প্রয়োজন।

  • এটা তোলে ডিসপ্লে, যা সাধারণত হয় এর ঠিকানা প্রয়োজন :0যখন আপনি স্থানীয়ভাবে বা লগইন করেন তাহলেও :10, :11ইত্যাদি আপনি দূরবর্তী অবস্থান থেকে লগ ইন যখন (কিন্তু সংখ্যা কত এক্স সংযোগ সক্রিয় উপর নির্ভর করে পরিবর্তন করতে পারেন)। ডিসপ্লেটির ঠিকানাটি সাধারণত DISPLAYপরিবেশের পরিবর্তনশীলতে প্রদর্শিত হয়।

  • এটি প্রদর্শনের জন্য পাসওয়ার্ডের প্রয়োজন। এক্স ডিসপ্লে পাসওয়ার্ডগুলিকে ম্যাজিক কুকিজ বলা হয় । ম্যাজিক কুকিজগুলি সরাসরি নির্দিষ্ট করা হয় না: এগুলি সর্বদা এক্স কর্তৃপক্ষের ফাইলগুলিতে সঞ্চিত থাকে যা "ডিসপ্লেতে :42কুকি রয়েছে 123456" ফর্মের রেকর্ডের সংগ্রহ । এক্স কর্তৃপক্ষ ফাইলটি সাধারণত XAUTHORITYপরিবেশের পরিবর্তনশীলতে নির্দেশিত হয় । যদি $XAUTHORITYসেট না করা থাকে তবে প্রোগ্রামগুলি ব্যবহার করে ~/.Xauthority

আপনি আপনার ডেস্কটপে প্রদর্শিত উইন্ডোগুলিতে কাজ করার চেষ্টা করছেন। যদি আপনি একমাত্র ব্যক্তি আপনার ডেস্কটপ মেশিন ব্যবহার করেন তবে সম্ভবত প্রদর্শিত নামটি সম্ভবত :0। এক্স কর্তৃপক্ষের ফাইলটির অবস্থান সন্ধান করা আরও শক্ত, কারণ দেবিয়ান স্কুিজ বা উবুন্টু 10.04 এর অধীনে জিডিএম স্থাপন করার পরে এটি একটি ফাইল এলোমেলোভাবে উত্পন্ন নাম সহ রয়েছে। (আপনার আগে কোনও সমস্যা হয়নি কারণ gdm এর পূর্ববর্তী সংস্করণগুলি ডিফল্ট সেটিংস ব্যবহার করেছিল, অর্থাৎ কুকিজ এতে সঞ্চিত ছিল ~/.Xauthority))

ভেরিয়েবলের মান পাওয়া

এখানে মান প্রাপ্ত করার কয়েকটি উপায় রয়েছে DISPLAYএবং XAUTHORITY:

  • আপনি নিয়মিতভাবে আপনার ডেস্কটপ থেকে একটি স্ক্রিন সেশন শুরু করতে পারেন, সম্ভবত আপনার লগইন স্ক্রিপ্টগুলিতে স্বয়ংক্রিয়ভাবে (থেকে ~/.profile; তবে এটি কেবল এক্স এর অধীনে লগইন করুন: পরীক্ষা DISPLAYদিয়ে কোনও মান শুরু হলে সেট করা হয় :(এটি সম্ভবত আপনার সমস্ত ক্ষেত্রে আবশ্যক এনকাউন্টার)). ইন ~/.profile:

    case $DISPLAY in
      :*) screen -S local -d -m;;
    esac
    

    তারপরে, ssh অধিবেশনে:

    screen -d -r local
    
  • এছাড়াও আপনি মান বাঁচাতে পারে DISPLAYএবং XAUTHORITYএকটি ফাইলে ও মূল্যবোধ কথা বলেন। ইন ~/.profile:

    case $DISPLAY in
      :*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
    esac
    

    Ssh অধিবেশন:

    . ~/.local-display-setup.sh
    screen
    
  • আপনি একটি চলমান প্রক্রিয়া DISPLAYএবং এর মান সনাক্ত করতে পারে XAUTHORITY। এটি স্বয়ংক্রিয়ভাবে কঠিন। আপনি যে প্রক্রিয়াটিতে কাজ করতে চান তার সাথে সংযুক্ত একটি প্রক্রিয়ার পিআইডি বের করতে হবে, তারপরে /proc/$pid/environ( eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')¹) থেকে পরিবেশের ভেরিয়েবলগুলি পান ।

কুকিগুলি অনুলিপি করা হচ্ছে

আরেকটি পদ্ধতির ( অ্যারোমাস্টারের পরামর্শ অনুসারে ) $XAUTHORITYssh সেশনের মান অর্জনের চেষ্টা না করা , বরং এক্স সেশনটির কুকিগুলিতে অনুলিপি করা ~/.Xauthority। যেহেতু আপনি লগইন করে প্রতিবার কুকিজ তৈরি হয় তাই আপনি বাসি মান রাখলে সমস্যা হয় না ~/.Xauthority

সুরক্ষা সমস্যা হতে পারে যদি আপনার হোম ডিরেক্টরিটি এনএফএস বা অন্যান্য নেটওয়ার্ক ফাইল সিস্টেমে অ্যাক্সেসযোগ্য হয় যা দূরবর্তী প্রশাসকদের এর সামগ্রীগুলি দেখতে দেয়। আপনি যদি এখনও টি টিসিপি সংযোগগুলি সক্ষম না করেন (ডিবিয়ান সেগুলি ডিফল্টরূপে বন্ধ করে দেয়) তবে তাদের কোনওভাবেই আপনার মেশিনের সাথে সংযোগ স্থাপন করা দরকার। সুতরাং বেশিরভাগ লোকের ক্ষেত্রে, এটি হয় প্রযোজ্য নয় (কোনও এনএফএস নেই) বা কোনও সমস্যা নয় (এক্স টিসিপি সংযোগ নেই)।

আপনি যখন আপনার ডেস্কটপ এক্স সেশনে লগইন করবেন তখন কুকিগুলি অনুলিপি করতে, নিম্নলিখিত লাইনগুলিতে ~/.xprofileবা ~/.profile(অথবা আপনি লগ ইন করার পরে পড়া হয় এমন কিছু অন্যান্য স্ক্রিপ্ট) যুক্ত করুন:

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

¹ বস্তুত এই উদ্ধৃতি সঠিক, কিন্তু এই নির্দিষ্ট ইনস্ট্যান্সের মধ্যে অভাব আছে $DISPLAYএবং $XAUTHORITYকোন শেল metacharacter থাকবে না।


2
এটি স্বয়ংক্রিয় করার একটি উপায় হ'ল এটি তৈরি করা ~/.xprofileযা এক্স এক্স লগইন চলাকালীন চলতে হবে ~/.Xauthorityএবং সঠিক তথ্য সহ এটি তৈরি / আপডেট করা উচিত । একটি প্রতীকী লিঙ্ক কি যথেষ্ট হবে?
অ্যারোমাস্টার

@ অ্যারোমাস্টার: এটি একটি ভাল পরামর্শ। আমি এটা ভাবিনি। এটি সব ক্ষেত্রে কার্যকর হবে না, উদাহরণস্বরূপ আপনি যদি একাধিক এক্স সেশনে লগইন করেন (বিভিন্ন টার্মিনালে, ভিএনসি সহ…) তবে এটি সহজ, এবং এটি সাধারণ ব্যবহারের পক্ষে যথেষ্ট। একটি প্রতীকী লিঙ্ক সেরা উপায়। হুম, আসলে আরও ভাল, সহজ উপায় আছে: আপনি তথ্যটি অনুলিপি করতে পারেন ~/.Xauthority
গিলস 23

1
ভালো কিছু নির্বাণ চান xauth extract - $DISPLAY | xauth -f "$HOME/.Xauthority" merge -মধ্যে ~/.xprofileএকাধিক $ DISPLAY এর ক্ষেত্রে সমাধান?
অ্যারোমাস্টার

@ অ্যারোমাস্টার: একাধিক ডিসপ্লেতে আপনি কী সমস্যা দেখছেন? আপনার কোডটি নীতিগত দিক থেকে কিছুটা পরিষ্কার হতে পারে যেহেতু আপনি কেবল নিজের আগ্রহের প্রদর্শন সম্পর্কিত তথ্যই বের করছেন, আমি জিজ্ঞাসকের ক্ষেত্রে সাধারণ একীভূত হওয়ার সাথে বা খুব অস্বাভাবিক পরিস্থিতিতে বাইরে কিছু দেখছি না।
গিলস

1
ডিসপ্লেতে সংযুক্ত একটি বিদ্যমান প্রক্রিয়া বাইরে পরিবেশ পড়া অপ্রত্যাশিত হিসাবে আনন্দদায়ক হিসাবে খারাপ। আমি আন্তরিকভাবে অনুমোদন। ইউনিক্স.এসই এর জন্য একটি Genভিল জেনিয়াস ™ ব্যাজ দরকার।
ডারোবার্ট

19

আমি যোগ করে এই সমস্যাটি সমাধান করেছি

xhost +si:localuser:$USER

to ~/.xprofile। আমি জানি না এটি পুরোপুরি সুরক্ষিত কিনা (আমি আরও জ্ঞানী লোক কী মনে করি তা জানতে আগ্রহী হব), তবে আমি অনুমান করছি যে xhost +আপনি যখন সাধারণত প্রস্তাবিত হন তখন অ্যাক্সেস নিয়ন্ত্রণ (বন্ধ করে ) বন্ধ করা থেকে অনেক ভাল গুগল এই ইস্যু জন্য।


1
localuserসার্ভার দ্বারা বর্ণিত ঠিকানাগুলি সম্পূর্ণ সুরক্ষিত। ডেবিয়ান এমনকি লগইন প্রক্রিয়ার অংশ হিসাবে (এটি /etc/X11/Xsession.d/35x11-common_xhost-local) ডিফল্টরূপে এটি করে । দেখুন Xsecurity man পৃষ্ঠা আরো বিস্তারিত জানার জন্য।
স্যাম মরিস

আপনি যদি একটি LAN এ হন, তাহলে xhost +সম্ভবত বেশিরভাগ ক্ষেত্রেই যথেষ্ট ... হয়
অ্যালেক্সিস Wilke

আপনি কি এই আদেশটির অর্থ ব্যাখ্যা করতে সক্ষম হবেন?
alpha_989

@ আলফা_৯৯৯: এর অর্থ "স্থানীয়ভাবে চলমান [স্থানীয়ভাবে] যে অ্যাপ্লিকেশনটি আমার [[ব্যবহারকারী] হিসাবে চলছে তা অ্যাক্সেস মঞ্জুর করুন [+]"। "সিআই" হ'ল আঠালো ( দস্তাবেজের জন্য xhost(1)এবং দেখুন Xsecurity(7))। নিজেই, এই কমান্ডটি কোনও ধরণের দূরবর্তী অ্যাক্সেস বা এক্স 11 ফরোয়ার্ডিংয়ের অনুমতি দেয় না (যার জন্য "ম্যাজিক কুকি" প্রক্রিয়াটি সাধারণত পছন্দ করা হয় xhost)।
কেভিন

7

তোমার দরকার export DISPLAY=:0.0


ভেরিয়েবল একই লাইনে লেখা হয় তখন ইউনিক্সের রফতানির প্রয়োজন হয় না। লাইন শেষ না হওয়া অবধি এই পরিবর্তনশীল কার্যকর।
অ্যালেক্সিস উইলকে

সত্যিই, আপনি ঠিক বলেছেন।

এই উত্তরটি স্পষ্টতই ভুল এবং মুছে ফেলা উচিত।
পাইওটর ডব্রোগোস্ট

কেবল DISPLAY =: 0.0 টাইপ করলে চলক নামটি সেট করা যায়নি। ধন্যবাদ @ সাউন্ডমোভ যাইহোক, আমি মনে করি: 0.0 হল সার্ভার ডিসপ্লেতে DISPLAY ভেরিয়েবলের মান। আপনি যদি পুট্টি থেকে লগ ইন করছেন, ভেরিয়েবল DISPLAY 10 বা ততোধিক হওয়া উচিত। সুতরাং এটি DISPLAY হওয়া উচিত =: 10
alpha_989

3

আমার জন্য কাজ করে, ডেবিয়ান হুইজি -> উবুন্টু বিশ্বাসযোগ্য।

দ্রষ্টব্য: এক্ষেত্রে সার্ভারটি কোনও ডিসপ্লে-ম্যানেজার চালাচ্ছে না, এটি একটি 'হেডলেস' ভার্চুয়াল মেশিন নেই যার সাথে গ্রাফিক্স কার্ড বা মনিটর নেই।

bob@laptop:~$ grep -iB 1 tcp /etc/gdm3/daemon.conf
[security]
DisallowTCP = false
bob@laptop:~$ ssh -C -R 6000:127.0.0.1:6000 alice@server
X11 forwarding request failed on channel 0
alice@server:~$ export DISPLAY=:0.0
alice@server:~$ xterm

ল্যাপটপে এক্স ডিসপ্লে সার্ভারে চলমান এক্সটার্মের আউটপুট দেখায়।

ডিবাগ ব্যবহার করে:

bob@laptop:~/tmp$ nc -v 127.0.0.1 6001
localhost [127.0.0.1] 6001 (x11-1) : Connection refused
bob@laptop:~/tmp$ nc -v 127.0.0.1 6000
localhost [127.0.0.1] 6000 (x11) open
alice@server:~$ nc -v 127.0.0.1 6000
Connection to 127.0.0.1 6000 port [tcp/x11] succeeded!*
alice@server:~$ strace xterm

strace এটি কী করছে সে সম্পর্কে প্রচুর বিব্রতকর বিবরণ ছড়িয়ে দেবে, এটি কোথায় আটকে যায় তা অনুমান করতে সক্ষম হওয়া উচিত - কোনও সংযোগের জন্য অপেক্ষা করা বা যা কিছু হোক।

এক লাইনে ..

ssh -C -R 6000:127.0.0.1:6000 alice@server "DISPLAY=:0.0 xterm"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.