Разрешить события мыши проходить через терминал
Я работаю на ноутбуке с небольшим экраном, и у меня нет доступа к нескольким мониторам на этой машине, как на работе. Я настроил свой терминал с прозрачностью, чтобы я мог видеть все, что я разрабатываю в браузере за терминалом, но я хотел бы иметь возможность щелкать через терминал и взаимодействовать с браузером напрямую.
Я не пробовал ничего кроме поиска в Google, потому что у меня нет никакого опыта с этим типом вещей.
РЕДАКТИРОВАТЬ: "возможный дубликат" вопрос не отвечает на мой вопрос, потому что он в основном просто делает скрипт для более быстрого переключения окна alt + tab. У меня нет проблем с использованием alt + tab для переключения окон, я просто предпочел бы вообще не переключать окна. Я хочу, чтобы моя мышь взаимодействовала с браузером, а клавиатура - с терминалом.
2 ответа
Почему это невозможно
То, что вы спрашиваете, по сути невозможно. Чтобы упростить объяснение, существует два типа графических рабочих столов: стекирование и разбиение на листы. Unity - это пример стекирования рабочего стола, где у вас есть стек окон (что-то вроде стека лотков для кафетерия), где текущее активное окно является верхним.
Поведение мыши было определено в X11 таким образом, что нажатие на окно переносит его на вершину стека. В то время как есть способы держать окно ниже других (особенно с wmctrl
), нет способа щелкнуть через окно, не сфокусировав его. К сожалению, это не подходит для подстройки - если вы сами не хотите создавать какую-то форму нового слоя для GUI, и до сих пор я не слышал ни о каком таком проекте.
Если вы попросите об этом, я даже могу назначить награду за этот вопрос, но могу поспорить, что ответа не будет, который точно соответствует вашим требованиям.
Что-то вроде обходного пути
Это можно сделать: установить прозрачное окно терминала на минимальный размер, установить его как "всегда сверху" и нажать * что-нибудь вокруг самого окна.
На этом скриншоте вы можете увидеть два подхода к этому: один по умолчанию, щелкните правой кнопкой мыши на границе окна и через wmctrl
команда. Последний может позволить подход сценариев к этому, но основная предпосылка та же - вы должны нажать на что-нибудь вокруг самого teminal.
Возможные альтернативы
- Есть выпадающие терминалы, такие как
Guake
, У вас может быть выпадающий терминал, связанный с клавишей F12, с окном, которое сохраняет положение сверху, и вы можете нажать на что-нибудь вокруг него - Используйте разделенный экран с терминалом и другим желаемым окном, связанным вместе
Guake пример
Встречный вопрос:
Вы хотите "готовое" решение для этого или планируете написать собственную программу на C?
Если вам нужно "готовое к использованию" решение, я думаю, что вы не найдете ни одного: мало кому нужно что-то подобное, поэтому я не думаю, что кто-либо реализовывал такую программу до сих пор.
Если вы хотите написать такую программу самостоятельно, я бы попробовал сделать следующее:
Напишите программу с большим окном (покрывающим (почти)) весь экран) со 100% -ной прозрачностью. (К сожалению, я никогда не работал с прозрачностью, поэтому я не знаю, действительно ли это работает.)
Для этого используйте низкоуровневую библиотеку X11 (libX11) и не используйте высокоуровневый API (Gnome и т. Д.).
Поскольку это окно находится на переднем плане, оно будет получать всю информацию о клавиатуре и мыши.
Используйте API XSendEvent () для эмуляции событий клавиатуры и мыши в консоли и браузере...
К сожалению, это будет не так просто, как кажется. Особенно эмулировать события мыши в браузере будет непросто!