वर्चुअल टर्मिनलों (या ssh) पर वेनलैंड पर घास के लिए पर्यावरण चर सेट करें और बैश करें


13

Gnome 3.22 डिफ़ॉल्ट रूप से वेलैंड का उपयोग करता है। Wayland पर सूक्ति ~/.profile( ~/.bash_profileया /etc/profile) नहीं पढ़ता है । Https://bugzilla.gnome.org/show_bug.cgi?id=736660 देखें ।

मेरे पास मेरी आरंभिक फाइलें निम्नलिखित हैं:

  • .bash_profileस्रोत .profileऔर के अलावा कुछ नहीं करता है.bashrc
  • .profileकेवल पर्यावरण चर जैसे PATHऔर सेट करता हैLC_MESSAGES
  • .bashrcकुछ बैश विशिष्ट सेटिंग्स और उपनाम और वातावरण चर जैसे अनुप्रयोगों के लिए सेट करता है lessऔर grep

प्रभाव (वेपलैंड से पहले) निम्नलिखित था:

  • जब मैं लॉगिन करता हूं तो रेखांकन .profileपढ़ा जाता था और पर्यावरण चर जैसे सेट PATHऔर LC_MESSAGESसेट किए जाते थे। जब मैंने एक टर्मिनल एमुलेटर के अंदर बैश खोला तो .bashrcपढ़ा गया था।
  • जब मैं एक वर्चुअल टर्मिनल के तहत लॉगिन करता हूं तो .bash_profileपढ़ा जाता था जो बदले में .profileऔर पढ़ता है .bashrc
  • जब मैं ssh का उपयोग करके लॉगिन करता हूं तब व्यवहार वर्चुअल टर्मिनल के समान होता है।

सभी मामलों में .profileऔर .bashrcपढ़े गए थे और मेरा वातावरण स्थापित किया गया था।

तो अब सूक्ति 3.22 रास्ता का उपयोग करता है और रास्ता नहीं पढ़ता है .profile। मैं अपनी इनिशियलाइज़ेशन फ़ाइलों को कैसे सेट कर सकता हूं ताकि मुझे फिर से ऊपर बताए अनुसार प्रभाव पड़े?

ध्यान दें कि मैं जोर नहीं देता कि कुछ फाइलें (जैसे .profile) पढ़ी जाती हैं। मैं जो चाहता हूं, वह यह है कि मेरे वातावरण को समझदार तरीके से स्थापित किया जाए। इसका मतलब है कि मैं बैश इनिशियलाइज़ेशन फ़ाइलों और अन्य सेटिंग्स को अन्य इनिशियलाइज़ेशन फ़ाइलों के लिए बैश विशिष्ट सेटिंग्स रखना चाहता हूँ। इसके अलावा, मैं अलग-अलग फाइलों में सेटिंग्स कॉपी नहीं करना चाहूंगा।

मैं आर्च लाइनक्स का उपयोग करता हूं। सभी वितरणों के उत्तर स्वागत योग्य हैं। वर्कअराउंड का सुझाव देते समय कृपया साइड इफेक्ट्स और फायदे और नुकसान का भी वर्णन करें।


nvent 2017 को अपडेट करें: जहां तक ​​मैं समझता हूं कि गनोम डेवलपर्स ने स्वीकार किया है कि लोग अपने लॉगिन शेल कॉन्फिग फाइलों ( .profileऔर .bash_profileबैश के मामले में) को लॉगिन के बाद खट्टा कर देते हैं। पाठ या चित्रमय लॉगिन की परवाह किए बिना। इसलिए मेरे उपयोग का मामला फिर से ऊपर काम करता है।

अभी भी सूक्ति डेवलपर्स लॉगिन खोल शुरू करने से दूर जाना चाहते हैं। ऐसा लगता है कि वे जिस दिशा में जा रहे हैं वह सिस्टमड से पर्यावरण का उपयोग करना है:

https://in.waw.pl/~zbyszek/blog/environmentd.html

ऐसा लगता है कि सभी लॉगिन विधियों को पर्यावरण के अनुकूल होने तक कुछ समय लगेगा।

