Python не может запустить веб-браузер Firefox из корневого скрипта с потерей привилегий
Вопрос
Я не могу запустить Firefox из скрипта Python, созданного sudoed, который передает привилегии обычному пользователю.Если я напишу
$ sudo python >>> import os >>> import pwd, grp >>> uid = pwd.getpwnam('norby')[2] >>> gid = grp.getgrnam('norby')[2] >>> os.setegid(gid) >>> os.seteuid(uid) >>> import webbrowser >>> webbrowser.get('firefox').open('www.google.it') True >>> # It returns true but doesn't work >>> from subprocess import Popen,PIPE >>> p = Popen('firefox www.google.it', shell=True,stdout=PIPE,stderr=PIPE) >>> # Doesn't execute the command >>> You shouldn't really run Iceweasel through sudo WITHOUT the -H option. Continuing as if you used the -H option. No protocol specified Error: cannot open display: :0
Я думаю, что это не проблема Python, а проблема конфигурации Firefox/iceweasel/debian.Возможно, Firefox читает только UID, а не EUID, и не выполняет процесс, поскольку UID равен 0.О чем вы думаете?
Решение
Это может быть ваше окружение.Изменение разрешений по-прежнему приведет к тому, что переменные среды, такие как $HOME, будут указывать на каталог корневого пользователя, который будет недоступен.Возможно, стоит попробовать изменить эти переменные, изменив os.environ
перед запуском браузера.Могут быть и другие переменные, которые стоит проверить.
Не связан с StackOverflow