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

Обновлено: 14.05.2024

Операционными системами, которые основаны на Linux и Unix и работают в текстовом режиме, очень легко управлять. Учитывая то, как работает подсистема ввода-вывода Unix, программам, ожидающих на входе то, что вводится с клавиатуры, можно передавать любые данные. А то, что программы обычно выдают на экран, можно перехватить и подвергнуть дальнейшей обработке. Вся операционная система устроена именно так. А вот графические программы, использующие возможности X11, это — уже совсем другое дело. Можно ли управлять графическими программами так же, как управляют программами с текстовым интерфейсом? Точный ответ на этот вопрос зависит от того, что именно понимать под «управлением программами». Но если не вдаваться в детали, то на этот вопрос можно дать положительный ответ.

Как это обычно бывает в Linux и Unix, существует множество способов решения одной и той же задачи. И наша задача — не исключение. Если вам нужны средства для точного управления программами, то можно сказать, что добиться этого можно с помощью утилит, задействующих специальный механизм, называемый D-Bus. Этот механизм позволяет программам так оформлять данные и методы, что ими могут пользоваться другие программы. В идеальном мире программы, которыми нужно управлять, применяют D-Bus, но в реальности всё далеко не так просто. Поэтому сегодня мы поговорим о том, как управлять самыми разными графическими программами в Linux.


Существует несколько утилит, которые позволяют каким-то способом управлять X-окнами. Например, есть инструмент xdo, о котором вы, наверняка слышите не особенно часто. Более популярным средством из этой сферы является утилита xdotool, о которой я расскажу. Кроме того, похожим функционалом обладает wmctrl. Есть ещё программа autokey, которая родственна популярной Windows-программе AutoHotKey.

Утилита xdotool

Пожалуй, утилита xdotool является самой популярной программой, используемой в тех случаях, когда надо управлять приложениями с графическим интерфейсом. Это — нечто вроде «швейцарского ножа» для системы X. Но эта утилита использует достаточно сложные конструкции командной строки. Это, вероятно, является следствием того, что она очень много всего умеет. Я чаще всего прибегал к её помощи в ситуациях, когда мне надо было организовать перемещение окон и изменение их размеров. Но она умеет, например, имитировать ввод данных с клавиатуры и воспроизводить действия, которые обычно выполняют с помощью мыши. Она позволяет привязывать выполнение неких действий к событиям, имеющим отношение к перемещениям мыши и к событиям, связанным с окнами программ.

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

Рассмотрим следующий пример:


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

Кстати, надо отметить, что для того чтобы пользоваться некоторыми из возможностей xdotool, нужно чтобы было установлено расширение X-сервера XTest. Я обычно обнаруживаю это расширение уже установленным. Но если вы столкнулись с тем, что у вас что-то не работает — проверьте X-сервер и узнайте о том, загружено ли это расширение.

Утилита wmctrl

Программа wmctrl обладает возможностями, похожими на возможности xdotool, но она, в основном, взаимодействует с оконным менеджером. Единственная проблема тут заключается в том, что она использует стандартный интерфейс к оконному менеджеру. Не все оконные менеджеры поддерживают полный набор возможностей wmctrl. Это, кстати, одна из тех особенностей Linux, которая является причиной того, что распространение программ для этой ОС может превратиться в настоящее приключение. Нет двух одинаковых систем, а некоторые системы даже и близко друг на друга не похожи.

Утилита wmctrl особенно хороша для решения таких задач, как переключение рабочих столов и максимизация окон. Но она способна и на многое из того, что умеет xdotool.

Использование большого монитора

Я недавно поменял свою конструкцию из трёх мониторов на очень большой 4K-монитор. Это 43-дюймовый монстр обладает разрешением в 3840x2160 пикселей. Всё это очень хорошо, но мне не хватало возможности поместить окно одной программы на один монитор, а окно другой (или третьей) программы — на другой монитор.

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

Работа на большом мониторе

Я сразу подумал о том, чтобы использовать для решения этой задачи xdotool и привязать соответствующие действия к клавиатурным сокращениям, используя возможности KDE. Например, сочетание клавиш CTRL+ALT+1 могло бы закреплять текущее окно в правом верхнем углу экрана, а сочетание CTRL+ALT+0 могло бы максимизировать окно. Сочетание CTRL+ALT+6 позволяло бы окну занять всю правую половину экрана, а сочетание CTRL+ALT+8 должно было размещать окно в верхней половине экрана.

