Linux закрепить окно поверх

Alltray — управление поведением окна в Linux

Недавно я наткнулся на интересую программку — alltray. Как не сложно догадаться по названию,что она позволяет запихнуть в трей (область уведомления) любое приложение. Но это не самое интересное. Программа так же позваляет запускать окна с особыми параметрами, такими как запуск без оформления, запуск в указанном месте, не закрывать даже после нажатия «крестика» и т.п.

Пока что я смог придумать два применения для этой программы: запуск своих собственных «скринлетов» на рабочем столе и просмотр киношек в окне без отвлекающего оформления.

Alltray есть практически во всех стандартных репозиториях большинства дистрибутивов. Например в ubuntu её можно установить в команду:

Рассмотрим запуск терминала на рабочем столе.

В данном примере будет рассмотрен gnome-termnal, но я думаю для остальных эмуляторов настройки будут аналогичные.

Создаём новый профиль (Правка > профили) с именем… ну пуская desk.
И отключаем меню, прокрутку и ставим прозрачный фон.

Теперь достаточно создать примерно следующую строчку в автозапуске:

Однако я рекомендую в начале потренироваться в терминале, так как ключ -s не даст нормально закрыть окно (только либо через системный монитор, либо просто закрыв терминал из которого была запущена команда). Но без ключа -s у меня не получилось нормально задать координаты окна.
Как не сложно догадаться координаты окна зашифрованы под -g +980-0. Первое число отвечает за горизонталь, а второе за вертикаль. Если стоит «+»то отсчёт идёт от левого/верхнего края, а если «-«, то от нижнего/правого края.

Запуск smplayer (или любого другого плеера, просто за место smplayer пишите свой любимый плеер) без оформления окна.

Обязательно! Копируем файл smplayer. А то я уже видел, как на форуме один человек пропустил половину команд из моей статьи, а потом жаловался, что нечего не работает 🙂

Создаём ему замену:

И вставляем следующий код:

Сохраняем, закрываем и делаем скрипт доступным для запуска:

Готово. Теперь можно смотреть любой фильм, например об автомобилях ваз, без всяких лишних рамок.

Кстати, что бы показать или убрать панель с навигацией есть сочетание клавиш Ctrl+C. Закрыть окно можно либо через Alt+F4. Однако, какой смысл в таком оформлении без вывода плеера по верх всех окон? В Smplayer заставить его быть видимым всегда можно средствами самой программы: правый клик по окну > видео > поверх всех окон > всегда наверху.
Другой способ вывести окно по верх всех остальных это нажать Alt+F3 (для KDE) или забить горячую клавишу в

/apps/metacity/windows_keybindings
внизу найти параметр toggle_above а дать ему значение… напримерF3. Однако у меня почему-то именно toggle_above отказался работать… надеюсь этот глюк скоро исправят… или у меня руки выпрямятся.

Источник

Урок #17. Настройки окно и Рабочие столы Linux

Продолжаем рассматривать настройки Linux Mint и давайте посмотрим что можно изменить в интерфейсе окон. Для этого выбираем модуль настроек «Окна» в Центре управления.

Здесь в первую очередь мы можем настроить вид переключения между окнами при нажатии сочетания клавиш Alt+Tab.

По умолчанию появляется лента со значками программ, запущенных в отдельных окнах:

Но мы можем изменить вид отображения, например, на «Timeline 3D» и вместо ленты появится красивая анимация запущенных окон:

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

Следующий раздел — «Строка заголовка». Как понятно из названия, тут мы можем настроить строку заголовка окон.

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

Например, выбрав «Меню» мы добавим кнопку, вызывающую выпадающее меню с некоторыми опциями.

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

Следующая возможная кнопка — «Липкий». Она позволяет окну «прилипать» к границам других окон или к границам экрана, что упрощает позиционирование окон на рабочем столе.

Ну и последняя возможная кнопка — «Затенить». Она позволяет свернуть окно в строку заголовка. Насколько удобные данные опции судить вам. Я пользуюсь значениями по умолчанию.

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

Далее идет настройка списка окон. Здесь все можно оставить как есть и речь здесь идет о рабочих местах или областях, о которых я обещал рассказать и сделаю это через минуту.

Следующий раздел — «Фокусировка окон». Под фокусировкой подразумевается действие, которое делает окно активным, причем окно при этом необязательно будет на переднем плане. По умолчанию это щелчок мышью по окну, что, думаю, является привычным для всех пользователей. Если выставить значение «мышь», то окно будет становиться активным при простом наведении на него указателя мыши.

