Перемещение плавающих окон с помощью горячих клавиш.

Вопрос или проблема

В данный момент я использую установку Linux Mint 22 Cinnamon 6.2.9, которая установлена пару дней назад, и я хочу использовать некоторые функции, которые у меня были в предыдущем оконном менеджере с тайлингом в XFCE. В частности, я хочу перемещать плавающие окна с помощью сочетаний клавиш. Чтобы сделать это, я написал краткий Bash скрипт:

#!/bin/sh
win_id=`xdotool getactivewindow`

u=`xwininfo -id $win_id | grep 'Absolute upper-left X' | cut -c27-35`
v=`xwininfo -id $win_id | grep 'Absolute upper-left Y' | cut -c27-35`

(( u+=150, v=$v-86 ))

xdotool getactivewindow windowmove $u $v

Он предназначен для перемещения плавающего окна на 150 пикселей по оси X (86 пикселей, которые я вычитаю из оси Y, — это верхняя часть декорации окна, которая учитывается программой xwininfo, но не программой windowmove.

Когда я выполняю его в терминале, он работает нормально, но когда я пытаюсь привязать его к какому-нибудь сочетанию клавиш (например, Super + G), выбранное окно перемещается только на +86 пикселей по оси Y.

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

Ответ или решение

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

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

1. Анализ проблемы:

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

Потенциальные точки отказа:

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

2. Рекомендации по решению:

Проверка доступа:

  • Убедитесь, что в скрипте также заданы права на выполнение (chmod +x script.sh).

Отладка и диагностика:

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

Изменение скрипта:

#!/bin/bash
win_id=$(xdotool getactivewindow)

coords=$(xwininfo -id $win_id)
u=$(echo "$coords" | grep 'Absolute upper-left X' | awk '{print $NF}')
v=$(echo "$coords" | grep 'Absolute upper-left Y' | awk '{print $NF}')

(( u+=150 ))
(( v-=86 ))

xdotool windowmove $win_id $u $v

# Логирование
echo "Window ID: $win_id, New X: $u, New Y: $v" >> ~/window_move.log

Тестирование в окружении:

  • Проверьте, выполняется ли скрипт через другой менеджер окон (например, gnome-keybinding-properties) для изоляции проблемы.

Использование команды nohup:

  • Можно попробовать запустить скрипт через nohup для предотвращения отключения ввода/вывода.

3. Заключение:

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

Если у вас остались вопросы, пожалуйста, не стесняйтесь обращаться за более детальной помощью.

Оцените материал
Добавить комментарий

Капча загружается...