Вот как выглядела моя первая попытка создания команды, соответствующей клавиатурному сокращению CTRL+ALT+1 :


Тут реализована следующая идея: находим текущее окно, перемещаем его в позицию 0,0, а потом меняем его размер так, чтобы оно заняло бы четверть экрана. Числа, жёстко заданные в коде, это, конечно, не очень хорошо. Но если речь идёт о работе на одном компьютере, то это вполне допустимо. Размер окна, если вам так удобнее, можно установить и по-другому. Например — в виде 50% 50% . Причём, этот параметр можно настроить с использованием подобного значения, а вот в других макросах, где окно перед изменением его размера перемещается в позицию, отличающуюся от 0,0, всё равно придётся использовать жёстко заданные значения.

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

Но проблемы на этом не кончались. Если максимизировать окно, то значения, касающиеся размеров и позиции окна, ни на что не влияют. Вот как эту проблему можно решить с привлечением wmctrl:


Тут, с помощью wmctrl, отключается максимизация активного окна, а после этого в дело вступает xdotool. Правда, если хочется использовать исключительно wmctrl, то можно применить такую команду:


В опции -e задаются параметры перемещения окна. Причём, обратите внимание на то, что первый 0 — это не опечатка. Значение этого параметра позволяет задавать свойство окна «gravity», которое обычно устанавливается в 0. Следующие четыре числа — это позиция и размер окна. Но тут можно заметить то, что если xdotool перемещает в заданную позицию верхний левый угол окна, wmctrl перемещает верхний левый угол внутреннего содержимого окна (сюда не входят элементы оформления окна). Это приводит к различным результатам.


Два окна на экране

Конечно, можно написать простой bash-скрипт, предназначенный для решения всех этих задач. Можно предусмотреть в нём механизмы, позволяющие программе адаптироваться к изменению размеров экрана без вмешательства пользователя в код программы. В скрипте можно даже сделать так, чтобы, например, окна не перекрывались бы, можно и воспользоваться другими специальными эффектами.

Вот пример подобного скрипта:


Клавиатурные макросы, в результате, можно использовать для вызова этого скрипта с тегом вроде ne (Northeast, северо-восток) или center (центр), устанавливая таким образом позицию окна. Изменения легче вносить в один скрипт, а не редактировать несколько клавиатурных макросов.

Итоги

В сериале «Звёздный путь» (в настоящем, с Уильямом Шетнером) есть момент, когда Кирк говорит кому-то о том, что нужно изучить то, как всё работает на космическом корабле. ОС семейства 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 отказался работать… надеюсь этот глюк скоро исправят… или у меня руки выпрямятся.

P.S.: Боле информации о ключах alltray можно получить, выполнив команду:

P.P.S: Для запуска приложение с принудительным значком в трее достаточно запустить: alltray имя_программы.


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

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

unity --replace

2. В Убунту Линукс есть очень полезная "фишка". Каждое запущенное окно, будь то папка, будь программа можно поместить "Поверх всех окон". Для этого достаточно кликнуть правой кнопкой мыши на верхней панели окна и в выпадающем меню выбрать "Поверх всех". Я к примеру применяю эту полезность во время просмотра фильма, в небольшом окне плеера, в то время когда работаю с сайтом или в другом приложении. Если вы используете в Убунту виртуальные рабочие столы, то тогда полезным будет отметить еще пункт "Всегда на видимом рабочем месте". Тогда на какой бы рабочий стол вы не перешли, ваше нужное приложение будет видимым.


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

4. Если вы используете Unity, а вам иногда нужно запустить несколько копий одного приложения, то помогут горячие клавиши. Нажмите SHIFT + SUPER( кнопка с флажком Windows), и цифру от 0 до 9, которые появятся на иконках приложений Unity.


5. Используйте всю мощь и удобство виртуальных рабочих столов. Когда у вас запущенно очень много приложений, то виртуальные рабочие столы будут очень кстати. Распределите равномерно ваши запущенные приложения между столами и у вас всегда будет порядок!

6. Когда запущенно много приложений и документов, то очень спасает комбинация горячих клавиш ALT — TAB. Нажав и удерживая кнопку ALT, а потом кратковременно нажав TAB, перед вами открывается симпатичная панелька, на которой отображены все открытые программы и документы. Из нее вы очень легко сможете перемещаться между приложениями, кратковременно нажимая на TAB, которые в данный момент работают.