Поэкспериментируйте и вы увидите как изменяется подсветка окна, указывающая на его активность, но само окно при этом на передний план не помещается. Если установить сейчас галочку в пункте «Автоматически переключаться на окно, получившее фокус», то при наведении указателя мыши на неактивное окно, оно будет перемещаться на передний план. Не думаю, что это удобно и что в этом подразделе настроек нужно что-то изменять, в общем-то как и в последнем подразделе, отвечающем за перемещение или изменение размера окон. Здесь указывается клавиша, при нажатии которой можно перемещать окно или изменять его размеры.

Читайте также:  Living room glass windows

Не уверен, что кто-то этим пользуется, но по факту это позволяет перетаскивать окно не только захватив его за строку заголовка, но и за любую его область. Для этого нужно нажать клавишу, указанную здесь (по умолчанию это клавиша Alt) и перемещать окно, «ухватившись» левой кнопкой мыши за любую его область, при этом правая кнопка мыши с этой же клавишей позволит изменить размеры окна.

На этом с настройками окон заканчиваю и расскажу, как и обещал, о рабочих местах или виртуальных рабочих столах.

Для всего семейства операционный систем Линукс характерно наличие так называемых виртуальных рабочих столов. Для пользователей Windows это может показаться непривычным и непонятным, но на самом деле штука очень удобная. В Linux Mint виртуальные рабочие столы называют рабочими областями (Workspaces). По умолчанию их два, хотя это количество можно увеличить.

По сути рабочие области — это виртуальные экраны, с которыми вы можете работать одновременно. Но возникает вполне закономерный вопрос — а зачем мне два, три или восемь рабочих столов, ведь и на одном все окна помещаются?

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

Конечно, тоже самое можно сделать и на одном рабочем столе, просто поискать значок программы в управляющей панели или воспользоваться сочетанием Alt+Tab, но все же виртуальный рабочий стол несколько удобнее, хотя это мое субъективное мнение и вы можете составить свое, опробовав эту возможность на деле.

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

По сути эта кнопка является стандартным апплетом Windows Quick List и при желании вы можете поменять ее месторасположение на управляющей панели или совсем удалить. О том как это сделать я рассказал в прошлом видео.

Также хочу обратить ваше внимание на то, что ранее нами рассмотренное сочетание клавиш Alt+Tab позволяет переключаться между приложениями в одной рабочей области. Поэтому для выбора окна, расположенного на другом рабочем столе, стоит воспользоваться либо сочетанием Ctrl+Alt+Стрелка вправо/влево, либо кнопкой «Все окна», расположенной в панели управления.

Но как создать еще одну рабочую область? Ведь как я сказал ранее, по умолчанию их только две. Для этого нажимаем сочетание клавиш Ctrl+Alt+Стрелка вверх и появляются все рабочие области в виде значков — это так называемый режим экспозиции.

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

Чтобы выйти из режима экспозиции достаточно выбрать рабочую область мышью или нажать сочетание клавиш Ctrl+Alt+Стрелка вниз. Кстати это же сочетание клавиш позволяет вам увидеть все запущенные в активной рабочей области окна, что можно использовать также как и сочетание Alt+Tab.

У рабочих областей есть одноименный модуль в «Центре управления», но особого смысла менять здесь что-то я не вижу. Хотя здесь можно изменить отображение рабочих областей в режиме экспонирования.

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

Ну и в заключении вернемся к меню, появляющемся по умолчанию при щелчке правой кнопкой мыши по строке заголовка любого окна. Здесь есть два пункта, о которых я ранее не рассказал.

Первый пункт «Всегда на видимом рабочем месте» заставит данное окно перемещаться на другие рабочие столы вместе с вами. То есть вы будете переключаться между рабочими областями и окно будет следовать за вами.

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

Источник

Альтернативное управление окнами в 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

На самом деле, если подумать, то мы не так много программ используем повседневно. Браузер, терминал, 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. Или закрыть окно, так тоже работает.

Читайте также:  Getting git on linux

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

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

В принципе, самый первый пример «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 назад и мне это ОЧЕНЬ удобно. Настолько удобно, что вызывает серьёзный дискомфорт при работе с чужими компьютерами. И с рабочим макбуком.

Источник

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