ฉันจะตั้งค่า PATH หรือตัวแปรสภาพแวดล้อมอื่น ๆ เพื่อให้แอป X สามารถเข้าถึงได้อย่างไร


16

ฉันจะตั้งค่าตัวแปร env เพื่อให้ KDE จำแนกได้อย่างไร

คุณจะตั้งค่าพา ธ ในระบบที่ไม่ใช่เชลล์ได้อย่างไร (KDE)

ต่างจากคำถามสองข้อข้างต้นฉันต้องการทราบวิธีการทำสิ่งนี้กับ GNOME หรือดีกว่ายังมีวิธีการที่เป็นอิสระจากการจัดการหน้าต่าง สำหรับเปลือก / ~/.bashrcขั้วผมมักจะแก้ไข ฉันจะวางคำสั่งส่งออกได้ที่ใดเพื่อให้ตัวแปรสภาพแวดล้อมพร้อมใช้งานสำหรับแอปพลิเคชัน X ทั้งหมดไม่ว่าจะใช้ตัวจัดการหน้าต่างหรือไม่

คำตอบ:


12

pam_envช่วยให้โมดูลของแพมคุณตั้งพวกเขาทั้งใน/etc/environmentหรือ~/.pam_environmentขึ้นอยู่กับว่าคุณต้องการสำหรับผู้ใช้ทั้งหมด (ทั้งระบบ) หรือเพียงแค่ผู้ใช้ของคุณ (เซสชั่นกว้าง)

ตัวแปรสภาพแวดล้อมทั้งระบบ

การตั้งค่าตัวแปรสภาพแวดล้อมที่ส่งผลกระทบต่อระบบโดยรวม (ไม่ใช่แค่ผู้ใช้เฉพาะ) ไม่ควรอยู่ในสคริปต์ระดับระบบใด ๆ ที่เรียกใช้งานเมื่อมีการโหลดระบบหรือเซสชันเดสก์ท็อป

/etc/environment- ไฟล์นี้มีความหมายโดยเฉพาะสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบ ไม่ใช่ไฟล์สคริปต์ แต่ประกอบด้วยนิพจน์การมอบหมายหนึ่งรายการต่อบรรทัด ไฟล์นี้จัดเก็บการตั้งค่าตำแหน่งที่ตั้งและพา ธ ทั่วทั้งระบบ

ตัวแปรสภาพแวดล้อมทั้งเซสชัน

การตั้งค่าตัวแปรสภาพแวดล้อมที่ควรส่งผลกระทบต่อผู้ใช้เฉพาะ (แทนที่จะเป็นระบบโดยรวม) ควรตั้งค่าเป็น:

~/.pam_environment- ไฟล์นี้มีความหมายโดยเฉพาะสำหรับการตั้งค่าสภาพแวดล้อมของผู้ใช้ ไม่ใช่ไฟล์สคริปต์ แต่ประกอบด้วยนิพจน์การมอบหมายหนึ่งรายการต่อบรรทัด

หมายเหตุ: การใช้.pam_environmentต้องมีการเข้าสู่ระบบอีกครั้งเพื่อเริ่มต้นตัวแปร การรีสตาร์ทเพียงเทอร์มินัลไม่เพียงพอที่จะใช้ตัวแปร

ดูเพิ่มเติมได้ที่วิกิพีเดียอูบุนตูในตัวแปรของสภาพแวดล้อม


2
ปัญหาของการ~/.pam_environmentแก้ปัญหาคือโดยปกติแล้วโมดูลpam_envจะไม่อ่านยกเว้นว่าการกระจายจะกำหนดไว้เป็นอย่างอื่น ใน Fedora 20 ยังไม่ได้อ่านตัวอย่าง
Cristian Ciupitu

@CristianCiupitu ถูกต้อง ~/.xsessionจะโหลดตัวแปรสภาพแวดล้อมสำหรับแอปพลิเคชัน X ดูunix.stackexchange.com/questions/47359/what-is-xsession-for
Tek

@CristianCiupitu: ขอบคุณมากสำหรับความคิดเห็นของคุณซึ่งทำให้ฉันไป pam_env ฉันอัพเดตไฟล์ Fedora 24 pam ของฉันเพื่อเปิดใช้งานสภาพแวดล้อมของผู้ใช้ ตอนนี้เซสชันของ Wayland ของฉันทุกคนมี PATH ที่กำหนดเองอีกครั้ง
Zan Lynx

@CristianCiupitu เป็นจริงหรือไม่ เอกสารlinux-pam.org/Linux-PAM-html/sag-pam_env.htmlบอกเป็นนัยว่า ~ / .pam_environment เป็นไฟล์เริ่มต้นที่จะอ่านเว้นแต่จะระบุไว้เป็นอย่างอื่น user_envfile=filenameเห็นเส้นบน ปัญหาของฉันกับ pam_env คือตัวแปร HOME อาจไม่พร้อมใช้งานขึ้นอยู่กับแอปพลิเคชัน PAM ซึ่ง จำกัด การใช้งานกับตัวแปรแบบสัมบูรณ์
CMCDragonkai

