Команда для запуска приложения или отображения его окна, если оно уже запущено

Я хочу создать ярлык для 1) запуска приложения, если оно еще не запущено, и 2) для отображения (или для вывода на передний план) окна приложения, если оно уже было запущено.

Например: F10 для запуска Stardict. Я создал собственный ярлык с командой "stardict" и клавишей F10, поэтому каждый раз, когда я нажимаю F10, система запускает новый экземпляр Stardict, но это не то, что мне нужно.

Кто-нибудь может помочь, пожалуйста?

Заранее спасибо.

ОБНОВЛЕНИЕ: Кроме того, я хочу добавить что-то вроде: если окно уже показано, нажатие клавиши быстрого доступа (всегда одинаковое) свернет его в системный трей.

Большое спасибо desgua за его полное решение ниже (раздел ответа). Кстати, перед тем, как desgua опубликовал свое решение, я нашел другое решение, но не проверенное: http://ubuntuforums.org/showthread.php?t=1464311

1 ответ

Решение

Запустить приложение или показать его окно, если оно уже запущено, или свернуть, если оно сфокусировано.

1) Установите wmctrl: sudo apt-get install wmctrl

2) Установите xdotool: sudo apt-get install xdotool

3) Сделать скрипт:

  • Сделать файл gedit ~/.focusshortcut
  • И вставьте это:
#! / Bin / Баш
#
# Этот скрипт делает это:
# запустить приложение, если оно еще не запущено, 
# сфокусировать приложение, если оно запущено, но не сфокусировано,
# сверните приложение, если оно сфокусировано. 
#
# by desgua - 2012/04/29, последнее обновление: 2012/12/11

# Инструкции
name=$(echo $0 | sed 's/.*\///')
if [ $# -ne 1 ]; затем
эхо "
Этот скрипт делает это:

# запустить приложение, если оно еще не запущено, 
# сфокусировать приложение, если оно запущено, но не сфокусировано,
# сверните приложение, если оно сфокусировано. 

Использование: $name app

Пример: 

$ name gcalctool
"
выход 1

фи




# Давайте проверим, установлены ли необходимые инструменты: 


tool1 = $ (который xdotool)
tool2=$(который wmctrl)

if [-z $ tool1]; затем
    echo "Xdotool необходим, вы хотите установить его сейчас? [Y/n]"
    читать 
    если [[ $a == "Y" || $a == "y" || $a = "" ]]; затем
        sudo apt-get установить xdotool
    еще
        echo "Exiting then..."
        выход 1
    фи
фи

if [ -z $tool2 ]; затем
    echo "Wmctrl необходим, вы хотите установить его сейчас? [Y/n]"
    читать 
    если [[ $a == "Y" || $a == "y" || $a = "" ]]; затем
        sudo apt-get установить wmctrl
    еще
        echo "Exiting then..."
        выход 1
    фи
фи


# Проверьте, запущено ли приложение

pid = $ (pidof $ 1)

# Если он не запущен, запустите

if [ -z $pid ]; затем
    $ 1 
    выход 0
еще  

# Если он запущен, то проверьте, сфокусирован ли он

foc = $ (xdotool getactivewindow getwindowpid)

    if [[$ pid == $ foc]]; затем

        # если оно сфокусировано, то минимизировать
        xdotool getactivewindow windowminimize
        выход 0

    еще

        # если оно не сфокусировано, тогда сфокусируйтесь
        wmctrl -x -R $1
        выход 0

    фи
фи

выход 0

  • Сделайте его исполняемым: chmod +x ~/.focusshortcut

3) Сделайте вашу ссылку на / home / <user> /.focusshortcut app_to_show

4) Наслаждайтесь;-)

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