Я в настоящее время добавляю несколько пользовательских ярлыков.
Я перестал работать при раскрытии минимизированного окна Rhythmbox. Я использую wmctrl в сценарии оболочки, вижу ниже для этой задачи. Когда я нажимаю ключевую комбинацию, ничего не происходит (визуально). Разоблачающий Firefox, например, с помощью адаптированной версии сценария оболочки ниже работ без любых проблем; почему Rhythmbox не ведет себя то же?
Упомянутый сценарий оболочки:
sh -c "if pgrep -x rhythmbox > /dev/null; then wmctrl -a rhythmbox; else rhythmbox; fi"
Важное редактирование:
По-видимому, мой сценарий работает теперь - не изменив что-либо об этом. Однако я работал killall rhythmbox
. После того, как тот мой сценарий оболочки работал как ожидалось. Я думаю, просто добавив фиксацию вместо того, чтобы удалить вопрос, я, возможно, могу помочь кому-то спотыкающемуся через ту же проблему. Если Вы думаете, что знаете, почему это произошло, очень чувствуйте себя свободно для совместного использования theroy.
Еще одно редактирование:
Ничего себе, хорошо... Буквально спустя секунды после добавления, которые в последний раз редактируют, я пытался использовать повторенный ярлык, и он не работал. Я уничтожил процесс, и все работало снова - then
И else
тело. После нажатия в и из нескольких других окон, это прекратило работать снова. После того, как я работал killall rhythmbox
и наблюдение она работать снова отлично, даже после того, как мне не удалось воспроизвести ошибку, я пришел к выводу, что она действует довольно случайная. Ну, псевдослучайный, конечно. Если Вы хотите попробовать его за себя, Вы знаете, как сделать это. Можно получить wmctrl путем выполнения sudo apt install wmctrl
. Я использую версию 1.07 его на Ubuntu 16.04 LTS и очень смущенный.
Последнее редактирование (никогда не говорят в последний раз):
Я на самом деле заставил Firefox показывать себя теперь после нажатия сочетания клавиш. Это прохладно, просто не, что я хочу. Я выпью большую чашку кофе теперь и сделаю что-то еще, ничего себе.
Проблема - то, что Вы определяете окно его именем, с помощью wmctrl -a
. От man wmctrl
:
-a <WIN>
Switch to the desktop containing the window <WIN>, raise the window, and give it focus.
<WIN>
строка идентификации на имя окна.
Особенно в Вашем случае, это, вероятно, вызовет ошибки, так как Rhythmbox меняет имя окна, в зависимости от песни. Необходимо определить окно или его классом окна или его id
Последний может быть сделан с помощью:
wmctrl -ia
где опция -i
обозначает идентификатор окна:
-i Interpret window arguments (<WIN>) as a numeric value rather
than a string name for the window. If the numeric value starts
with the prefix '0x' it is assumed to be a hexadecimal number.
И идентификатор окна и pid, которому принадлежит окно, могут быть получены из списка окна, названного командой:
wmctrl -lp
Надежная команда для повышения нового окна от, например, Rhythmbox затем:
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep rhythmbox)" | tail -1 | awk '{ print $1 }')"
wmctrl -lp
списки все окна, включая их pids. Важное свойство команды - то, что она перечисляет окна в порядке, они были созданы.
Поэтому:
wmctrl -lp | grep "$(pgrep rhythmbox)" | tail -1 | awk '{ print $1 }'
будет:
перечислите все окна + pids, они принадлежат:
wmctrl -lp
найдите тех, принадлежащими rhythmbox:
grep "$(pgrep rhythmbox)"
найдите последний (который является также последним созданным):
tail -1
извлеките первую строку в строке (который является окном - идентификатор):
awk '{ print $1 }'
Команда:
wmctrl -ia
затем повысит новое окно Rhythmbox его идентификатором.
По причинам удобства, и предотвратить проблемы с кавычками, я сделал бы крошечный сценарий из него с командой и выполнил бы его от ярлыка:
#!/bin/bash
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep rhythmbox)" | tail -1 | awk '{ print $1 }')"
Сделайте это исполняемым файлом и Добавьте shortut ключ: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
/path/to/script.sh
Похоже на использование команды/сценария для нескольких приложений. Вместо того, чтобы делать отдельные сценарии для каждого приложения, можно привести аргумент приложения сценарию:
#!/bin/bash
app=$(pgrep $1)
wmctrl -ia "$(wmctrl -lp | grep "$app" | tail -1 | awk '{ print $1 }')"
Затем
/path/to/script.sh gedit
повысит последний раз созданный gedit
окно, в то время как
/path/to/script.sh rhythmbox
повысит последний раз созданный rhythmbox
окно, и так далее.