7. Если Вы настроили программу не так, как Вам бы хотелось, но не знаете как все вернуть назад, то есть одна хитрость. Заходим в Домашнюю папку, включаем в Nautilus просмотр скрытых файлов и ищем папку .config. Именно в ней хранятся все настройки для большинства программ. Находите тут нужную папку, обычно это папка с названием программы, и просто удаляете ее. Теперь повторно запустите нужную программу и все настройки в ней сбросятся в дефолтные. Если вдруг в папке .config не оказалось нужной папки, то она должна быть в Домашней папке. Это конечно координальный метод и к нему нужно прибегать в крайнем случае. Перед удалением, обязательно сделайте копию удаляемой папки.

пин-на-рабочий стол

В то время как я использую свой Ubuntu (Linux), одна вещь, которая мне показалась удобной и полезной, это возможность заблокировать приложение и держать его «всегда поверх всех остальных окон».

Это встроенная функция Linux, к которой можно легко получить доступ, щелкнув правой кнопкой мыши и выбрав «Всегда сверху» в контекстном меню. Однако, когда дело доходит до Windows (и даже Mac), я удивляюсь, что эта небольшая, но полезная функция доступна не во всех версиях операционной системы.

Вот идет Deskpins.

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

Монтаж

Установка проста. Загрузите программное обеспечение (размером всего 96 КБ) и запустите файл .exe, чтобы установить его в своей системе. Это не должно занять больше минуты, даже если вы используете его на старой системе (например, Windows 95). На его веб-сайте указано, что он совместим с Win XP, но я попробовал его на Windows 7, и он работает без нареканий.

использование

После запуска приложения оно должно появиться в виде значка на панели задач.

deskpins-система лотки

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

deskpins в действии

Варианты конфигурации

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

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

deskpins цвета

Теперь, если у вас есть конкретное приложение, в котором вы хотите, чтобы оно всегда было «сверху», вместо того, чтобы каждый раз активировать рабочие столы, вы можете создать правило Autopin, чтобы приложение автоматически прикреплялось к рабочему столу каждый раз, когда оно запущен. Это, безусловно, одна изящная функция, которая всегда будет полезна.

deskpins-AutoPIN

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

deskpins-горячая клавиша

Заключение

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

Это определенно не единственное приложение, которое может сделать приложение «всегда на высоте». Если вы пробовали какие-либо другие приложения, которые выполняют ту же функцию, поделитесь им с нами в комментариях.

На противоположном конце этой карты производительности Варун написал о 5 лучших настольных приложениях для многозадачности.

пин-на-рабочий стол

В то время как я использую свой Ubuntu (Linux), одна вещь, которая мне показалась удобной и полезной, это возможность заблокировать приложение и держать его «всегда поверх всех остальных окон».

Это встроенная функция Linux, к которой можно легко получить доступ, щелкнув правой кнопкой мыши и выбрав «Всегда сверху» в контекстном меню. Однако, когда дело доходит до Windows (и даже Mac), я удивляюсь, что эта небольшая, но полезная функция доступна не во всех версиях операционной системы.

Вот идет Deskpins.

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

Монтаж

Установка проста. Загрузите программное обеспечение (размером всего 96 КБ) и запустите файл .exe, чтобы установить его в своей системе. Это не должно занять больше минуты, даже если вы используете его в старой системе (например, Windows 95). На его веб-сайте указано, что он совместим с Win XP, но я попробовал его на Windows 7, и он работает без нареканий.

использование

После запуска приложения оно должно появиться в виде значка на панели задач.

deskpins-система лотки

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

deskpins в действии

Варианты конфигурации

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

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

deskpins цвета

Теперь, если у вас есть конкретное приложение, в котором вы хотите, чтобы оно всегда было «сверху», вместо того, чтобы каждый раз активировать рабочие столы, вы можете создать правило Autopin, чтобы приложение автоматически прикреплялось к рабочему столу каждый раз, когда оно запущен. Это, безусловно, одна изящная функция, которая всегда будет полезна.

deskpins-AutoPIN

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

deskpins-горячая клавиша

Заключение

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

Это определенно не единственное приложение, которое может сделать приложение «всегда на высоте». Если вы пробовали какие-либо другие приложения, которые выполняют ту же функцию, поделитесь им с нами в комментариях.

На противоположном конце этой карты производительности Варун написал о 5 лучших настольных приложениях для многозадачности.

Читайте также: