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?
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 .
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:
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
)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)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$(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"
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.
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}")