Линукс кнопки управления окнами

Shortcuts в Linux

Навеяло топиком про горячие клавиши в Windows (статья 1 и статья 2)

Горячие клавиши условно можно разделить на следующие группы:
Общесистемные горячие клавиши
Комбинации клавиш для работы в консоли
Комбинации клавиш системы X-Window
Комбинации клавиш среды KDE

Общесистемные горячие клавиши

Все мы знаем «комбинацию из трех пальцев»: Ctrl + Alt + Del. В Windows она использовалась для вызова окна процессов. Повторное нажатие Ctrl + Alt + Del перезагружало компьютер. В Linux реакция на нажатие этой комбинации задается в файле /etc/inittab:

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Параметр –r now команды shutdown означает, что систему нужно перезагрузить (-r) сейчас же (now). У вас может стоять другая команда, например, reboot или же вообще реакция на Ctrl + Alt + Del может быть отключена.

Следующая общесистемная комбинация клавиш – это Ctrl + Alt + Backspace. Нажатие этой комбинации клавиш приведет к перезагрузке сервера X Window, если он запушен.

Комбинации клавиш для работы в консоли

Виртуальных консолей в Linux может быть несколько (обычно 6). Переключаться между ними позволяют комбинации клавиш Alt + Fn, где n – это номер консоли. Однако эта комбинация клавиш будет работать только, если вы сейчас работаете в консоли, а не в KDE или другой графической среде. Например, вы сейчас работаете в консоли 1, а вам нужно переключить на консоль 4, тогда нажмите комбинацию клавиш Alt + F4, для обратного переключения нажмите Alt + F1.

Нажатие комбинации Alt + F7, как правило, переключает вас в графический режим – систему X Window.

Клавиша Tab в консоли (или терминале системе X Window) реализует автозаполнение командной строки. Предположим, что вы забыли точное имя команды, с помощью которой запускается нужная вам программа. Введите начальные буквы команды и нажмите Tab – система сама дополнит командную строку. Если после нажатия Tab вы услышите звуковой сигнал, значит, возможных вариантов несколько, например, вы ввели da, а система нашли две (или более) команды, которые начинаются на “da”, и она не знает, какую команду нужно «вписать» в командную строку. В этом случае нажмите еще раз Tab, чтобы увидеть весь список команд, которые начинаются на “da”.

Вы нашли нужную вам команду, ввели ее, программа вывела на экран какую-то информацию. Но вывод программы оказался настолько объемным, что не поместился на экране. Можно, конечно, перенаправить вывод в файл или программу less, но если этот вывод вы не будете использовать в дальнейшем, не нужно этого делать. Просто листайте его с помощью комбинаций клавиш Shift + PgUp и Shift+PgDn.

Комбинации клавиш системы X-Window

Сейчас вы наслаждаетесь работой в X Window. Но иногда нужно переключиться в консоль, поскольку графический терминал вам просто надоел. Это можно сделать с помощью комбинации клавиш Ctrl + Alt + Fn, где n – это номер консоли (1..6). Обратно переключиться можно с помощью комбинации клавиш Alt + F7.

Для изменения разрешения монитора вам не нужно запускать никакой конфигуратор. Просто нажмите Ctrl + “+” (на цифровой клавиатуре) для увеличения разрешения (до максимально допустимого) или Ctrl + “-“ (на цифровой клавиатуре) для уменьшения.

Небольшой совет: если у вас слабенькая плата (например, RivaTNT2 Vanta 8MB) и любимая игрушка (ясное дело – tuxracer) «тормозит», уменьшите разрешение до 640×480.

Поскольку в «чистой» системе X Window с ее классическими менеджерами окон практически никто не работает, смысла рассматривать дополнительные комбинации клавиш я не вижу. Перейдем сразу к KDE.

Комбинации клавиш среды KDE

Компания Microsoft предлагает начать работу в Windows с нажатия клавишу Пуск (Start). В KDE для этого используется кнопка с надписью K (точнее с логотипом самого KDE). Если у вас большой монитор (дюймов этак 19 или больше) и вам лень тянуть мышь (которую вы забыли почистить) из верхнего правого в нижний левый угол, нажмите Alt + F1, и меню KDE появится в текущей позиции указателя мыши.

