डेस्कटॉप फाइलें $ PATH का सही उपयोग नहीं करती हैं


13

मैं .desktopएकता लांचर में उपयोग के लिए फाइलें बना रहा हूं ।

मेरी होम डायरेक्टरी में मेरा अपना स्थान है जहाँ मैंने अपने निष्पादन चर ( ~/usr/bin/) को सही ढंग PATHसे अपनी .pam_environmentफ़ाइल में अपने पर्यावरण चर में जोड़ा है जैसा कि संबंधित Ubuntu दस्तावेज़ में निर्दिष्ट है ।

यह मेरी .pam_environmentफ़ाइल की सामग्री है :

LANGUAGE=en_AU:en_GB:en
LANG=en_AU.UTF-8
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_MONETARY=en_AU.UTF-8
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8

PATH DEFAULT=${PATH}:~/usr/bin/

मेरे PATHचर का परिणाम इस प्रकार है:

ben@ben-HPdv6:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/usr/bin/:~/usr/bin/

मुझे पता है कि इसे दो बार जोड़ा गया है, लेकिन .pam_environmentफ़ाइल में कुछ भी दो बार जुड़ने पर लगता है कोई बात नहीं जब उस उबंटू दस्तावेज़ीकरण में सुझाए गए सही सिंटैक्स का उपयोग किया जाता है।

यह समस्या का एक उदाहरण है (यह सभी मामलों के साथ होता है)। मेरे पास एक स्क्रिप्ट (कहा जाता है eclipse) ~/usr/bin/जिसमें ग्रहण आईडीई चलता है।

मैं किसी भी टर्मिनल को खोल सकता हूं और बस टाइप कर सकता हूं eclipseऔर यह ठीक चलता है जैसे आप उम्मीद करेंगे।

लेकिन निम्न .desktopफ़ाइल का उपयोग करते समय :

#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Eclipse - Juno (4.2)
Icon=/home/ben/.icons/eclipse.svg
Exec=eclipse

मुझे त्रुटि मिली: त्रुटि

लेकिन जब मैं Exec=लाइन को इसमें बदलता हूं :

Exec=/home/ben/usr/bin/eclipse

यह पूरी तरह से काम करता है।

सरकारी एकता लांचरों और डेस्कटॉप फ़ाइलों प्रलेखन चलता है कि यह काम करना चाहिए:

Exec निष्पादन योग्य फ़ाइल का पथ है। निष्पादन योग्य फ़ाइल का पूर्ण पथ केवल उस स्थिति में उपयोग किया जाना चाहिए जब वह $ PATH चर में निर्दिष्ट पथों में से किसी में नहीं है। उदाहरण के लिए, पथ / usr / bin के अंदर आने वाली किसी भी फ़ाइल को Exec फ़ील्ड में निर्दिष्ट अपना पूर्ण पथ होना आवश्यक नहीं है, लेकिन केवल उनका फ़ाइल नाम।

क्या हो रहा है पर कोई सुझाव?


शेल में मौज-मस्ती के लिए अपनी डेस्कटॉप फ़ाइल को संशोधित करें और यह काम कर सकती है। मैं नहीं कह सकता क्योंकि मैंने कुछ समय पहले पोर्टेबल का उपयोग करना बंद कर दिया था।
रोबॉटहूमन

जवाबों:


5

टिल्ड का विस्तार .pam_environmentउस तरह से नहीं होता है जिस तरह से यह एक प्रोफाइल स्क्रिप्ट में होता है, और डेस्कटॉप फाइलें अपनी Execलाइनों पर शेल का विस्तार नहीं करती हैं जिस तरह से शेल होता है, इसलिए यह एक ऐसी फ़ाइल की तलाश कर रहा है जिसका शाब्दिक नाम है ~/usr/bin/eclipse, जो बेशक नहीं है ' टी मौजूद है।

पैथ असाइनमेंट में टिल्ड को $ {HOME} से बदलें और यह काम करने लगता है।


आपका उत्तर सही है, जो समस्या को पूरी तरह से ठीक करता है। धन्यवाद! मुझे एक और सवाल पूछने से बचाने के लिए, क्या आपके पास ऐसा कोई विचार $PATHहै जो दो बार होता है?
बीटी

1
यह एक बग है: pad.lv/955032
सीएसकेनी

3

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

अपने ./profile फ़ाइल पर एक त्वरित यात्रा करें।

मेरा यह शामिल है:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

जैसा कि आप इस फ़ाइल के अंतिम खंड (# सेट PATH के नीचे की पंक्तियों को देख सकते हैं ताकि इसमें उपयोगकर्ता के निजी बिन शामिल हैं यदि यह मौजूद है), यह पहले से ही किया जा रहा है। इसलिए अगर आप $ PATH वैरिएबल में कुछ जोड़ना चाहते हैं, तो आप बस यही काम करेंगे। प्रलेखन ने उल्लेख किया कि यह हर बार सिस्टम शुरू होने पर चलाया जाएगा।

आपके मामले में, आपको बस इतना करना होगा:

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

इस बिंदु पर मैं यह सोचना शुरू कर रहा हूं कि इस विधि की सिफारिश नहीं करने का एकमात्र कारण यह है कि इसमें स्टार्टअप पर स्क्रिप्टिंग शामिल है, जो थोड़ी गलतियों के लिए बहुत संवेदनशील है। जब कोई व्यक्ति कुछ इस तरह से काम कर रहा होता है, हालाँकि, एक छोटी सी गलती से फ़ाइल को वापस उसी तरह से बदल दिया जा सकता है जिस तरह से था।

यदि आप सुनिश्चित नहीं हैं कि यह कैसे किया जाए:

1) सबसे पहले, CTRL + ALT + F3 दबाएँ

2) ऑनस्क्रीन प्रॉम्प्ट का पालन करके लॉग इन करें

3) इसे कमांड प्रॉम्प्ट में टाइप करें:

/usr/bin/nano ./.profile

4) इन लाइनों को हटा दें: (हमने अभी उन्हें जोड़ा है)

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

5) CTRL + O दबाएं (आउट में)

6) CTRL + X दबाएं (जैसे eXit में)

7) टाइप करें exitऔर ENTER दबाएँ (कभी-कभी RETURN)

8) अब CTRL + ALT + F7 दबाएं

9) आपको अपनी लॉगिन स्क्रीन या डेस्कटॉप मिलना चाहिए, जो इस समस्या के होने पर निर्भर करता है। यदि नहीं, तो CTRL + ALT + DEL (कभी-कभी CTRL + ALT + DELETE) दबाएँ और आपका सिस्टम सुरक्षित रूप से पुनरारंभ होना चाहिए।

उम्मीद है की यह मदद करेगा!


दोनों समाधान समस्या को ठीक करने के लिए काम करते हैं, इसलिए धन्यवाद :) मैंने आप दोनों को उखाड़ फेंका है लेकिन @csarney समस्या का सटीक कारण बताती है और प्रलेखन में अनुशंसित पर्यावरण चर सेटिंग विधि का उपयोग करती है, इसलिए मैंने समाधान के रूप में चिह्नित किया है।
बीटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.