Як створити ярлик, який виконує команду xdotool для імітації натискання клавіш?


11

Я намагаюся імітувати натискання медіа-клавіш за допомогою спеціального ярлика.

Поки що мені вдалося домогтися необхідного моделювання за допомогою команди:

xdotool key XF86AudioPlay

Він прекрасно працює, він призупиняє або запускає музичний плеєр кожного разу, коли він працює.

Проблема виникає при спробі запустити її як ярлик.

Спочатку я спробував запустити псевдонім за допомогою користувацького ярлика, але це не вийшло.

Як пояснено з цього питання :

Команди, що виконуються за допомогою прив'язки клавіатури, не аналізуються через оболонку. Ваша найкраща ставка - створити у своєму домашньому кабінеті бін каталогів.

Далі я створив запропонований сценарій і назвав його simplay:

#!/bin/sh
xdotool key XF86AudioPlay

Він розташований у папці бін, яка є частиною PATH, це чудово працює і може працювати з будь-якого місця.

Під час спроби створити спеціальний ярлик я не зміг змусити його виконати, конфігурація така:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

Після пошуку трохи більше я знайшов інший спосіб виконання ярлика:

gnome-terminal -e simplay

Я спробував це на терміналі і помітив, що при його виконанні він швидко відкриє нове вікно терміналу, виконає дочірній процес, призупинивши музику і негайно закривши вікно.

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

Як я можу вирішити цю проблему відповідно до ваших знань?

Відповіді:


12

Питання

Ваш ярлик виконується одночасно з вашим імітованим натисканням клавіші

Якщо ви запускаєте команду, імітуючи натискання клавіші, що викликається ... іншим натисканням клавіші, ви будете імітувати третє натискання клавіші, що є комбінацією обох :)

Вирішувати

Вам потрібно не допустити запуск ярлика одночасно з імітованим натисканням клавіші, іншими словами, додати затримку:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

Додайте цю команду до ярлика, і вона повинна працювати.

Примітка

Звичайно, ви можете трохи пограти зі значенням sleep 1, щоб встановити найкраще значення, яке відчуває себе комфортно, залежно від того, наскільки "липкою" комбінацією натиснуто. sleep 0.5це може дуже добре зробити, і зробити ярлик швидше діяти.


8

Ви також можете використовувати команду безпосередньо у визначенні ярлика, тому вам не потрібно створювати для неї окремий сценарій.

Замість використання способу "сну 1" ви можете використовувати --clearmodifiersпрапор, тобто ваш власний ярлик виглядатиме так:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

Для мене це працює, коли відображати ярлики до Super+F9.


Чи повинен фрагмент коду вище бути файлом? Якщо так, чи потрібно вам помістити його в певне місце чи виконати певну команду для реалізації ярлика?
JellicleCat

1
Фрагмент - це лише опис ярлика, який я використав. В Ubuntu ви можете створити власні ярлики в налаштуваннях клавіатури. Однак я з тих пір оновив свою версію Ubuntu і тепер можу безпосередньо зіставити дію "Грати (або відтворити / призупинити)" на ключову комбінацію, яку я вибрав, що виявляється більш надійною, ніж використання xdotool.
січня

Навіть краще, ніж --clearmodifiers - це створити "клавішу" для гарячої клавіші, яку ви використовуєте для виклику сценарію. Невеликий недолік полягає в тому, що вам потрібно оновити сценарій, якщо ви змінили гарячу клавішу для виклику сценарію.
ванадій

1

Альтернативою (для ефективності sleep 1 && xdotool ...Snappier ) для використання є використання xdotool для звільнення клавіш швидкого доступу. Трохи довше, але ви також можете використовувати

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.