Если вам нужно запустить одну команду, вряд ли для этого нужно запускать терминал (при условии, что вызываемая программа графическая), нажмите Alt + F2 для открытия окна запуска программы – введите команду или выберите ее из списка и нажмите Выполнить.


Рис. 1. Окно запуска программы

Переключаться между запущенными программами можно с помощью комбинации клавиш Alt + Tab – как в Windows. Если на рабочем столе – хаос, значит, пришло время перейти на другой рабочий стол. Переключаться между рабочими столами можно с помощью комбинации клавиш Ctrl + Tab или Ctrl + Fn, где n – это номер нужного вам рабочего стола. Помните, что комбинация клавиш Alt + Tab работает только в пределах текущего рабочего стола. Если у вас на первом рабочем столе запущено десятка два программ, а на втором – ни одной, при нажатии Alt + Tab на втором столе вы увидите сообщение «Нет задач».

Просмотреть весь список задач можно, нажав комбинацию Alt + F5. Если вам «не понравился» какой-то процесс, его можно «убить», вызвав менеджера задач (комбинация клавиш Ctrl + Escape).

Раскладка клавиатуры не переключается обычным способом? Не помогает, ни Ctrl, ни Ctrl + Shift? Тогда нажмите комбинацию клавиш Ctrl + Alt + K. Это комбинация сработает в KDE всегда.

Комбинации клавиш для работы с буфером обмена самые обычные – Ctrl + C (копировать), Ctrl + X (вырезать) и Ctrl + V (вставить). Кроме этих трех комбинаций, KDE предоставляет пользователю еще две:

Ctrl + Alt + V – показать меню буфера обмена
Ctrl + Alt + R – «ручная» работа с буфером обмена

А как же работа с окнами? Комбинация Alt + F4, как и в Windows, закрывает окно, а Alt + F3 – выводит меню действий с окном.

Очень полезной является комбинация Ctrl + Alt + Esc, вызывающая программу xkill. После ее вызова указатель мыши превращается в череп с косточками. Щелкнув «черепом» по какому-то окну, оно будет уничтожено, даже если программа «подвисла». Для выхода из программы xkill без уничтожения окна нажмите Esc.

Читайте также:  Безопасность windows настройка пин кода

В Windows можно было сфотографировать экран, нажав клавишу Print Screen. В Linux тоже это можно сделать, но для фотографирования всего рабочего стола нужно нажать Ctrl + Print Screen, а активного окна — Alt + Print Screen. После этого полученный снимок будет помещен в буфер обмена и его можно будет вставить в любое KDE-приложение, поддерживающее работу с графикой. Однако я рекомендую делать снимки экрана специальными программами, например, ksnapshot. Полученные с помощью этой программы снимки будут намного качественнее, чем снимки, полученные предложенным выше способом, а также они будут занимать мало места на диске (потому что программа ksnapshot использует формат PNG).

Еще несколько полезных шорткатов:
Alt+PtScr+S — немедленный сброс буфера на диски
Alt+PtScr+U — немедленное отключение дисков
Alt+PtScr+B — немедленная перезагрузка (действует как ресет).
Если вдруг произошло жёсткое зависание или торможение (например, из-за аппаратных глюков), но ядро ещё не упало в панику, последовательное нажатие этих комбинаций с небольшой задержкой в пару секунд будет куда безопаснее ресета
При работе с консолью Ctrl+W и Ctrl+U — удаление одного слова и целой строки, соответственно.
В терминале во время выполнения программы нажмите Ctrl-S. Это приостанавливает вывод программы.
Ctrl-Q — возобновить вывод программы 🙂
Alt+PtScr+K — прибить прогу, которая сейчас занимает консоль. Сильно помогает если слетают X-сы вследствие кривых дров.
Ctrl-L для очистки окна терминала.
Ctrl-A на начало строки
Ctrl-E в конец строки
Ctrl-R поиск по истории команд назад (часто используется)
Esc. вставить последний аргумент последней команды
Ctrl-V вставить следующий символ буквально (эскейп)
Ctrl-K удалить до конца строки
Ctrl-U удалить до начала строки
Ctrl-W удалить предыдущее слово
Esc < выполнить автодополнение файла и оформить результат в фигурные скобки для шелла
(попробуйте набрать «ls -l . <» в домашнем каталоге)

