Você tem que exportar a variável de ambiente chamada DISPLAY com o valor ': 0.0'. Isso pode dar certo. Pergunte no stackoverflow se você não sabe como exportar variáveis de ambiente usando python.
Eu não posso rodar o firefox a partir de um script python sudoed que derrube privilégios para o usuário normal. Se eu escrever
# 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
Eu acho que não é um problema de python, mas o problema de configuração do firefox / iceweasel / debian. Talvez o firefox leia apenas o UID e não o EUID, e não execute o processo porque o UID é igual a 0. O que você acha?
O problema é que ele não pode acessar a exibição no servidor X, ele está sendo executado? Eu não recomendaria rodar o firefox com permissões de root, isso seria como rodar o IE em uma caixa do windows.
Você disse em um comentário que estava sendo lançado em um nível de execução mais baixo. O erro é porque você está lançando o firefox nesse nível inferior antes de o X exibir uma exibição ativa. Atrase ele está correndo até o X acabar.
Você realmente não deveria fazer isso. Tipo, realmente .
Por que você está tentando?
Primeiro, você normalmente deseja usar gksu
ou gksudo
ou sux
para obter privilégios de root para um aplicativo X. Segundo, por que você está usando sudo
no Debian? (Eu quero dizer é sudo
mesmo habilitado? Não é por padrão no Debian, ao contrário do Ubuntu ou OS X.) Terceiro, eu não consigo pensar em nenhuma circunstância em que você precise executar uma navegador com privilégios de root.
Existem casos em que você precisa de um aplicativo gui como root - digamos, você quer editar um arquivo de sistema ( / etc / network / interfaces por exemplo), e você está mais confortável editando com %código%. Isso não é uma coisa irracional para querer fazer. Mas você desejaria usar gedit
ou um utilitário semelhante para transferir os privilégios.
Eu uso o sux.
Description: wrapper around su which will transfer your X credentials Sux is a wrapper around the standard su command which will transfer your X credentials to the target user.
Eu acho que você terá que especificar um servidor X. Eu não tenho idéia de como fazer isso em python: -)
Tags sudo permissions firefox users debian