การตั้งค่าสภาพแวดล้อมที่ถูกต้อง


15

ฉันใช้ zsh และ gdm เพื่อเรียกใช้ gnome เมื่อไม่นานมานี้ฉันค้นพบว่าตัวแปรไม่ได้ตั้งอย่างถูกต้อง ตัวอย่างเช่น LANG / LC_ALL ไม่ถูกต้อง ( ""แทนen_GB.UTF-8)

ผมแยก.zshrcเข้าและ.zshrc .profileในหลังฉันตั้งค่าตัวแปรสภาพแวดล้อม แต่ฉันจะตั้งค่าตัวแปรได้อย่างไรก่อนเริ่มเซสชัน ฉันพยายามเลือกไม่กี่ข้อ ( .xinitrc, .xsessionrc) แต่ดูเหมือนไม่มีใครทำงาน

แก้ไขชี้แจง - ผมใช้.profileและตนเอง.zshrcมาไว้ใน มันไม่เปลี่ยนคำถาม


คุณ.profileไม่ได้โหลดเลยหรืออย่างอื่นเขียนทับตัวแปรโลแคลหรือไม่ (ลองตั้งค่าบางตัวแปรอื่น ๆ เช่นexport MACIEJ_PROFILE=yesเพื่อให้แน่ใจว่า. set -xใน.profileอาจจะเป็นวิธีที่ดีในการตรวจสอบสิ่งที่จะถูกดำเนินการในและหลังจากนั้น.profileถ้ามันอ่านที่ทุกคน.) มีจุดใดที่อยู่ในการจัดหาจาก.profile .zshrc
Gilles 'หยุดความชั่วร้าย'

นี่เป็นปัญหาในหน้าต่างเทอร์มินัลหรือที่อื่น ๆ หรือไม่? คุณได้รับการตั้งค่าภาษาที่ต้องการเมื่อคุณเรียกใช้ssh localhost zshหรือไม่ เกี่ยวกับssh localhost bashอะไร หากทุบตีก็โอเค แต่ไม่ zsh บางทีคุณอาจจะนำสิ่งที่อยู่ใน/etc/zshenvหรือ~/.zshenv(ซึ่งสวยมากมักจะเป็นความคิดที่ไม่ดี)
Gilles 'SO- หยุดความชั่วร้าย'

ไม่มีเชลล์ทำงาน OK (ก่อนและหลังแยก) ปัญหาคือgnome-sessionไม่มีชุด variebles นี้
Maciej Piechotka

คำตอบ:


21

วิธีง่ายๆคือการคิดค้นเครื่องย้อนเวลาเยี่ยมชมบุคคลต่าง ๆ ที่คิดค้นแฟ้มเริ่มต้นของเชลล์และบอกให้แยกความแตกต่างระหว่างสามสิ่ง:

  • การตั้งค่าเซสชันเช่นตัวแปรสภาพแวดล้อม
  • การเปิดใช้งานเซสชั่นเช่นเริ่มต้นเชลล์บรรทัดคำสั่งหรือจัดการหน้าต่างหรือทำงานstartx;
  • การกำหนดค่าเริ่มต้นของเชลล์เช่นนามแฝงพรอมต์การเชื่อมโยงคีย์

มันไม่ยากเกินไปที่จะได้รับเมื่อเทียบกับเซสชั่นที่เหมาะสมเปลือกในทางแบบพกพา: การเริ่มต้นการเข้าสู่ระบบจะเข้าสู่ช่วงเวลา.profile(หรือ.zprofileหรือ.login) เริ่มต้นเปลือกไปในหรือ.bashrc .zshrcผมเคยเขียนไว้ก่อนหน้านี้เกี่ยวกับ.bash_profile, zsh กับเปลือกหอยอื่น ๆ , เพิ่มเติมเกี่ยวกับการพกพา (ส่วนใหญ่เกี่ยวกับการทุบตี) , เพิ่มเติมเกี่ยวกับผู้อ่าน.profile

