Как запустить скрипт в минимизированном терминале Gnome?

Я могу запустить команду в новом терминале Gnome следующим образом:

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

(На основе https://askubuntu.com/a/46630/7146 и https://stackoverflow.com / a / 10708326/236081)

Тем не менее, я хочу, чтобы новое окно терминала было сведено к минимуму в Launcher. Как я могу это сделать?

1
задан 23 May 2017 в 15:39

3 ответа

У Gnome-Terminal нет возможности свести к минимуму.

Ниже приведено обходное решение:

Требуется сначала wmctrl, но не версия из репозитории, потому что эта версия не имеет возможности минимизировать окна. (Если вы уже установили wmctrl, вы должны удалить его).

Загрузите версию из github https://github.com/geekless/wmctrl/archive/master.zip и установите ее (следуйте за файлом INSTALL -> ./configure, затем sudo make install). Если вы получаете error: X11/Xmu/WinUtil.h, вы также должны установить sudo apt-get install libxmu-dev, а затем повторите попытку.

Тогда вы можете запустить из командной строки это, например:

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

Объяснение:

gnome-terminal -x sh -c "ls; bash" & disown запустите gnome-terminal в фоновом режиме и выполните команду (в этом случае ls) sleep 3 дождитесь появления окна gnome-терминала (вы можете поэкспериментировать с этим значением, 3 секунды может быть короткий или длинный, зависит от вашего оборудования) wmctrl -i -Y -i -> интерпретировать аргументы окна как числовое значение, -Y -> значить (сворачивать) окно $(wmctrl -l | awk -F' ' 'END{print $1}') или $(wmctrl -l | tail -1 | cut -d' ' -f1) получать идентификатор окна последнего открытого window (в этом случае должен быть идентификатор окна gnome-terminal)

Чтобы упростить его, вы можете добавить функцию в свой файл $HOME/.bashrc:

, вы можете использовать его следующим образом:

gterm-min "ls -la"
3
ответ дан 24 May 2018 в 06:17
  • 1
    wmctrl -l | awk -F' ' 'END{ print $1}' достаточно. Вам не нужны две трубы. – Avinash Raj 26 June 2014 в 19:26

Как насчет минимизации вашего окна после его создания?

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

Я использую Mate вместо Gnome, но он должен работать одинаково, если вы замените mate-terminal на 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)

Сначала я создаю новое окно с mate-terminal, и я назначаю имя, используя опцию --title=xxx. После этого я использую xdotool search --name xxx|head -1, чтобы найти id этого окна, и передаю его xdotool windowminimize. sleep 0.1 задержка необходима, потому что окно нужно немного времени для создания.

Вместо использования названия окна вы также можете использовать другие параметры поиска:

$ 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

Пример использования :

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

Это должно работать для gnome:

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

Я сортирую вывод из xdotool search, поскольку последнее созданное окно должно быть последним.

3
ответ дан 24 May 2018 в 06:17
  • 1
    Больше всего времени работал и для меня (тестировался с gnome-terminal --title=123 & disown && sleep 1 && xdotool windowminimize $(xdotool search --name 123|head -1)), но заголовок gnome будет автоматически переименован через $HOME.bashrc через несколько секунд после запуска, поэтому временное окно действительно короткое, а иногда оно терпит неудачу для меня. – TuKsn 27 June 2014 в 13:29
  • 2
    @Tuknutx, я обновляю свой ответ. – Nykakin 27 June 2014 в 15:25
  • 3
    Это работает очень хорошо для меня с sleep 0.8. – TuKsn 27 June 2014 в 15:39

Вот как я запускаю сервер «Language Tool» без сна, без цикла:

#!/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
ответ дан 24 May 2018 в 06:17

Другие вопросы по тегам:

Похожие вопросы: