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

สองงานที่ดูเหมือนเพียงหนึ่ง

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

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

เปรียบเทียบอินพุตการเริ่มก่อนติดตั้งใหม่

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

grep -h '^Exec=' ~/.local/share/applications/*.desktop
desktop-file-validate ~/.local/share/applications/client.desktop

ดูไฟล์ภายใต้ ~/.local/share/applications ก่อนไฟล์ใน /usr/share/applications เพราะสำเนาของผู้ใช้จะบดบังสำเนาของระบบ รัน desktop-file-validate เมื่อรายการทำงานผิดปกติ และมองหาสำเนาเก่าที่ยังชี้ไปยังพาธที่ถูกลบไปแล้ว เดสก์ท็อปส่วนใหญ่ยังคงเลือกสำเนาของผู้ใช้ที่ไม่ถูกต้อง ดังนั้นไฟล์ที่เสียอาจทำให้รายการหายไปจากเมนูในขณะที่ไฟล์ของแพ็กเกจยังใช้ได้ จากนั้นรันคำสั่งเดิมด้วยมือและเปรียบเทียบว่าการเริ่มทั้งสองแบบให้อะไร

การตั้งค่าอยู่จริงที่ใด

แอปพลิเคชันที่ปฏิบัติตามกฎไดเรกทอรีฐานของ XDGจะวางการกำหนดค่าไว้ใต้ $XDG_CONFIG_HOME สถานะที่คงทนไว้ใต้ $XDG_STATE_HOME และข้อมูลที่ทิ้งได้ไว้ใต้ $XDG_CACHE_HOME และใช้ ~/.config, ~/.local/state และ ~/.cache เป็นค่าเริ่มต้นเมื่อตัวแปรเหล่านั้นไม่ได้ถูกตั้งค่า ทั้งสามอย่างเป็นบทบาทไม่ใช่คำสัญญา ดังนั้นผลิตภัณฑ์ VPN บางตัวอาจบันทึกสิ่งที่แตกต่างออกไปโดยสิ้นเชิง การอ่านเอกสารของผู้จำหน่ายเองดีกว่าการเดาพาธจากชื่อไดเรกทอรี เมื่อเอกสารมีน้อย ให้สังเกตกระบวนการแทนระบบไฟล์

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

strace -f -e trace=openat,stat -o /tmp/vpn.log vpn-client

ความลับและโปรไฟล์มีเจ้าของต่างกัน

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

การเริ่มด้วยสิทธิพิเศษทำให้ซับซ้อนยิ่งขึ้น เพราะการเริ่มผ่าน sudo หรือตัวช่วย PolicyKit อาจแสดงไดเรกทอรีบ้านอื่นและดังนั้นชุดการกำหนดค่าอื่น แก้ไขความเป็นเจ้าของที่ไฟล์เฉพาะที่แอปพลิเคชันบันทึกไว้ ไม่ใช่แบบเรียกซ้ำทั่วทั้งไดเรกทอรีบ้าน จากนั้นตัดสินว่าต่อไปใครควรเป็นเจ้าของโปรไฟล์และทำให้การเริ่มในอนาคตสอดคล้องกัน

ไอคอนบอกคุณได้อะไรและบอกไม่ได้อะไร

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

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

บทความที่เกี่ยวข้อง