Я хочу смоделировать ввод с клавиатуры, чтобы я мог «вставить» содержимое моего буфера обмена в приложения, которые этого не разрешают (например, удаленный KVM). Прямо сейчас я пытаюсь использовать xdotool
и xclip
:
xdotool type "$(xclip -o)"
Эта команда работает, если я остаюсь в окне терминала, и сама набираю эту команду. Когда я запускаю команду, он печатает содержимое моего буфера обмена. Моя цель - привязать эту команду к горячей клавише, чтобы она работала в любом приложении.
Если я использую эту горячую клавишу, неожиданное поведение происходит с любым окном, имеющим фокус. например мой размер окна терминала уменьшается (на самом деле это несколько забавно). Аналогичные результаты возникают, если я сохраняю его как скрипт и вызываю скрипт, или если я инкапсулирую команду с помощью sh -c
. Как я могу на практике использовать мощную команду xdotool type
?
У вас есть две проблемы с этой командой. Во-первых, вам нужно убедиться, что мета-клавиши в привязке не нажимаются при попытке запустить команду. Во-вторых, по умолчанию xclip выбирает буфер XA_Primary
, а не XA_CLIPBOARD
. Поэтому вы должны передать clipboard
в качестве параметра выбора для xclip. Измените команду горячей клавиши на следующее:
sh -c 'sleep 0.5; xdotool type "$(xclip -o -selection clipboard)"'
xdotool создает нажатия клавиш, и он не отпускает клавишу Ctrl для вас ... Самое простое решение - добавить задержку, например sleep 0.5
, подождать полсекунды и уверен, что вы отпустите Ctrl достаточно быстро.
sh -c 'xdotool type --clearmodifiers - "$ (xclip -o -selection clipboard)"'
"- clearmodifiers" избавляется от CTRL / ALT / Shift и т. Д., Возможно, означая сон не требуется
«-» означает конец параметров xdotool, так что если вставленный тест начинается с - xdotool не будет пытаться интерпретировать его как параметр
На самом деле есть два буфера, доступных с помощью Ctrl+V
(копирование-вставка в буфер обмена) и Shift+Insert
(вставка метки мыши и вставка по среднему щелчку мыши).
Если у вас есть сеансы, правильно подключенные к общему буферу обмена, то один из двух должен работать автоматически, нет?