ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ gnome บน wayland และ bash บนเทอร์มินัลเสมือน (หรือ ssh)


13

Gnome 3.22 ใช้ Wayland เป็นค่าเริ่มต้น Gnome บน wayland ไม่ได้อ่าน~/.profile(หรือ~/.bash_profileหรือ/etc/profile) ดูhttps://bugzilla.gnome.org/show_bug.cgi?id=736660

ฉันมีไฟล์เริ่มต้นของฉันตั้งค่าดังต่อไปนี้:

  • .bash_profileไม่ทำอะไรเลยนอกจากแหล่ง.profileและ.bashrc
  • .profileตั้งค่าตัวแปรสภาพแวดล้อมเช่นPATHและเท่านั้นLC_MESSAGES
  • .bashrcชุดการตั้งค่าบางทุบตีที่เฉพาะเจาะจงและชื่อแทนและตัวแปรสภาพแวดล้อมสำหรับการใช้งานเช่นการและlessgrep

ผลกระทบ (ก่อน wayland) มีดังต่อไปนี้:

  • เมื่อฉันเข้าสู่ระบบกราฟิก.profileถูกอ่านและตัวแปรสภาพแวดล้อมเช่นPATHและLC_MESSAGESถูกตั้งค่า เมื่อฉันเปิด bash ภายในเทอร์มินัลอีมูเลเตอร์แล้ว.bashrcอ่าน
  • เมื่อฉันเข้าสู่ระบบภายใต้ terminal เสมือนแล้ว.bash_profileได้อ่านซึ่งในการเปิดอ่านและ.profile.bashrc
  • เมื่อฉันเข้าสู่ระบบโดยใช้ ssh พฤติกรรมนั้นคล้ายกับเทอร์มินัลเสมือน

ในทุกกรณี.profileและ.bashrcถูกอ่านและสภาพแวดล้อมของฉันถูกตั้งค่า

ดังนั้นตอนนี้ gnome 3.22 ใช้ Wayland และ Wayland .profileไม่ได้อ่าน ฉันจะตั้งค่าไฟล์เริ่มต้นได้อย่างไรเพื่อให้ฉันมีลักษณะพิเศษตามที่อธิบายไว้ข้างต้นอีกครั้ง

โปรดทราบว่าฉันไม่ได้ยืนยันว่าอ่านไฟล์บางไฟล์ (ชอบ.profile) สิ่งที่ฉันต้องการคือการตั้งค่าสภาพแวดล้อมของฉันอย่างเหมาะสม นั่นหมายความว่าฉันต้องการเก็บการตั้งค่าเฉพาะของ bash ไว้ในไฟล์กำหนดค่าเริ่มต้น bash และการตั้งค่าอื่น ๆ ไปยังไฟล์เริ่มต้นอื่น ๆ นอกจากนี้ฉันไม่ต้องการคัดลอกการตั้งค่าไปยังไฟล์อื่น

ฉันใช้ arch linux คำตอบสำหรับการแจกแจงทั้งหมดยินดีต้อนรับ เมื่อแนะนำวิธีแก้ปัญหาโปรดอธิบายถึงผลข้างเคียงและข้อดีและข้อเสีย


อัปเดตพฤศจิกายน 2560: เท่าที่ฉันเข้าใจว่านักพัฒนา gnome ยอมรับว่าผู้คนคาดหวังว่าไฟล์การกำหนดค่าเปลือกเข้าสู่ระบบ ( .profileและ.bash_profileในกรณีทุบตี) มาจากการเข้าสู่ระบบ ไม่ว่าจะเข้าสู่ระบบข้อความหรือกราฟิก ดังนั้นกรณีการใช้งานของฉันที่ระบุไว้ข้างต้นใช้งานได้อีกครั้ง

ยังคงเป็นนักพัฒนา GNOME ที่ต้องการย้ายออกจากการเริ่มต้นเปลือกเข้าสู่ระบบ ดูเหมือนว่าทิศทางที่พวกเขากำลังไปคือการใช้ environmentd จาก systemd:

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

