Se você deseja interagir com uma GUI a partir de um processo que não é iniciado a partir dessa GUI, é necessário definir algumas variáveis de ambiente: pelo menos DISPLAY
, possivelmente also XAUTHORITY
se não for no local padrão, e para muitos programas modernos você precisa defina DBUS_SESSION_BUS_ADDRESS
.
Mas uma abordagem mais confiável para o seu problema seria não reiniciar esses programas do NetworkManager. Além da dificuldade de lançá-los com êxito, você também precisa se preocupar se está conectado ou não, e se pode haver outros usuários e outros monitores a serem considerados, e assim por diante. Em vez disso, mate esses programas, mas não os reinicie. Em sua sessão normal, em vez de iniciá-los diretamente, inicie-os de um supervisor que os reinicia, se eles morrerem. Eu acho que o systemd inclui essa funcionalidade (mas eu não sei como usá-lo); ou você pode usar programas de supervisor dedicados como monit , supervisionar ,…