И ещё много-много чего другого. А если не хватает, можно добавить в .inputrc.

Полный список (Alt+SysRq+символ)(если кто переведет буду очень благодарен!)

‘r’ — Turns off keyboard raw mode and sets it to XLATE.
‘k’ — Secure Access Key (SAK) Kills all programs on the current virtual
console. NOTE: See important comments below in SAK section.
‘b’ — Will immediately reboot the system without syncing or unmounting
your disks.
‘c’ — Will perform a kexec reboot in order to take a crashdump.
‘d’ — Shows all locks that are held.
‘o’ — Will shut your system off (if configured and supported).
‘s’ — Will attempt to sync all mounted filesystems.
‘u’ — Will attempt to remount all mounted filesystems read-only.
‘p’ — Will dump the current registers and flags to your console.
‘t’ — Will dump a list of current tasks and their information to your
console.
‘m’ — Will dump current memory info to your console.
‘n’ — Used to make RT tasks nice-able
‘v’ — Dumps Voyager SMP processor info to your console.
‘w’ — Dumps tasks that are in uninterruptable (blocked) state.
‘x’ — Used by xmon interface on ppc/powerpc platforms.
‘0’-‘9’ — Sets the console log level, controlling which kernel messages
will be printed to your console. (‘0’, for example would make
it so that only emergency messages like PANICs or OOPSes would
make it to your console.)
‘f’ — Will call oom_kill to kill a memory hog process.
‘e’ — Send a SIGTERM to all processes, except for init.
‘g’ — Used by kgdb on ppc platforms.
‘i’ — Send a SIGKILL to all processes, except for init.
‘h’ — Will display help (actually any other key than those listed
above will display help. but ‘h’ is easy to remember 🙂

Как изменить комбинации клавиш в KDE? Откройте Центр управления и перейдите в раздел Внешний вид, Горячие клавиши (или Привязки клавиш – во второй версии KDE).

Рис. 2. Привязки клавиш

Теперь подытожим и создадим таблицу с комбинациями клавиш. Распечатайте ее и используйте до тех пор, пока не выучите нужные вам в повседневной работе комбинации.

Источник

Альтернативное управление окнами в Linux

Я из тех, кто ставит на Caps Lock переключение раскладки потому, что лень нажимать 2 клавиши, когда можно нажимать одну. Я бы даже хотел 2 ненужные клавиши: одну бы я использовал для включения английской раскладки, а вторую для русской. Но вторая ненужная клавиша — это вызов контекстного меню, которая настолько ненужная, что выпиливается многими производителями ноутбуков. Так что приходится довольствоваться тем, что есть.

А ещё я не хочу при переключении окон искать их иконки на панели задач, ловить взглядом названия при листании через Alt+Tab, листать рабочие столы и т. д. Я хочу нажать комбинацию клавиш (в идеале вообще одну, но свободных ненужных клавиш уже нет) и сразу попасть в нужное мне окно. Например так:

  • Alt+F: Firefox
  • Alt+D: Firefox (Private Browsing)
  • Alt+T: Terminal
  • Alt+M: Калькулятор
  • Alt+E: IntelliJ Idea
  • и т. д.

Причём, по нажатию, например, на Alt+M я хочу видеть калькулятор вне зависимости от того, запущена ли в данный момент эта программа. Если запущена, то её окну надо передать фокус, а если нет — запустить нужную программу и передать фокус когда она загрузится.

На случаи, которые не покрываются предыдущим сценарием, я хочу иметь универсальные комбинации клавиш, на которые можно легко назначить любые из открытых окон. Например, у меня назначены 10 комбинаций от Alt+1 до Alt+0, которые не привязанные ни к каким программам. Я могу просто нажать Alt+1 и окно, которое сейчас в фокусе, будет получать фокус при нажатии Alt+1.

Под катом описание ещё пары фич и ответ на то, как можно это сделать. Но сразу предупрежу, что подобная кастомизация «под себя» может вызвать сильную зависимость и даже ломку при необходимости использовать Windows, Mac OS или даже чужой компьютер с Linux.

Читайте также:  Windows 10 домашняя russian

На самом деле, если подумать, то мы не так много программ используем повседневно. Браузер, терминал, IDE, какой-то мессенджер, файловый менеджер, калькулятор и, пожалуй, это практически всё. Нужно не так много комбинаций клавиш, чтобы покрыть 95% повседневных задач.

Для программ, у которых открыто несколько окон, одно из них можно назначить главным. Например, открыто несколько окон IntelliJ Idea, назначенных на Alt+E. В обычных условиях при нажатии на Alt+E будет открываться какое-то окно данной программы, скорее всего то, которое было открыто первым. Однако, если нажать на Alt+E когда одно из окон данной программы уже в фокусе, то именно это окно будет назначено главным и именно ему будет передаваться фокус при последующих нажатиях комбинации.

Главное окно можно переназначить. Для этого комбинацию нужно сначала сбросить, а потом назначить на неё главным другое окно. Для сброса комбинации нужно нажать саму комбинацию, а потом специальную комбинацию сброса, у меня она назначена на Alt+Backspace. Это вызовет скрипт, который отменит назначение главного окна для предыдущей комбинации. А далее можно назначить новое главное окно как это было описано в предыдущем абзаце. Сброс привязанного окна к универсальным комбинациям происходит аналогично.

Вступление получилось длинным, но хотелось сначала рассказать что будем делать, а потом объяснить как делать.

Для тех, кому надоело читать

Если коротко, то ссылка на скрипты в конце статьи.

Но все равно сразу установить и пользоваться не получится. Придётся сначала разобраться как скрипт находит нужное окно. Без этого не получится указать скрипту куда именно нужно передать фокус. И нужно понять что делать, если вдруг подходящего окна не нашлось.

А ещё я не буду заострять внимание на том, как настраивать выполнение скриптов по нажатию комбинаций клавиш. Например, в KDE это в System Settings → Shortcuts → Custom Shortcuts. В других оконных менеджерах такое тоже должно быть.

Знакомство с wmctrl

Wmctrl — консольная утилита для взаимодействия с X Window Manager. Это ключевая программа для скрипта. Давайте бегло глянем на то, как ей можно пользоваться.

Для начала выведем список открытых окон:

Опция -l выводит список всех открытых окон, а добавляет к выводу название класса (skype.Skype, Navigator.Firefox и т.д). Нам тут понадобится id окна (колонка 1), имя класса (колонка 3) и название окна (последняя колонка).

Можно попробовать активировать какое-то окно с помощью опции -a:

Если все пошло по плану, то на экране должно появиться окно Skype. Если вместо опции -x использовать опцию -i, то вместо имени класса можно будет указать id окна. С id проблема в том, что id окна меняется при каждом запуске приложения и мы не можем знать его заранее. С другой стороны, этот атрибут однозначно указывает на окно, что может быть важно, когда приложение открывает больше одного окна. Об этом чуть дальше.

На этом этапе нам надо запомнить, что мы будем искать нужное окно с помощью regex по выводу wmctrl -lx. Но это не значит, что нам обязательно использовать что-то сложное. Обычно достаточно имени класса или названия окна.

В принципе, основная идея уже должна быть ясна. В настройках глобальных hotkeys/shortcuts для вашего оконного менеджера настраиваем нужную комбинацию на выполнение скрипта.

Как пользоваться скриптами

Для начала надо установить консольные утилиты wmctrl и xdotool:

Дальше надо скачать скрипты и добавить их в $PATH. Я обычно кладу их в

/bin не было, то его надо создать и перезагрузиться (или перелогиниться), иначе

/bin не попадёт в $PATH. Если всё сделано правильно, то скрипты должны быть доступны из консоли и должно работать автодополнение по Tab.

Основной скрипт showwin принимает 2 параметра: первый это regex, по которому мы будем искать нужное окно, а второй параметр это команда, которую нужно выполнить, если нужного окна не нашлось.

Можно попробовать выполнить скрипт, например:

Если Firefox установлен, то его окну должен быть передан фокус. Даже если Firefox не был запущен, он должен был запуститься.

Если получилось, то можно попробовать настроить выполнение команд на комбинации. В настройках глобальных hotkeys/shortcuts добавляем:

  • Alt+F: showwin «Mozilla Firefox$» firefox
  • Alt+D: showwin «Mozilla Firefox (Private Browsing)$» «firefox -private-window»
  • Alt+C: showwin «chromium-browser.Chromium-browser N*» chromium-browser
  • Alt+X: showwin «chromium-browser.Chromium-browser I*» «chromium-browser -incognito»
  • Alt+S: showwin «skype.Skype» skypeforlinux
  • Alt+E: showwin «jetbrains-idea» idea.sh

И т. д. Комбинации клавиш и софта каждый может настроить как ему удобно.
Если все получилось правильно, то по указанным выше комбинациям мы сможем переключаться между окнами простым нажатием клавиш.

Разочарую любителей хрома: обычное окно он инкогнито отличить по выводу wmctrl нельзя, у них одинаковые названия классов и заголовки окна. В предложенных regex символы N* и I* необходимы только для того, чтобы эти регулярки отличались друг от друга и им можно было назначить главными разные окна.

Для сброса главного окна предыдущей комбинации (по факту для regex, которым showwin вызывался в последний раз) нужно вызвать скрипт showwinDetach. У меня этот скрипт назначен на комбинацию клавиш Alt+Backspace.

У скрипта showwin есть ещё одна функция. Когда он вызывается с одним параметром (в данном случае параметр является просто идентификатором), то он вообще не проверяет regex, а все окна считает подходящими. Само по себе это кажется бесполезным, однако таким образом мы можем назначить любое окно главным и быстро переключаться именно к этому окну.

У меня настроены такие комбинации:

  • Alt+1: showwin «CustomKey1»
  • Alt+2: showwin «CustomKey2»
  • Alt+0: showwin «CustomKey0»
  • Alt+Backspace: showwinDetach

Таким образом я могу привязать любые окна к комбинациям Alt+1. Alt+0. Просто нажав Alt+1 я привязываю текущее окно к этой комбинации. Отменить привязку могу нажав Alt+1, а затем Alt+Backspace. Или закрыть окно, так тоже работает.

Читайте также:  Linux arch install snap

Дальше я расскажу немного технических деталей. Их можно не читать, а просто попробовать настроить и посмотреть. Но я бы всё-таки рекомендовал разобраться в чужих скриптах прежде, чем запускать их у себя на компьютере :).