ดูเหมือนว่าจะใช้เวลาสักครู่จนกว่าวิธีการเข้าสู่ระบบทั้งหมดจะถูกปรับให้เข้ากับ environmentd

คำตอบ:


7

Systemd รุ่น 233 (มีนาคม 2017) ~/.config/environment.d/*.confเพิ่มการสนับสนุนสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมใน ดูหน้าคนและการอภิปรายที่นำไปสู่คุณลักษณะในการประชาสัมพันธ์เบื้องต้นนี้และนี้เป็นครั้งสุดท้ายenvironment.d


นี่น่าจะเป็นทางออกที่ดีมาก ฉันทำการทดสอบอย่างรวดเร็ว ใช้งานได้ใน gnome wayland แต่ไม่สามารถใช้งานใน terminal เสมือนได้ ฉันคิดว่ามันจะไม่ทำงานสำหรับ ssh ฉันได้อ่าน man page แต่มีเพียงการอภิปราย คุณมีความคิดว่าสิ่งนี้จะทำงานใน terminal เสมือนและ ssh หรือไม่
lesmana

1
นี่เป็นบทสรุปที่ดีของสถานการณ์: in.waw.pl/~zbyszek/blog/environmentd.html ย่อหน้าสุดท้ายบอกว่าการรองรับเทอร์มินัลเสมือน (และ ssh?) "อาจ" มา อย่างน้อยถ้าฉันเข้าใจอย่างถูกต้อง
lesmana

โอ้น่าสนใจฉันไม่ได้ตระหนักว่า GDM ต้องเพิ่มการสนับสนุนพิเศษเพื่อให้ทำงานได้ มีการจัดเรียงบางประเภทที่เซสชันทุกประเภทเป็นลูกของกระบวนการบริการผู้ใช้เดียวซึ่งแยกวิเคราะห์แล้ว env vars เหล่านี้และทุกอย่างทำงานได้โดยไม่ต้อง GDM / sshd ต้องการรู้อะไรเกี่ยวกับมัน
Jack O'Connor

1
นี่ใช้ไม่ได้กับ Fedora 30 กับ GDM / Wayland
jonleighton

'โซลูชัน' คิดถึงกรณีการใช้งานที่สมเหตุสมผล: ถ้า 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 Tool และเพิ่มแอปพลิเคชันของฉันลงในรายการในแท็บ Startup Applications

และนั่นมัน! ตอนนี้คุณควรจะมีฟังก์ชั่นเก่าของคุณกลับมาทุกครั้งที่คุณล็อกอินมันยังคงโครงสร้างของไฟล์ไว้เหมือนเดิมดังนั้นเมื่อบั๊กใน Wayland ได้รับการแก้ไขสิ่งที่คุณต้องทำก็คือลบแอปพลิเคชันออกจากรายการแอปพลิเคชันเริ่มต้น และทุกอย่างกลับสู่ปกติ

แก้ไขภายหลัง

ในฐานะที่เป็น @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 คุณถูกต้อง ฉันไม่ได้สังเกตว่า แต่ตอนนี้คุณได้ชี้ให้เห็นแล้วฉันพบวิธีแก้ไขสำหรับตัวแปรสภาพแวดล้อมเช่นกัน ฉันจะอัปเดตคำตอบของฉันตาม
ทิวดอร์ Vișan

1
โปรดทำฉันชอบที่จะเห็นสิ่งที่คุณได้มาด้วย นอกจากนี้ฉันคิดว่าคุณเป็นคนมองโลกในแง่ดีเมื่อคุณพูดว่า "เมื่อข้อผิดพลาดใน Wayland ได้รับการแก้ไข" - นี่ไม่ใช่ข้อผิดพลาดใน Wayland แต่ใน GNOME และผู้ใช้ GNOME ไม่พิจารณาข้อผิดพลาดนี้ - พฤติกรรมที่บันทึกไว้: wiki .gnome.org / ความคิดริเริ่ม / Wayland / SessionStart
Guss

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