Como posso iniciar um script em um Terminal Gnome minimizado?

4

Eu posso iniciar um comando em um novo Terminal Gnome da seguinte forma:

nohup gnome-terminal --window-with-profile=Background --command ls >/dev/null 2>&1&

(Baseado no link e link )

No entanto, quero que a nova janela de terminal seja iniciada no Launcher. Como posso fazer isso?

    
por d3vid 26.06.2014 / 11:08

4 respostas

1

Eu baseei minha solução em algumas das respostas dadas para minimizar e maximizando janelas . Neste caso, porém, eu queria segmentar apenas este Terminal do Gnome (mas não outros Terminais do Gnome), então eu dei a ele um nome usando --title :

nohup gnome-terminal --title="Tiny Terminal" --window-with-profile=Background --command "$argv" >/dev/null 2>&1&

E criou uma regra Devil's Pie para o Windows chamada "Tiny Terminal":

(if
(is (window_name) "Tiny Terminal")
(begin (minimize) )
)

(Se preferir, você pode usar o gdevilspie para criar esta regra em uma GUI).

Isso alcança o efeito desejado original. No entanto, quando experimentei, percebi que também queria que o terminal fosse restaurado para um estado maximizado, que é tratado em uma resposta separada .

    
por d3vid 03.07.2014 / 12:03
3

O Gnome-Terminal não tem nenhuma opção para começar minimizado.

O seguinte é mais uma solução alternativa para fazer isso:

Primeiro wmctrl é necessário, mas não é a versão dos repositórios porque esta versão não tem uma opção para minimizar janelas . (Se você já instalou wmctrl você tem que removê-lo).

Faça o download da versão do link do github e instale-a (siga o arquivo INSTALL - > ./configure então sudo make install ). Se você obtiver error: X11/Xmu/WinUtil.h , também deverá instalar sudo apt-get install libxmu-dev e, em seguida, tentar novamente.

Então você pode executar a partir da linha de comando, por exemplo:

gnome-terminal -x sh -c "ls; bash" & disown && sleep 3 &&  wmctrl -i -Y  $(wmctrl -l | awk -F' ' 'END{print $1}')

Explicação:

  1. gnome-terminal -x sh -c "ls; bash" & disown executa o gnome-terminal em segundo plano e executa um comando (neste caso ls )
  2. sleep 3 espera até que a janela do gnome-terminal apareça (você pode experimentar com este valor, 3 segundos podem ser curtos ou longos, depende do seu hardware)
  3. wmctrl -i -Y -i - > Interpretar os argumentos da janela como um valor numérico, -Y - > Iconify (minimizar) a janela
  4. $(wmctrl -l | awk -F' ' 'END{print $1}') ou $(wmctrl -l | tail -1 | cut -d' ' -f1) obtém o id da janela da última janela aberta (deve ser o id da janela do gnome-terminal neste caso)

Para simplificar, você pode adicionar uma função ao seu arquivo $HOME/.bashrc :

gterm-min() {
    gnome-terminal -x sh -c "$1; bash" & disown  
    sleep 3   
    wmctrl -i -Y  $(wmctrl -l | awk -F' ' 'END{print $1}')
}

então você poderia usá-lo assim:

gterm-min "ls -la"
    
por TuKsn 26.06.2014 / 16:08
3

Que tal minimizar sua janela depois de criá-la?

$ (mate-terminal --window-with-profile=Background --title=xxx  --command top >/dev/null 2>&1 &); sleep 0.1; xdotool windowminimize $(xdotool search --name xxx|head -1)

Eu uso o Mate em vez do Gnome, mas ele deve funcionar da mesma forma se você substituir mate-terminal por gnome-terminal :

$ (gnome-terminal --window-with-profile=Background --title=xxx  --command top >/dev/null 2>&1&); sleep 0.1; xdotool windowminimize $(xdotool search --name xxx|head -1)

Primeiro, eu crio uma nova janela com mate-terminal e atribuo nome usando a opção --title=xxx . Depois disso, uso xdotool search --name xxx|head -1 para encontrar o ID dessa janela e passo para xdotool windowminimize . sleep 0.1 delay é necessário porque a janela precisa de um tempo para ser criada.

Em vez de usar o título da janela, você também pode usar outras opções de pesquisa:

$ xdotool search Usage: xdotool search [options] regexp_pattern
--class         check regexp_pattern agains the window class
--classname     check regexp_pattern agains the window classname
--maxdepth N    set search depth to N. Default is infinite.
                -1 also means infinite.
--onlyvisible   matches only windows currently visible
--pid PID       only show windows belonging to specific process
                Not supported by all X11 applications
--screen N      only search a specific screen. Default is all screens
--desktop N     only search a specific desktop number
--limit N       break search after N results
--name          check regexp_pattern agains the window name
--title         DEPRECATED. Same as --name.
--all           Require all conditions match a window. Default is --any
--any           Windows matching any condition will be reported
--sync          Wait until a search result is found.
-h, --help      show this help output

If none of --name, --classname, or --class are specified, the  defaults are: --name --classname --class

Exemplo usando a opção --class 'mate-terminal' :

(mate-terminal --command 'top' &) && sleep 0.1 && xdotool windowminimize $(xdotool search --class 'mate-terminal' |sort|tail -1)

Isso deve funcionar para o gnome:

(gnome-terminal --command 'top' &) && sleep 0.1 && xdotool windowminimize $(xdotool search --class 'gnome-terminal' |sort|tail -1)

Classifico a saída de xdotool search , já que a janela recém-criada deve ser a última listada.

    
por Nykakin 27.06.2014 / 03:36
0

Aqui está como eu lanço o servidor "The Language Tool", sem dormir, sem loop:

#!/bin/bash

LT_WIN_NAME='The Language Tool'

xterm -geometry 126x12+0+0 -T "${LT_WIN_NAME}" -e\
 java -cp languagetool-server.jar org.languagetool.server.HTTPServer --allow-origin "*" &
xdotool windowminimize $(xdotool search --sync --name "${LT_WIN_NAME}")
    
por Aubin 06.07.2017 / 19:21