У меня есть программа golang, работающая как корневой сервис и я пытаюсь установить параметр прокси с помощью команды gsettings в моей программе. Я могу прочитать эти настройки в моей программе golang, используя следующий код команды в golang:
u, erru:= user.Lookup("dimdimuser")
если ошибаюсь != ноль {
вернуть "", fmt.Errorf ("неизвестная информация о пользователе")
}
uid, ошибка = 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 = &out
cmd.Stderr = &stderr
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}
ошибка = cmd.Выполнить()
если ошибка != ноль {
return "", fmt.Errorf("Ошибка '/usr/bin/gsettings' %s %s ", getOrSet, option)
}
вернуть out.String(), ноль
но когда я пытаюсь установить эти настройки, команда не сообщает об ошибке, но настройки не меняются. вот код, который я пытаюсь установить autoconfig-url:
cmd := exec.Command("/usr/bin/gsettings", "set", "org.gnome.system.proxy", "autoconfig-url", "HTTP://localhost/dimdimproxy")
cmd.Stdout = &out
cmd.Stderr = &stderr
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}
ошибка = cmd.Выполнить()
если ошибка != ноль {
вернуть "", fmt.Errorf ("Ошибка")
}
вернуть out.String(), ноль
Я попытался использовать dbus-launch, который изменяет настройку, если я пытаюсь получить данные из своей программы или на другой вкладке терминала с правами локального пользователя. но пользовательский интерфейс gnome не отражается. а также системный браузер также не принимает изменения, сделанные следующей командой.
sudo -Hu dimdim dbus-launch gsettings set org.gnome.system.proxy autoconfig-url htt://localhost/dimdimproxy