ปัญหาที่เหลือคือการแยกแยะระหว่างการตั้งค่าเซสชันและการเปิดใช้งานเซสชัน ในกรณีส่วนใหญ่~/.profileจะทำงานเมื่อคุณเข้าสู่ระบบและสามารถเป็นสองเท่าเป็นทั้งสอง แต่มีข้อยกเว้น:

  • ถ้าเปลือกเข้าสู่ระบบของคุณ (t) csh หรือ zsh, ~/.loginและมีที่มาแทน~/.zprofile ~/.profileเช่นเดียวกันสำหรับทุบตีและ~/.bash_profileแต่นี้จะแก้ไขได้อย่างง่ายดายโดยการจัดหาจาก~/.profile~/.bash_profile
  • หากคุณเข้าสู่ระบบภายใต้ตัวจัดการการแสดงผล (xdm, gdm, kdm, …) การ~/.profileอ่านของคุณขึ้นอยู่กับเวอร์ชันของโปรแกรมการกระจายของคุณ (Linux หรืออย่างอื่น) และประเภทเซสชันที่คุณเลือก
    • หากคุณเชื่อใจในเครื่องมือจัดการการแสดงผลเพื่อเริ่มเซสชันสำหรับคุณคุณ.profileต้องตั้งค่าตัวแปรสภาพแวดล้อม แต่ไม่เริ่มเซสชัน (เช่นผู้จัดการหน้าต่าง)
    • ไฟล์คอนฟิกูเรชันดั้งเดิมสำหรับเซสชัน X คือ~/.xsessionทำการตั้งค่าเซสชันและเปิดใช้เซสชัน . ~/.xsession; . ~/.xinitrcดังนั้นแฟ้มสามารถเป็นหลัก บางแหล่งกระจายก่อน~/.profile ~/.xsessionการแจกแจงแบบใหม่เป็นแหล่งที่มาเฉพาะ~/.xsessionเมื่อคุณเลือกเซสชัน "กำหนดเอง" จากเครื่องมือจัดการการแสดงผลและเซสชันดังกล่าวจะไม่สามารถใช้งานได้ตลอดเวลา
    • ผู้จัดการเซสชันของคุณอาจมีวิธีการตั้งค่าตัวแปรสภาพแวดล้อมของตนเอง (นั่นเป็นส่วนเสริมของสภาพแวดล้อมเดสก์ท็อปของคุณซึ่งคุณเลือกผ่านไฟล์กำหนดค่าหรือโดยการเลือกประเภทเซสชันเมื่อทำการล็อกอินอย่าสับสนกับสคริปต์เริ่มต้นเซสชันที่จัดทำโดยผู้จัดการการแสดงผลซึ่งดำเนินการภายใต้ผู้ใช้ของคุณ เลือกตามระบบทั้งระบบใช่เป็นระเบียบ)

โดยสรุป~/.profileเป็นสถานที่ที่เหมาะสมสำหรับตัวแปรสภาพแวดล้อม หากยังไม่ได้อ่านลองหาจาก~/.xsession(และเริ่มโปรแกรม X ของคุณจากที่นั่น) หรือค้นหาวิธีการเฉพาะของระบบ (ซึ่งอาจขึ้นอยู่กับการแจกจ่ายของคุณตัวจัดการการแสดงผลถ้ามีประเภทเซสชันถ้าตัวจัดการการแสดงผลและสภาพแวดล้อมเดสก์ทอปหรือ ผู้จัดการเซสชั่น)


.xsessionเป็นไฟล์ที่ฉันต้องการ
Maciej Piechotka

1
ฉันเห็นด้วยอย่างยิ่งกับทุกสิ่งยกเว้นข้อมูลสรุปของคุณ ฉันไม่คิดว่าคุณจะสร้างประเด็นนี้ หาก.profileแหล่งที่มา.bashrcหรือคล้ายกันแล้วคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมได้อย่างน่าเชื่อถือในการ.bashrcสำหรับการประชุมไม่เพียงเข้าสู่ระบบ แต่สำหรับเปลือกใหม่ที่จำเป็นต้องตั้งค่าที่แตกต่างกันเช่นถ้าคุณเริ่มต้นxtermจากและต้องการที่แตกต่างกันgnome-terminal dircolors
Mikel

@Mikel หากคุณตั้งค่าตัวแปรสภาพแวดล้อมใน.bashrcพวกเขาจะแทนที่การตั้งค่าก่อนหน้าของคุณ ตัวอย่างเช่นหากคุณเริ่มต้นอินสแตนซ์ Screen หรือ Tmux ด้วยตัวแปรสภาพแวดล้อมเฉพาะสิ่งที่คุณตั้งค่า.bashrcจะแทนที่การตั้งค่าเหล่านี้ LS_COLORSเป็นกรณีพิเศษเพราะเป็นการตั้งค่าต่อเทอร์มินัล เป็นการดีที่มันควรถูกตั้งค่าโดยเทอร์มินัลอีมูเลเตอร์และการตั้งค่าในไฟล์ shell rc เป็นวิธีแก้ปัญหาที่ดีที่สุด
Gilles 'SO- หยุดความชั่วร้าย'

1

ในเอกสารของ Gentoo มีบทความGentoo Linux Localization Guideอยู่ บทที่ 3เกี่ยวกับการตั้งค่าภาษา

ผู้ใช้ส่วนใหญ่มักจะตั้งค่าตัวแปร LANG บนพื้นฐานสากลเท่านั้น ตัวอย่างนี้ใช้สำหรับโลแคลภาษาเยอรมันแบบ Unicode:

รายการรหัส 3.1: การตั้งค่าตำแหน่งที่ตั้งของระบบเริ่มต้นใน /etc/env.d/02locale

LANG="en_GB.UTF-8"

ใน Gentoo ของฉันLANGมีการตั้งค่าในไฟล์นี้และทุกอย่างทำงานอย่างถูกต้อง ...

pbm@tauri ~ $ cat /etc/env.d/02locale 
LANG="pl_PL.UTF-8"

pbm@tauri ~ $ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=

ระวังว่าชิ้นส่วนที่คุณเสนอมานั้นโอเค แต่คำแนะนำก็แนะนำให้ตั้งค่าตัวแปรสภาพแวดล้อม.bashrcซึ่งผิด (ดูคำตอบของฉันและโดยเฉพาะsuperuser.com/questions/217431 )
Gilles 'หยุดชั่วร้าย'

ขอบคุณสำหรับข้อมูลที่มีรายละเอียดมาก ... :) ฉันไม่เคยใช้ส่วน. bashrc - การตั้งค่าenv.dเป็นสากลมากขึ้น
pbm

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