2
@CMCDragonkai ที่ pam_env (8) หน้าคนจาก Fedora ใช้ในการพูด: " โดยค่าเริ่มต้นตัวเลือกนี้จะปิดเป็นผู้ใช้ที่จัดตัวแปรสภาพแวดล้อมในสภาพแวดล้อม PAM อาจมีผลต่อการทำงานของโมดูลที่ตามมาในกองปราศจากความยินยอมของผู้ดูแลระบบ" ดังนั้นในขณะที่โมดูล PAM อัปสตรีมมีการตั้งค่าเริ่มต้นบางอย่างการแจกแจงบางอย่างจะเขียนทับพวกเขา
Cristian Ciupitu

1

/etc/X11/Xsession.d/... หรือตามบรรทัดของไดเรกทอรีนั้นขึ้นอยู่กับ Linux ของคุณ (?) ผมเขียนเล็ก ๆ น้อย ๆ ที่มันนี่

แนวคิดคือหลังจากเข้าสู่ระบบผู้จัดการการแสดงเริ่ม "Xsession" และแหล่งที่มา (!) ทุกอย่างในไดเรกทอรีนั้นตามลำดับตัวอักษร คุณสามารถเพิ่มสคริปต์ที่ปรับเปลี่ยน PATH ได้ Xsession จะเป็น DE ของคุณอย่างไม่มีกำหนดและโดยปกติกระบวนการทั้งหมดเป็นลูกของ Xsession นั้นดังนั้นจึงสืบทอดสภาพแวดล้อมของ PATH


มีสิ่งใดเทียบเท่าที่ฉันสามารถตั้งค่าในไดเรกทอรี $ HOME ได้หรือไม่ ชอบ. Xsession หรือไม่
Code-Guru

ตาม Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc แหล่งตัวแปรสภาพแวดล้อมทั่วโลก สคริปต์นี้จะแหล่งข้อมูลใด ๆ ใน $ HOME / .xsessionrc หากมีไฟล์อยู่ สิ่งนี้อนุญาตให้ผู้ใช้ตั้งค่าตัวแปรสภาวะแวดล้อมโกลบอลสำหรับเซสชัน X ของพวกเขาเช่นข้อมูลโลแคล
Bananguin

1

กระบวนการสืบทอดสภาพแวดล้อมจากกระบวนการหลักที่เริ่มต้นกระบวนการ หากต้องการเปลี่ยน PATH หรือค่าสภาพแวดล้อมอื่น ๆ ในชายด์เราสามารถตั้งค่าตัวแปรให้เป็นค่าในพาเรนต์และส่งออกตัวแปรหากเราอยู่ในเชลล์แล้วเริ่มกระบวนการลูก เด็กอาจอ่านไฟล์เริ่มต้นอย่างน้อยหนึ่งไฟล์เพื่อเปลี่ยนสภาพแวดล้อมของตนเองเมื่อเริ่มทำงาน

ดังนั้นมีคำถามอีกสองคำถามเพื่อให้ได้คำตอบ:

แผนผังการสืบทอดพาเรนต์ / ลูกที่นำไปสู่กระบวนการที่คุณต้องการได้รับผลกระทบจาก PATH หรือการเปลี่ยนแปลงสภาพแวดล้อมคืออะไร?

ไฟล์การเริ่มต้นใดที่ใช้ / อ่าน / มาจากกระบวนการที่เกี่ยวข้องในทรีนั้น

นี่เป็นส่วนหนึ่งของผลลัพธ์ของ ps (1) เพื่อแสดงสิ่งที่ฉันหมายถึงโดยต้นไม้มรดก:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

หมายเหตุลำดับ \ _ ภาพกราฟิกและหมายเลข PIP / PPID (ID กระบวนการและ PID หลัก) PID 1855 เริ่มต้นโดย (ลูกบางคนของ) 1497 ซึ่งเริ่มโดย 1481 ซึ่งเริ่มโดย PID 1 ซึ่งเริ่มต้นโดยกระบวนการบรรพบุรุษ 0

ทำการติดตามการสืบทอดที่คล้ายกันสำหรับกระบวนการที่คุณต้องการส่งผลให้คิดว่าไฟล์การเริ่มต้นใดที่เกี่ยวข้องและทำการเปลี่ยนแปลง PATH ในต้นไม้ต้นนั้นซึ่งอาจมีบางสิ่งที่คล้ายกับ:

PATH=${PATH}:/usr/local/bin

ฉันสามารถใช้psเพื่อกำหนดกระบวนการหลักของการเข้าสู่ระบบ GUI ได้หรือไม่?
Code-Guru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.