Как различать разные окна одного приложения

В принципе, самый первый пример «wmctrl -a skype.Skype -x» был рабочий и его можно использовать. Но давайте ещё раз глянем на пример с Firefox, в котором открыты 2 окна:

Первое окно — обычный режим, а второе — Private Browsing. Эти окна хотелось бы считать разными приложениями и переключаться в них по разным комбинациям клавиш.

Нужно усложнить скрипт, переключающий окна. Я использовал такое решение: вывести список всех окон, сделать grep по regex, взять первую строку с помощью head, достать первую колонку (это будет id окна) с помощью cut, переключить на окно по id.

Тут должна быть шутка про регулярные выражения и две проблемы, но по факту я не использую ничего сложного. Регулярки мне нужны для того, чтобы можно было указать конец строки (символ «$») и отличать «Mozilla Firefox$» от «Mozilla Firefox (Private Browsing)$».

Команда выглядит примерно так:

Тут уже можно догадаться про вторую особенность скрипта: если grep ничего не выдал, значит нужное приложение не открыто и его нужно запустить, выполнив команду из второго параметра. А потом периодически проверять не открылось ли нужное окно, чтобы передать ему фокус. Не буду заострять на этом внимание, кому надо, тот посмотрит исходники.

Когда окна приложения не различимы

