Python не может запустить веб-браузер Firefox из корневого скрипта с потерей привилегий

StackOverflow https://stackoverflow.com/questions/1139835

  •  16-09-2019
  •  | 
  •  

Вопрос

Я не могу запустить 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 перед запуском браузера.Могут быть и другие переменные, которые стоит проверить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top