ในฐานะของพฤศจิกายน 2014 , รุ่นล่าสุดของstartxwin
การใช้งานxinit
ที่จะเริ่มต้น Cygwin / XWin.exe
เซิร์ฟเวอร์เอ็กซ์ซึ่งเรียกว่าจริง กระบวนการดังกล่าวเป็นเช่นนี้:
- คุณโทรมา
startxwin
startxwin
สร้าง.Xauthority
ไฟล์ใหม่และหนึ่งไฟล์ที่เรียกว่า.serverauth.1234
(โดยที่1234
การเปลี่ยนแปลงแต่ละครั้งที่คุณเริ่ม X)
startxwin
ตั้งค่าพารามิเตอร์ไคลเอ็นต์และเซิร์ฟเวอร์บางอย่าง
startxwin
เรียกใช้xinit
ด้วยพารามิเตอร์ไคลเอนต์และเซิร์ฟเวอร์รวมถึงเชลล์สคริปต์เผื่อเลือกและการอ้างอิงไปยังไฟล์รับรองความถูกต้อง
xinit
สตาร์ทเซิร์ฟเวอร์ X รันสคริปต์ rc บางตัว
xinit
สตาร์ทไคลเอ็นต์ (โดยปกติxterm
) หรือสคริปต์ rc ของไคลเอ็นต์ เราต้องการหลีกเลี่ยงสิ่งนี้
- เมื่อคุณปิดไคลเอนต์หรือสคริปต์ rc ไคลเอ็นต์เสร็จสิ้นให้
xinit
ปิดเซิร์ฟเวอร์ X หากเราหลีกเลี่ยงขั้นตอนที่ 6 เราก็ต้องหลีกเลี่ยงสิ่งนี้เช่นกัน
มันเป็นไปได้ที่จะเรียกใช้XWin.exe
โดยตรงจากภายในเปลือกเข้าสู่ระบบทุบตีโดยไม่ต้องงานรอบที่startxwin
และxinit
ดำเนินการ ข้อได้เปรียบหลักของสิ่งนี้คือมันทำงานเหมือนที่เราต้องการ: เซิร์ฟเวอร์ X เริ่มทำงานและยังคงทำงานอยู่ น่าเสียดายเนื่องจากไม่มี.Xauthority
ไฟล์ที่ถูกส่งระหว่างการเริ่มต้นเซิร์ฟเวอร์ X ของคุณจะอนุญาตให้กระบวนการในท้องถิ่นใด ๆ เชื่อมต่อกับมันซึ่งไม่ปลอดภัย
โชคดีที่มันxinit
ทำสิ่งที่เราไม่ต้องการมากที่สุด มีแฮ็คด่วนที่ข้ามxinit
แต่เก็บองค์ประกอบที่เหลือของstartxwin
ที่เกี่ยวข้องกับเซิร์ฟเวอร์เอง
TL; DR:ในstartxwin
มีเส้นอยู่ด้านล่างที่อ่านไปนี้:
eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
เปลี่ยนบรรทัดนั้นเป็น:
eval \"$server\" $display $serverargs
จากนี้ไปstartxwin
สคริปต์จะเรียกโดยตรงมากกว่าการโทรXWin.exe
xinit
เห็นได้ชัดว่านี่จะปิดการใช้งานสคริปต์ลูกค้า rc แต่เราไม่ต้องการให้สคริปต์เหล่านั้นมาตั้งแต่แรก นอกจากนี้ยังหมายความว่า X จะยังคงทำงานต่อไปโดยไม่จำเป็นต้องมีกระบวนการไคลเอนต์เพื่อทำให้มันมีชีวิตอยู่ (เช่นป้องกันการxinit
ฆ่ามัน)
exec sleep infinity
ตามที่แสดงไว้ที่นี่: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit