Evince शुरू करने में विफल रहता है क्योंकि यह पढ़ नहीं सकता


10

मैं एसएसएच पर दूरस्थ रूप से लॉग इन कर रहा हूं, जो कि उबंटू 10.04 (ल्यूसिड) पर चलने वाली मशीन के लिए एक्स फॉरवर्डिंग के साथ है। अधिकांश X11 अनुप्रयोग (जैसे xterm, सूक्ति-टर्मिनल) ठीक काम करते हैं। लेकिन एविसन शुरू नहीं करता है। यह ~/.Xauthorityफ़ाइल के मौजूद होने के बावजूद पढ़ने में असमर्थ है, और स्पष्ट रूप से पठनीय है (इसमें सही अनुमतियां हैं और अन्य एप्लिकेशन इसे ठीक पढ़ते हैं)।

$ evince
X11 connection rejected because of wrong authentication.
Cannot parse arguments: Cannot open display:
$ echo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
DISPLAY=localhost:10.0 XAUTHORITY=
$ strace evince
…
access("/home/gilles/.Xauthority", R_OK) = 0
open("/home/gilles/.Xauthority", O_RDONLY) = -1 EACCES (Permission denied)
…
$ ls -l ~/.Xauthority
-rw------- 1 gilles gilles 496 Jul  5 13:34 /home/gilles/.Xauthority

Evince के बारे में ऐसा क्या खास है जो इसे पढ़ा नहीं जा सकता है ~/.Xauthority? मैं इसे कैसे शुरू कर सकता हूं?

जवाबों:


12

टीएल, डीआर: यह अपरमोर की गलती है, और मेरे होम डायरेक्टरी के बाहर होने के कारण /home

उबंटू 10.04 के एक डिफ़ॉल्ट स्थापना के अंतर्गत, एपआर्मर पैकेज के रूप में एक अप्रत्यक्ष की सिफारिश स्तरीय की निर्भरता में खींच लिया जाता है ubuntu-मानक पैकेज। सिस्टम लॉग ( /var/log/syslog) यह दर्शाता है कि एपरसन पढ़ने के प्रयास को खारिज कर रहा है ~/.Xauthority:

Jul 5 17:58:31 darkstar kernel: [15994724.481599] type=1503 audit(13415 03911.542:168): operation="open" pid=9806 parent=9805 profile="/usr/bin/evince" requested_mask="r::" denied_mask="r::" fsuid=1001 ouid=1001 name="/elsewhere/home/gilles/.Xauthority"

अप्पर्मर (इन /etc/apparmor.d/usr.bin.evince) के लिए डिफ़ॉल्ट एवियन कॉन्फ़िगरेशन बहुत ही अनुमति है: यह सभी घरेलू निर्देशिकाओं के तहत मनमाने ढंग से पढ़ने और लिखने की अनुमति देता है। हालाँकि, इस मशीन पर मेरी होम डाइरेक्टरी गैर-मानक स्थान की एक प्रतीकात्मक कड़ी है जो कि डिफ़ॉल्ट AppArmor कॉन्फ़िगरेशन में सूचीबद्ध नहीं है। के तहत पहुंच की अनुमति है /home, लेकिन मेरे घर की निर्देशिका का वास्तविक स्थान है /elsewhere/home/gilles, इसलिए पहुंच से वंचित है।

इस समस्या से प्रभावित होने वाले अन्य अनुप्रयोगों में शामिल हैं:

  • फ़ायरफ़ॉक्स, लेकिन इसका प्रोफ़ाइल डिफ़ॉल्ट रूप से (एक प्रतीकात्मक लिंक की उपस्थिति से /etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox) अक्षम है
  • CUPS पीडीएफ प्रिंटिंग; मैंने परीक्षण नहीं किया है, लेकिन मुझे उम्मीद है कि यह लिखने में विफल रहेगा ~/PDF

मेरा फिक्स /etc/apparmor.d/tunables/home.d/localलाइन को संपादित और जोड़ना था

@{HOMEDIRS}+=/elsewhere/home/

घर निर्देशिकाओं के गैर-मानक स्थान को मान्यता दी है (ध्यान दें कि अंतिम /महत्वपूर्ण है; टिप्पणियों को देखें /etc/apparmor.d/tunables/home.d/ubuntu), फिर /etc/init.d/apparmor reloadअप्पर्मर सेटिंग्स को अपडेट करने के लिए चलाएँ।

यदि आपके पास व्यवस्थापक विशेषाधिकार नहीं हैं और सिस्टम प्रशासक अनुत्तरदायी है, तो आप evinceबाइनरी को किसी भिन्न स्थान पर कॉपी कर सकते हैं ~/bin, और यह Apparmor पॉलिसी द्वारा कवर नहीं किया जाएगा (इसलिए आप इसे शुरू कर पाएंगे, लेकिन बहुत सीमित अतिरिक्त सुरक्षा बर्दाश्त नहीं की जाएगी जो अप्पर्मर प्रदान करता है)।

इस समस्या को Ubuntu बग # 447292 के रूप में रिपोर्ट किया गया है । रिज़ॉल्यूशन उस मामले को संभालता है जब कुछ उपयोगकर्ताओं के पास उनके घर की निर्देशिका /etc/passwdबाहर में सूचीबद्ध होती है /home, लेकिन ऐसे मामलों में नहीं, जहां मेरा /home/gillesएक प्रतीकात्मक लिंक है।


धन्यवाद। उबंटू 16.04 में, संबंधित फ़ाइल '/etc/apparmor.d/tunables/home.d/ubuntu' है और यह अनुशंसा की जाती है कि इसे मैन्युअल रूप से संपादित करने के बजाय, एक चलाता है: 'sudo dpkg-reconfigure apparmor (जो आपको देगा) घर के स्थानों को जोड़ने का अवसर)
arr_sea

2

एक ही समस्या थी, और आपके जवाब ने मुझे सही दिशा में इशारा किया। मुझे एक अलग समाधान मिला, जिसके लिए एपार्मर कॉन्फ़िगरेशन को संपादित करने की आवश्यकता नहीं है। सिमीलिंक का उपयोग करने के बजाय पहुंच को पुनर्निर्देशित करने के लिए /home, bindविकल्प का उपयोग करें mount। मैंने निम्नलिखित पंक्ति को इसमें जोड़ा /etc/fstab:

/elsewhere/home /home none bind

एक बार जब आप ऐसा कर लेते हैं, तो ऐपर्मर को यह भी पता नहीं चलेगा कि निर्देशिका /home"वास्तव में" कहीं और स्थित है, इसलिए शिकायतें दूर हो जाएंगी।

इस दृष्टिकोण का लाभ यह है कि यह सभी अनुप्रयोगों के लिए काम करेगा, बिना प्रत्येक के लिए एक अलग एपर्मर कॉन्फ़िगरेशन फ़ाइल को संपादित करने के लिए।


1
यह मेरे मामले में लागू नहीं होगा: के तहत घर निर्देशिका थे /homeऔर दूसरों के तहत नहीं /home। इस मामले के लिए एक प्रकार बाइंड-माउंट /elsewhere/home/gillesकरने /home/gillesया /elsewhere/homeकरने के लिए है /home/elsewhere
गिलेस एसओ- बुराई को रोकना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.