Итак, мы научились передавать фокус окну нужного приложения. Но что, если отрыто больше одного окна у приложения? К какому из них передавать фокус? Скрипт выше передаст, скорее всего, первому открытому окну. Однако, мы бы хотели большей гибкости. Хотелось бы иметь возможность запомнить какое именно окно нам нужно и переключаться именно к этому окну.

Идея была такая: Если мы хотим запомнить для комбинации клавиш какое-то определённое окно, то нужно нажать эту комбинацию тогда, когда нужное окно в фокусе. В дальнейшем при нажатии этой комбинации фокус будет отдаваться именно этому окну. Пока окно не закроется или мы не сделаем сброс для этой комбинации скрипта showwinDetach.

Алгоритм скрипта showwin примерно такой:

  • Проверить, не запомнили ли мы раньше id окна, которому надо передать фокус.
    Если запомнили и такое окно все ещё существует, то передаём фокус ему и выходим.
  • Смотрим какое окно сейчас в фокусе, и если оно подходит под наш запрос, то запомним его id для перехода к нему в дальнейшем и выходим.
  • Переходим хоть к какому-то подходящему окну если оно существует или открываем нужное приложение.

Узнать какое окно сейчас в фокусе можно с помощью консольной утилиты xdotool, преобразовав её вывод в шестнадцатеричный формат:

