Os shells são apenas intérpretes de comandos de acordo com a definição POSIX. O Gtk é uma biblioteca e deve ser importado em linguagens de programação reais. Então a resposta é não, você não pode usar coisas Gtk completas em scripts de shell, apenas o conjunto limitado de coisas que yad
e zenity
permitem.
Mas você pode usar o Python. É uma linguagem de script, ainda mais adequada para coisas de sistema e programação do que shells. Você pode chamar comandos armazenados em locais como /bin
ou /usr/bin
via módulo de subprocesso no Python. Eu já fiz tantas vezes para meus aplicativos Gtk.
Aqui está, por exemplo, uma função padrão que eu uso para chamar comandos externos do script Python:
def run_cmd(self, cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError:
pass
else:
if stdout:
return stdout
E aqui está um exemplo usando-o no meu xrandr-indicator
para alternar a resolução da tela do painel superior do Ubuntu; como o nome sugere, ele chama xrandr
nos bastidores:
self.run_cmd(['xrandr','--output',out,'--mode',mode])
Quanto ao shell, você precisaria chamar um shell com o argumento -c. Então, algo assim poderia funcionar:
subprocess.Popen(['bash','-c', 'echo hello world'])
Alternativamente, considere implementar a comunicação entre processos. Faça GUI
em python, mas deixe que ele se comunique com um script de shell via canal nomeado ou arquivo.