ดูเหมือนว่าแฟ้มเดสก์ท็อปจะใช้ $ PATH ไม่ถูกต้อง


13

ฉันกำลังสร้าง.desktopไฟล์เพื่อใช้ใน Unity Launcher

ฉันมีสถานที่ตั้งของตัวเองในไดเรกทอรีบ้านของฉันที่ฉันใส่ executables ของฉัน ( ~/usr/bin/) ซึ่งจะมีการเพิ่มอย่างถูกต้องเพื่อฉันPATHตัวแปรสภาพแวดล้อมในของฉัน.pam_environmentไฟล์ที่ระบุไว้ในเอกสารที่เกี่ยวข้องอูบุนตู

นี่คือเนื้อหาของ.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ไฟล์ที่ดูเหมือนว่าจะถูกเพิ่มเข้ามาสองครั้งไม่ว่าเมื่อใช้ไวยากรณ์ที่ถูกต้องที่แนะนำในเอกสาร Ubuntu ที่ฉันอ้างอิง

นี่เป็นตัวอย่างหนึ่งของปัญหา (เกิดขึ้นกับทุกกรณี) ฉันมีสคริปต์ (เรียกว่าeclipse) ~/usr/bin/ซึ่งรัน Eclipse IDE

ฉันสามารถเปิดเทอร์มินัลใดก็ได้แล้วพิมพ์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

มันทำงานได้อย่างสมบูรณ์แบบ

เอกสารอย่างเป็นทางการของ Unity Launchers และ Desktopชี้ให้เห็นว่าควรใช้งานได้:

Exec เป็นเส้นทางไปยังไฟล์ปฏิบัติการ พา ธ แบบเต็มไปยังไฟล์เรียกทำงานต้องใช้ในกรณีที่ไม่ได้อยู่ในพา ธ ที่ระบุในตัวแปร $ PATH ตัวอย่างเช่นไฟล์ใด ๆ ที่อยู่ภายในพา ธ / usr / bin ไม่จำเป็นต้องมีพา ธ เต็มของพวกเขาที่ระบุในฟิลด์ Exec แต่จะมีเพียงชื่อไฟล์เท่านั้น

ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่เกิดขึ้น?


แก้ไขไฟล์เดสก์ท็อปของคุณเพื่อให้สนุกกับ eclipse ในเชลล์และอาจใช้งานได้ ฉันไม่สามารถพูดได้ตั้งแต่ฉันหยุดพกพาเมื่อไม่นานมานี้
RobotHumans

คำตอบ:


5

เครื่องหมายตัวหนอนจะไม่ขยายใน.pam_environmentลักษณะที่จะเป็นในโปรไฟล์สคริปต์และไฟล์เดสก์ท็อปจะไม่ทำการขยายตัวของเชลล์ในExecบรรทัดของมันตามที่เชลล์ต้องการดังนั้นจึงมองหาไฟล์ที่มีชื่อตามตัวอักษร~/usr/bin/eclipseซึ่งแน่นอนว่า ไม่มีตัวตน

แทนที่เครื่องหมายตัวหนอนในการกำหนดเส้นทางด้วย $ {HOME} และดูเหมือนว่าจะใช้งานได้


คำตอบของคุณถูกต้องที่แก้ไขปัญหาทั้งหมด ขอบคุณ! หากต้องการช่วยให้ฉันถามคำถามอื่นคุณมีความคิดใด$PATHบ้างไหมที่ผนวกสิ่งที่เกิดขึ้นสองครั้ง
BT

1
มันเป็นข้อผิดพลาด: pad.lv/955032
cscarney

3

สิ่งที่กล่าวในเอกสารของ Ubuntu นั้นสมเหตุสมผล แต่ส่วน "ไม่แนะนำอีกต่อไป" ขาดรายละเอียดบางอย่าง ด้วยเหตุผลนั้นคำตอบของฉันจะเกี่ยวข้องกับการใช้หนึ่งในวิธีการเหล่านี้ และมันถูกใช้เพื่อจุดประสงค์เดียวกันนี้แล้ว

เข้าชมไฟล์. / 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) และระบบของคุณควรรีสตาร์ทอย่างปลอดภัย

หวังว่านี่จะช่วยได้!


วิธีแก้ปัญหาทั้งสองทำงานเพื่อแก้ไขปัญหาดังนั้นขอบคุณ :) ฉัน upvoted คุณทั้งสอง แต่ @csarney อธิบายเหตุผลที่แน่นอนสำหรับปัญหาและใช้วิธีการตั้งค่าตัวแปรสภาพแวดล้อมที่แนะนำในเอกสารประกอบดังนั้นฉันได้ทำเครื่องหมายว่าเป็นวิธีแก้ปัญหา
BT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.