Что-то запоминать в bash проще всего создавая файлы в виртуальной файловой системе, находящейся в памяти. В Ubuntu такая подключена по умолчанию в /dev/shm/. Про другие дистрибутивы ничего не могу сказать, надеюсь, что подобное тоже есть. Можно посмотреть командой:

Скрипт будет создавать пустые директории в этой папке, вот такие: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Дополнительно при каждом вызове он будет создавать symlink /dev/shm/$USER/showwin/showwin_last на /dev/shm/$USER/showwin/$SEARCH_REGEX. Это понадобится для того, чтобы при необходимости удалить id окна для определённой комбинации с помощью скрипта showwinDetach.

Что можно улучшить

Во-первых скрипты надо настраивать руками. Наверняка, из-за необходимости вникать и делать много руками, многие из вас даже не попробуют настроить систему. Если бы была возможность просто поставить пакет и настроить все проще, то, возможно, это бы обрело некоторую популярность. А там гляди и в стандартные дистрибутивы запилили бы приложение.

И, возможно, проще можно сделать. Если по id окна можно узнать id процесса, его создавшего, а по id процесса узнать какая команда его создала, то можно было бы автоматизировать настройку. На самом деле я не разбирался, возможно ли то, что я написал в этом абзаце. Дело в том, что лично для меня устраивает то, как оно работает сейчас. Но если кому-то кроме меня весь подход покажется удобным и кто-то его улучшит, то я с радостью буду использовать лучшее решение.

Другая проблема, как я уже писал, в том, что в некоторых случаях окна нельзя отличить одно от другого. Я пока наблюдал такое только с incognito в chrome/chromium, но, возможно, где-то ещё есть подобное. В крайнем случае, всегда есть вариант универсальных комбинаций Alt+1. Alt+0. Опять же, я использую Firefox и лично для меня эта проблема не существенна.

А вот существенная для меня проблема в том, что по работе я использую Mac OS и там ничего подобного я настроить не смог. Утилиту wmctrl поставить вроде бы смог, но она на Mac OS толком не работает. Что-то можно сделать с приложением Automator, но оно так тормозит, что пользоваться им не удобно даже когда оно работает. Настроить комбинации клавиш так, чтобы они работали во всех программах я тоже не смог. Если вдруг кто-то придумает решение — буду рад им пользоваться.

Вместо заключения

Получилось неожиданно много слов для такой, казалось бы, простой функциональности. Хотелось донести идею и не перегружать текст, но я пока не придумал как рассказать проще. Возможно, в формате видео было бы лучше, но тут так не любят.

Я немного рассказал о том, что под капотом скрипта и как его настроить. В подробности самого скрипта не вдавался, но он всего 50 строк, разобраться не сложно.

Надеюсь, что кто-то ещё эту идею опробует и, возможно, даже оценит. Про себя могу сказать, что скрипт был написан года 3 назад и мне это ОЧЕНЬ удобно. Настолько удобно, что вызывает серьёзный дискомфорт при работе с чужими компьютерами. И с рабочим макбуком.

Источник

Оцените статью