executando gnome-terminal sem borda de janela na inicialização no xubuntu 12.10

3

Eu criei um script para iniciar uma sessão do gnome-terminal quando eu logar no xubuntu. Eu queria especificamente em uma posição específica na janela, e sem bordas de janela (surpreendentemente, não há uma opção fácil para isso no gnome-terminal, ao contrário do xfce4-terminal).

Depois de um bocado de pesquisando e testando 10 métodos que não funcionaram, acabei com os seguintes scripts, no bash e no python.

Meu script bash executável, que coloquei em $ HOME / bin:

#!/bin/bash

flags[0]="--hide-menubar"
flags[1]="--geometry=80x54+0-0"
flags[2]="--window-with-profile=default2"
flags[3]="--working-directory={$HOME}"

gnome-terminal ${flags[@]} -x bash -c 'sleep 5 ;{$HOME}/bin/undecor.py ;bash'

O script python executável correspondente, no mesmo diretório:

#!/usr/bin/python
import gtk.gdk

root_window = gtk.gdk.get_default_root_window()
root_xid = root_window.property_get("_NET_ACTIVE_WINDOW")[2][0]
w = gtk.gdk.window_foreign_new(root_xid)
w.set_decorations(False)
gtk.gdk.window_process_all_updates()

Eu coloquei os sinalizadores em uma matriz no script bash apenas para que eu pudesse dizer facilmente o que estava acontecendo se eu precisasse editar o arranjo particular mais tarde. Nota: Estou fazendo isso no python 2.7.3. Eu não testei em python 3.x

O motivo da maior parte da estranheza na última linha do bashscript é que achei muito difícil executar um comando em uma nova janela do gnome-terminal e mantê-lo aberto após o término da execução do comando.

O segundo grande problema é que na inicialização, sem executar o comando sleep, meu script python é executado antes que a janela seja formalmente criada (eu acho ...) e em algum lugar no script python eu começo a obter NoneTypes em vez da janela real objetos, etc., e o pyscript nunca define com sucesso a janela.

Então, o que eu estou perguntando é se alguém pode pensar em uma maneira menos hacky de fazer isso. Eu realmente gostaria de usar apenas python, mas não consegui encontrar uma maneira fácil de fazer no módulo os ou gtk. Eu li algumas outras soluções que envolviam coisas como compiz ou openbox, mas eu queria uma maneira de fazer isso sem instalar nada de novo. Eu nem tenho certeza se isso funciona em outros ambientes.

Obrigado! Desculpe se esta pergunta é longa, eu queria fazer minha lição de casa primeiro.

(Além disso, observe os usuários do xubuntu, você precisa ter certeza de que está iniciando os serviços do GNOME na inicialização)

    
por lxvk 01.04.2013 / 19:50

1 resposta

7

Você pode fazer isso com o devilspie. Instale o pacote devilspie e escreva o seguinte arquivo de configuração (salve como ~/.devilspie/gnome-terminal.ds )

(if (is (window_role) "borderless") 
  (begin
    (geometry "+0+0")
    (maximize_vertically)
    (undecorate)
  )
)

Agora você acabou de executar devilspie quando efetua login (por exemplo, adicionando-o a aplicativos de inicialização), sempre que uma janela com a função "sem borda" aparecer, ela será movida para a posição (0,0) maximizada verticalmente e decorações removidas.

Você especifica o papel do gnome-terminal com a opção --role .

gnome-terminal --role=borderless
    
por geirha 04.04.2013 / 22:17