ฉันมีโปรแกรม golang ทำงานเป็น บริการรูท และฉันกำลังพยายามตั้งค่าพร็อกซีโดยใช้คำสั่ง gsettings ในโปรแกรมของฉัน ฉันสามารถอ่านการตั้งค่าเหล่านี้ในโปรแกรม golang โดยใช้รหัสคำสั่งต่อไปนี้ใน golang:
คุณ erru:= user.Lookup("dimdimuser")
ถ้าผิดพลาด != ศูนย์ {
กลับ "",fmt.Errorf("ข้อมูลผู้ใช้ที่ไม่รู้จัก")
}
uid, err = strconv.ParseInt(u.Uid, 10, 32)
gid, err = strconv.ParseInt(u.Gid, 10, 32)
cmd := exec.Command("/usr/bin/gsettings", "get", "org.gnome.system.proxy", "autoconfig-url")
cmd.Stdout = &ออก
cmd.Stderr = &stderr
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}
ข้อผิดพลาด = cmd.Run()
ถ้าผิดพลาด != ไม่มี {
กลับ "", fmt.Errorf("ล้มเหลว '/usr/bin/gsettings' %s %s ", getOrSet, ตัวเลือก)
}
กลับออกมา.String(), ศูนย์
แต่เมื่อฉันพยายามตั้งค่าเหล่านี้ คำสั่งไม่รายงานข้อผิดพลาดใด ๆ แต่การตั้งค่าไม่เปลี่ยนแปลง นี่คือรหัสที่ฉันพยายามตั้งค่า autoconfig-url:
cmd := exec.Command("/usr/bin/gsettings", "set", "org.gnome.system.proxy", "autoconfig-url","HTTP://localhost/dimdimproxy")
cmd.Stdout = &ออก
cmd.Stderr = &stderr
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}
ข้อผิดพลาด = cmd.Run()
ถ้าผิดพลาด != ไม่มี {
กลับ "", fmt.Errorf ("ล้มเหลว")
}
กลับออกมา.String(), ศูนย์
ฉันได้ลองใช้ dbus-launch ซึ่งเปลี่ยนการตั้งค่าหากฉันพยายามดึงข้อมูลจากโปรแกรมของฉันหรือบนแท็บเทอร์มินัลอื่นที่มีสิทธิ์ของผู้ใช้ในเครื่อง แต่ UI ของ gnome ไม่ได้รับการสะท้อนกลับ และเบราว์เซอร์ของระบบก็ไม่ยอมรับการเปลี่ยนแปลงที่ทำโดยทำตามคำสั่ง
sudo -Hu dimdim dbus-launch gsettings set org.gnome.system.proxy autoconfig-url htt://localhost/dimdimproxy