Разрешить события мыши проходить через терминал

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

Я не пробовал ничего кроме поиска в Google, потому что у меня нет никакого опыта с этим типом вещей.

РЕДАКТИРОВАТЬ: "возможный дубликат" вопрос не отвечает на мой вопрос, потому что он в основном просто делает скрипт для более быстрого переключения окна alt + tab. У меня нет проблем с использованием alt + tab для переключения окон, я просто предпочел бы вообще не переключать окна. Я хочу, чтобы моя мышь взаимодействовала с браузером, а клавиатура - с терминалом.

2 ответа

Решение

Почему это невозможно

То, что вы спрашиваете, по сути невозможно. Чтобы упростить объяснение, существует два типа графических рабочих столов: стекирование и разбиение на листы. Unity - это пример стекирования рабочего стола, где у вас есть стек окон (что-то вроде стека лотков для кафетерия), где текущее активное окно является верхним.

Поведение мыши было определено в X11 таким образом, что нажатие на окно переносит его на вершину стека. В то время как есть способы держать окно ниже других (особенно с wmctrl), нет способа щелкнуть через окно, не сфокусировав его. К сожалению, это не подходит для подстройки - если вы сами не хотите создавать какую-то форму нового слоя для GUI, и до сих пор я не слышал ни о каком таком проекте.

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

Что-то вроде обходного пути

Это можно сделать: установить прозрачное окно терминала на минимальный размер, установить его как "всегда сверху" и нажать * что-нибудь вокруг самого окна.

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

Возможные альтернативы

  • Есть выпадающие терминалы, такие как Guake, У вас может быть выпадающий терминал, связанный с клавишей F12, с окном, которое сохраняет положение сверху, и вы можете нажать на что-нибудь вокруг него
  • Используйте разделенный экран с терминалом и другим желаемым окном, связанным вместе

Guake пример

Встречный вопрос:

Вы хотите "готовое" решение для этого или планируете написать собственную программу на C?

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

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

Напишите программу с большим окном (покрывающим (почти)) весь экран) со 100% -ной прозрачностью. (К сожалению, я никогда не работал с прозрачностью, поэтому я не знаю, действительно ли это работает.)

Для этого используйте низкоуровневую библиотеку X11 (libX11) и не используйте высокоуровневый API (Gnome и т. Д.).

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

Используйте API XSendEvent () для эмуляции событий клавиатуры и мыши в консоли и браузере...

К сожалению, это будет не так просто, как кажется. Особенно эмулировать события мыши в браузере будет непросто!

Другие вопросы по тегам