web-dev-qa-db-fra.com

Comment puis-je démarrer un script dans un terminal Gnome réduit?

Je peux lancer une commande dans un nouveau terminal Gnome comme suit:

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

(Basé sur https://askubuntu.com/a/46630/7146 et https://stackoverflow.com/a/10708326/236081 )

Cependant, je veux que la nouvelle fenêtre de terminal commence à être réduite dans le lanceur. Comment puis je faire ça?

4
david.libremone

J'ai basé ma solution sur certaines des réponses données pour minimiser et maximiser fenêtres. Dans ce cas, cependant, je voulais cibler uniquement ce terminal Gnome (mais pas les autres terminaux Gnome), alors je lui ai donné un nom en utilisant --title:

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

Et créé une règle Devil's Pie pour Windows nommée "Tiny Terminal":

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

(Si vous préférez, vous pouvez utiliser gdevilspie pour créer cette règle dans une interface graphique.)

Cela permet d'obtenir l'effet souhaité d'origine. Cependant, lorsque je l'ai essayé, j'ai compris que je souhaitais également que le terminal soit restauré dans un état maximisé, qui est abordé dans une réponse distincte .

1
david.libremone

Gnome-Terminal n'a aucune option pour démarrer minimisé.

Ce qui suit est plus une solution de contournement pour ce faire:

Il faut d’abord wmctrl, mais ne correspond pas à la version des référentiels, car cette version n’a pas d’option permettant de réduire les fenêtres . (Si vous avez déjà installé wmctrl, vous devez le supprimer).

Téléchargez la version depuis github https://github.com/geekless/wmctrl/archive/master.Zip et installez-la (suivez le fichier INSTALL -> ./configure puis Sudo make install ) Si vous obtenez error: X11/Xmu/WinUtil.h, vous devez également installer Sudo apt-get install libxmu-dev, puis réessayer.

Ensuite, vous pouvez lancer depuis la ligne de commande, par exemple:

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

Explication:

  1. gnome-terminal -x sh -c "ls; bash" & disown lance gnome-terminal en tâche de fond et exécute une commande (dans ce cas ls)
  2. sleep 3 attendez que la fenêtre du terminal gnome apparaisse (vous pouvez expérimenter cette valeur, 3 secondes peuvent être trop courtes ou trop longues, cela dépend de votre matériel)
  3. wmctrl -i -Y -i -> interprète les arguments de la fenêtre sous forme de valeur numérique, -Y -> iconifie (réduit) la fenêtre
  4. $(wmctrl -l | awk -F' ' 'END{print $1}') ou $(wmctrl -l | tail -1 | cut -d' ' -f1) récupère l'identifiant de la dernière fenêtre ouverte (ce devrait être l'identifiant de la fenêtre de gnome-terminal dans ce cas)

Pour simplifier, vous pouvez ajouter une fonction à votre fichier $HOME/.bashrc:

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

alors vous pourriez l'utiliser comme ceci:

gterm-min "ls -la"
3
TuKsn

Qu'en est-il de minimiser votre fenêtre après l'avoir créée?

$ (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)

J'utilise Mate au lieu de Gnome mais cela devrait fonctionner de la même manière si vous remplacez mate-terminal par 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)

Tout d'abord, je crée une nouvelle fenêtre avec mate-terminal et j'attribue un nom à l'aide de l'option --title=xxx. Après cela, j'utilise xdotool search --name xxx|head -1 pour trouver l'identifiant de cette fenêtre et le passe à xdotool windowminimize. sleep 0.1 delay est nécessaire car la fenêtre a besoin d'un peu de temps pour être créée.

Au lieu d'utiliser le titre de la fenêtre, vous pouvez également utiliser d'autres options de recherche:

$ 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

Exemple d'utilisation de l'option --class 'mate-terminal':

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

Cela devrait fonctionner pour gnome:

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

Je trie la sortie de xdotool search puisque la fenêtre nouvellement créée devrait être la dernière listée.

3
Nykakin

Voici comment je lance le serveur "The Language Tool", sans sommeil ni boucle:

#!/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}")
0
Aubin