जवाबों:


7

सिस्टम संस्करण 233 (मार्च 2017) में पर्यावरण चर स्थापित करने के लिए समर्थन जोड़ा गया ~/.config/environment.d/*.conf। देखें आदमी पेज और चर्चा है कि पर सुविधा के लिए नेतृत्व इस प्रारंभिक पीआर और इस अंतिम एकenvironment.d


यह एक बहुत अच्छा समाधान प्रतीत होता है। मैंने एक त्वरित परीक्षण किया। यह सूक्ति मार्ग में काम करता है लेकिन वर्चुअल टर्मिनल में काम नहीं करता है। मुझे लगता है कि यह भी ssh के लिए काम नहीं करेगा। मैंने मैन पेज पढ़ा है लेकिन केवल चर्चा को ही सीमित किया है। क्या आपके पास कोई विचार है कि क्या यह वर्चुअल टर्मिनलों और ssh में भी काम करेगा?
lesmana

1
यहाँ स्थिति का एक अच्छा सारांश है: in.waw.pl/~zbyszek/blog/environmentd.html । अंतिम पैराग्राफ कहता है कि वर्चुअल टर्मिनल (और ssh?) के लिए समर्थन "आ सकता है"। कम से कम अगर मैं समझ गया कि सही ढंग से।
lesmana

ओह दिलचस्प, मुझे एहसास नहीं था कि जीडीएम को इसे काम करने के लिए विशेष समर्थन जोड़ना था। क्या किसी प्रकार की व्यवस्था हो सकती थी जहाँ सभी प्रकार के सत्र एकल उपयोगकर्ता सेवा प्रक्रिया के बच्चे हों, जो पहले ही इन एनवी वर्सेस को पार कर चुके हैं, और यह सब बिना जीडीएम / sshd के बिना काम करता है, इसके बारे में कुछ भी जानना आवश्यक है?
जैक ओ'कॉनर

1
यह मेरे लिए Fedora 30 पर GDM / Wayland के साथ काम नहीं करता है।
जॉनलीटन

'समाधान' एक उचित उपयोग के मामले को याद करता है: यदि A, तो B. को एक उदाहरण के रूप में सेट करता है, यदि XDG_SESSION_TYPE = wayland तब QT_QPA_PLATFORM = wayland सेट करें।
vk5tu ११'१

5

यह एक ही समस्या के लिए उपयोग किया जाने वाला वर्कअराउंड है:

चरण 1

एक स्क्रिप्ट बनाएं जो स्रोतों को बनाए ~/.profileऔर उस स्क्रिप्ट को निष्पादन योग्य बनाए। चलो बुलावा आया /path/to/startup.sh। यह कुछ इस तरह दिख सकता है:

#!/bin/bash
. ~/.profile

चरण 2

स्क्रिप्ट चलाने के लिए एक डेस्कटॉप एप्लिकेशन बनाएं। ऐसा करने के लिए आपको एक .desktopफ़ाइल बनाने और इसे ~/.local/share/applications(या /usr/share/applicationsयदि आप इसे सभी उपयोगकर्ताओं के लिए काम करना चाहते हैं) में रखने की आवश्यकता है। चलो बुलावा आया ~/.local/share/applications/startup.desktop। यह कुछ इस तरह दिख सकता है:

[Desktop Entry]
Name=Startup
Keywords=startup
Exec=/path/to/startup.sh
Type=Application

.desktopफाइलों की अधिक जानकारी के लिए यहां देखें ।

चरण 3

लॉग आउट। वापस लॉग इन करें। अब आपको एप्लिकेशन मेनू में अपने एप्लिकेशन की खोज करने में सक्षम होना चाहिए।

चरण 4

इस एप्लिकेशन को स्टार्टअप एप्लिकेशन के रूप में सेट करें। ऐसा करने के लिए मैंने Gnome Tweak टूल का उपयोग किया और अपने एप्लिकेशन को स्टार्टअप एप्लिकेशन टैब में सूची में जोड़ा।

और बस! जब भी आप लॉग इन करते हैं तो आपको अपनी पुरानी कार्यक्षमता वापस आनी चाहिए। यह फ़ाइल संरचना को भी बरकरार रखता है, इसलिए, जब वेलैंड में बग ठीक हो जाता है, तो आपको स्टार्टअप एप्लिकेशन सूची से एप्लिकेशन को हटाने की जरूरत है, दो फाइलों को हटा दें। और सब कुछ वापस सामान्य हो गया है।

बाद में संपादित करें

जैसा कि @Guss टिप्पणियों में बताते हैं, यह समाधान पर्यावरण चर का निर्यात नहीं करेगा क्योंकि startup.shयह अपने स्वयं के शेल में चलाया जाता है। तो हम उन लोगों के लिए एक और समाधान की जरूरत है।

GNOME प्रलेखन से पढ़कर आप देख सकते हैं कि कुछ विकल्प हैं। केवल एक चीज जो मुझे काम करने के लिए मिल सकती थी वह थी एक फ़ाइल बनाना /usr/share/gdm/env.d/, और उस फ़ाइल में, निर्यात की जाने वाली चर जगह। हालांकि, इसका मतलब है कि चर सभी उपयोगकर्ताओं के लिए निर्यात किए जाएंगे, इसलिए मैंने जो किया वह यह है:

मान लीजिए कि हमारे पास दो उपयोगकर्ता हैं, जॉन और सैली । उनमें से प्रत्येक के लिए एक फ़ाइल बनाएँ /usr/share/gdm/env.d/, चलो उन्हें कॉल करें startup_john.envऔर startup_sally.env। जब वे एक नया GNOME सत्र शुरू करते हैं, तो उन फ़ाइलों में निर्यात किए जाने वाले पर्यावरण चर होते हैं।

$ cat startup_john.env
VAR=1
$ cat startup_sally.env
VAR=2

इस बिंदु पर समस्या यह है कि दोनों फ़ाइलों को दोनों उपयोगकर्ताओं के लिए लोड किया जाएगा। इसे हल करने के लिए हमने प्रत्येक फ़ाइल पर अनुमति निर्धारित की है कि केवल इसका स्वामी ही इसकी सामग्री पढ़ सकता है।

$ ls -l startup_john.env
-rw-r-----. 1 john john 4 Dec 27 15:17 startup_john.env
$ ls -l startup_sally.env
-rw-r-----. 1 sally sally 4 Dec 27 15:16 startup_sally.env

सबसे सुरुचिपूर्ण समाधान नहीं, मैं सहमत हूं, लेकिन, जहां तक ​​मैंने परीक्षण किया है, यह काम पूरा करने के लिए लगता है।


मैंने इसका परीक्षण नहीं किया है, लेकिन यह काम नहीं करना चाहिए क्योंकि यह startup.shअपने स्वयं के शेल में चल रहा है और पर्यावरण चर को माता-पिता के निष्पादन के संदर्भ में निर्यात नहीं करेगा। एक उदाहरण के रूप में, अपने शेल में इस कोड को चलाने का प्रयास करें echo "a is $a"; (export a="B"); echo "a is $a" :। @ ट्यूडर के अनुसार, दूसरी प्रतिध्वनि से आउटपुट होगा a is B, जिसे आप कोड चलाते समय देखेंगे - ऐसा नहीं होता है।
Guss

हाय @Guss, तुम सही हो। मैंने उस पर ध्यान नहीं दिया, लेकिन अब जब आपने इसे इंगित किया है, तो मुझे पर्यावरण चर के लिए भी एक समाधान मिला। मैं उसी के अनुसार अपना जवाब अपडेट करूंगा।
ट्यूडर विआन

1
कृपया, मुझे यह देखना अच्छा लगेगा कि आप क्या लेकर आए हैं। इसके अलावा, मुझे लगता है कि जब आप कहते हैं कि आप आशावादी हैं, तो "जब वेलैंड में बग ठीक हो जाता है" - यह वेनलैंड में बग नहीं है लेकिन गनोम में है, और गनोम लोग इसे बग नहीं मानते हैं - इसका एक प्रलेखित व्यवहार: विकी .gnome.org / पहल / वेलैंड / SessionStart
Guss

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