LINUX.ORG.RU

LXDE, lubuntu-desktop - открывать приложение или переключаться в него по горячей клавише

 , ,


2

1

Имеется debian 9 stretch LXDE. Открыта IDE, веб-браузер и терминал. Я хочу переключаться между ними не альт-табом, а по горячим клавишам. Я знаю, что это можно сделать с помощью рабочих столов, но у меня два монитора. Если раскидать приложения по рабочим столам, пространство экрана будет недоиспользовано.

В офтопике есть «закреплённые приложения» возле кнопки «Пуск». Когда нажимаем Win+1, Win-2 и т.п., запускается первое, второе и т.п. приложение . А если приложение уже запущено, то в него переключаюсь.

Можно ли так настроить LXDE? Или, может быть, есть какая-то ещё альтернатива?

РЕШЕНИЕ

# Установим программки...
> sudo apt-get install wmctrl wish xdg-utils
# Посмотрим, какие окошки у нас есть
> wmctrl -x -l 
0x03000046  0 sun-awt-X11-XFramePeer.jetbrains-phpstorm  deb8 rl [/y/rl] - ...ргт [rl] - PhpStorm
0x03600004  0 lxterminal.Lxterminal  deb8 den73@deb8: ~
0x03c00001  0 google-chrome.Google-chrome  deb8 Новая вкладка - Google Chrome
0x03c00014  0 google-chrome.Google-chrome  deb8 Developer Tools - https://www.google.ru/...
0x03800003  0 leafpad.Leafpad       deb8 (Без имени)
# Окошки можно искать по имени класса и по заголовку (man wmctrl).

Создадим скрипт для обработки горячих клавиш и запишем в файл ~/.config/горячие-клавиши-openbox.ш:

#!/bin/bash

function Диалог {
  echo "wm withdraw . 
  tk_messageBox -title {Помощник горячих клавиш} -message \"$0 сообщает:
[list $1]\"
  destroy ." | wish
}

command -v wmctrl || Диалог "Не установлена программа wmctrl"
case $1 in
  (W-1) 
   wmctrl -x -a Lxterminal \
   || xdg-open ~/Рабочий\ стол/lxterminal.desktop;;
  (W-2)
   wmctrl -x -a "Doublecmd" \
   || ~/doublecmd/doublecmd.sh;;
  (W-3) 
   wmctrl -a "- Google Chrome" \
   || google-chrome;;
  (W-4) 
   wmctrl -a "Developer Tools -" \
   || Диалог "$1 только активирует Chrome Developer Tools, но не запускает их";;
  (W-5) wmctrl -a "- Visual Studio Code" \
   || code;;
  ("") Диалог "В качестве параметра передай горячую клавишу, как она записана в OpenBox.";;
  (*) Диалог "Неизвестная горячая клавиша «$1»"
esac

# Сделаем файл исполняемым
> chmod u+x ~/.config/горячие-клавиши-openbox.ш
# Настроим конфигурацию LXDE
# Для LXDE
> leafpad ~/.config/openbox/lxde-rc.xml
# Для Lubuntu-desktop
> leafpad ~/.config/openbox/lubuntu-rc.xml

Добавляем в секцию keyboard:

    <keybind key="W-1"><action name="Execute">
       <command>~/.config/горячие-клавиши-openbox.ш W-1</command></action></keybind>
    <keybind key="W-2"><action name="Execute">
       <command>~/.config/горячие-клавиши-openbox.ш W-2</command></action></keybind>
    <keybind key="W-3"><action name="Execute">
       <command>~/.config/горячие-клавиши-openbox.ш W-3</command></action></keybind>
    <keybind key="W-4"><action name="Execute">
       <command>~/.config/горячие-клавиши-openbox.ш W-4</command></action></keybind>
    <keybind key="W-5"><action name="Execute">
       <command>~/.config/горячие-клавиши-openbox.ш W-5</command></action></keybind>

Применяем

> openbox --reconfigure

Сочетания Win+1 .. Win+5 теперь вроде работают.

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

P.S. работает также в Ubuntu 12.04; также проверено в Ubuntu 16.04 для рабочего стола lubuntu-desktop

★★★★★

Ответ на: комментарий от Vsevolod-linuxoid

Спасибо, конечно, но тогда вопрос сводится к написанию такого скрипта, а как его написать? Я сумел запустить программу, но при повторном нажатии горячей клавиши запускается новый экземпляр.

Нашёл что-то подобное на StackExchange

den73 ★★★★★ ()

Кстати, хрошая идея, спасибо за решение (и не только для опенкоробки).
Единственное, ты его врядли из консоли будешь запускать, потому echo лучше заменить на

kdialog --title «Помошник горящих кнопок» --msgbox «Неизвестная горячая клавиша «$1»»

Если зависимостей много потянет, zenity тоже умеет диалоги создавать.

fehhner ★★★★★ ()
<keybind key="W-1">
  <action name="Execute">
       <command>sh -c "wmctrl -a foo || notify-send Ку-ку!"</command>
  </action>
</keybind>

Как-то так. А ты нагородил огород.

anonymous ()
Ответ на: комментарий от fehhner

врядли из консоли будешь запускать, потому echo лучше заменить на

Там echo только формирует команду, которую выполняет wish (tcl/tk) - и это тоже диалог. А, блин, в других местах echo. Ладно, потом поправлю при случае.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от anonymous

А ты нагородил огород.

Может быть, но скрипт маленький, его удобнее читать и править, не нужно каждый раз делать reconfigure.

den73 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.