Как изменить привязки клавиш на основе того, какое окно сфокусировано?

У меня есть эти строки в моей конфигурации i3 прямо сейчас:

# Play/pause, prev, next bindcode 172 exec "/opt/playerctl/bin/playerctl play-pause" bindcode 173 exec "/opt/playerctl/bin/playerctl previous" bindcode 171 exec "/opt/playerctl/bin/playerctl next" 

Это приводит к тому, что кнопки мультимедиа на моей клавиатуре воспроизводят / приостанавливают аудиоплееры, поддерживаемые playerctl, например Spotify.

  • Как устанавливаются шрифты по умолчанию для таких программ, как FireFox?
  • Как отключить часть экрана в X.Org
  • i3 - совместное использование рабочего пространства на нескольких мониторах
  • Получение дерева i3
  • Что начинается с i3 при запуске startx?
  • Как получить установленное приложение для обнаружения rofi?
  • Проблема в том, что кнопка воспроизведения / паузы теперь больше не работает в моем видеопроигрывателе (SMPlayer).

    Возможно ли, чтобы привязки клавиш вступили в силу только тогда, когда сфокусированное окно не является SMPlayer?


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

    Это возможно?

  • Максимизация окна (Keepassx2) из ​​командной строки
  • Как заставить ноутбук спящий режим, когда он достигнет некоторого низкого уровня заряда батареи?
  • Как мне перейти с gnome на i3 Debian 8
  • Как сбросить настройки запуска приложения dmenu в i3
  • Проблемы с X и xrandr на Debian
  • i3 включение numlock
  • One Solution collect form web for “Как изменить привязки клавиш на основе того, какое окно сфокусировано?”

    Вы можете попробовать это. Не забудьте заменить username своим реальным именем пользователя Linux в следующем. По какой-то причине использование ~ вместо home/username не сработало для меня.

    Используйте эти строки в конфигурации i3:

     # Play/pause, prev, next bindcode 172 exec /home/username/.i3/play.sh play-pause bindcode 173 exec /home/username/.i3/play.sh previous bindcode 171 exec /home/username/.i3/play.sh next 

    Вставьте следующее в файл с именем /home/username/.i3/play.sh

     cmd="$1" id=$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}') curr_title=$(xprop -id $id | awk '/_NET_WM_NAME/{$1=$2="";print}' | cut -d'"' -f2) if [[ "$curr_title" != "SMPlayer"* ]]; then /opt/playerctl/bin/playerctl "$cmd" fi 

    Возможно, вам придется отрегулировать часть «SMPlayer» * в зависимости от точного названия, которое имеет окно – у меня нет опыта работы с этой программой. Вы можете добавить предложение else для запуска другой программы, когда SMPlayer запущен, если хотите.

    Надеюсь это поможет.

    Linux и Unix - лучшая ОС в мире.