터미널에서 GUI 프로그램으로 키 입력 (F5)을 보내는 방법은 무엇입니까?


40

Raspberry Pi를 Chromium (키오스크 모드)과 함께 사용하여 일부 통계를 표시합니다. Pi에는 연결된 키보드가 없으므로 터미널에서 Chromium (탭) 프로세스로 키 입력을 보내는 솔루션을 검색했습니다 . 정상적인 입력은 작동하지만 F5이 솔루션을 통해 (특별 키 : 브라우저 새로 고침) 과 같은 것을 어떻게 보내 나요?

# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0

답변:


51

GUI 프로그램은 표준 입력에서 읽지 않고 X 서버 에서 입력을받습니다 . 키 스트로크를 창에 주입하는 도구가 있습니다. xdotool 은 상당히 일반적이며 편리합니다.

키 입력을 보내려는 창 ID를 찾아야합니다. xdotool로 그렇게 할 수 있습니다. xdotool search --class Chrome모든 Chrome 창의 창 ID 목록을 반환합니다. 이것이 둘 이상을 반환하면 원하는 것을 선택해야합니다. xdotool search --name수업 대신 제목을 일치시키는 데 사용할 수 있습니다 . wmctrl 의 출력을 구문 분석 하고 원하는 창 ID를 추출 할 수도 있습니다 .

올바른 창 ID를 찾았 으면 전화 xdotool를 걸어 키 입력을 삽입 할 수 있습니다 . 불행히도 많은 응용 프로그램은 다른 응용 프로그램에서 보낸 키 입력 및 마우스 이벤트와 같은 합성 이벤트를 거부합니다. 현재 버전의 Chrome의 경우입니다. 다른 메커니즘으로 다른 응용 프로그램에서 키 입력을 주입 할 수 있지만 창에 초점을 맞춰야합니다. xdotool을 사용하면이 모든 작업을 수행 할 수 있지만 Chrome 창에서 포커스가 빠르게 깜박 거립니다. 다음 스 니펫은 F5첫 번째 Chrome 창에 다소 임의의 순서로 전송됩니다.

xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)

또는 이전 버전의 xdotool을 사용하는 경우 :

xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)

이것은 F5해당 창으로 전송 되며 프로그램으로 무엇을할지 결정해야합니다. Chrome에서는 현재 탭이 다시로드됩니다.


4
--windowid플래그는 지금 --window(이 명령은 많은 경고)
루이 매덕스

2
--title옵션은 지금 --name(명령이 충실하게 많은 경고)
jpaugh

2
중첩은 완전히 불필요합니다. xdotool search --class Chrome key F5
phil294

1
@Blauhirn 이전 버전의 xdotool에서는 중첩이 필요했습니다. 그러나 감사합니다. 새로운 구문을 보여주기 위해 답변을 업데이트했습니다.
Gilles 'SO- 악마 그만해'

아, 그리고 이것을 업데이트 한 이후 Chrome은 오늘날 합성 이벤트를 거부합니다. 한숨
질 '소 악한 그만'

15

위에서 제안한 솔루션은 다음과 같이 xdotool을 사용했습니다.

 xdotool key --windowid <window> <keystroke>

그것은 나를 위해 작동하지 않았습니다. 실험 후 나는 도착했다

 xdotool windowactivate --sync <window> key <keystroke>

일단 작동하는 것처럼 보였으므로 스크립트를 정의하고 .lircrc 파일을 다음과 같이 업데이트했습니다.

http://pcfellow.com/ClementineRemote.html


첫 번째 예제가 작동하지 않는 이유가 궁금합니다. 초점이 맞지 않는 창에 키 입력을 보내는 것이 좋습니다.
Geremia

1
@ Geremia, 아마도 xdotool documentation 의 SENDEVENT NOTES 에 제공된 이유로 작동하지 않을 것입니다 .
Janthelme

4

Raspbian Wheezy를 실행하는 Raspberry Pi에서도 비슷한 사용 사례가있었습니다. 키오스크 모드를 사용하여 Chrome에서 탭을 회전해야했습니다. 슬프게도 이전 Chrome에서 확장 프로그램을 설치하면 더 이상 합리적이지 않습니다. 허용되는 답변의 예에는 오타가 있거나 소프트웨어 버전에서 작동하지 않습니다.

xdotool key --window "$(xdotool search --class Chromium | head -1)" Ctrl+Tab

4

Chromium을 사용하여 맞춤 웹 페이지를 표시하고 정기적으로 새로 고침하려는 경우 다음 태그를 추가 할 수 있습니다.

<meta http-equiv="refresh" content="5">

5 초마다 자동으로 새로 고칩니다 (원하는 경우 더 짧게 또는 더 길게 설정할 수 있음).


2
좋은 시도하지만 난하지 자신의 트위터, 내가 감시해야 내 ISP 및 다른 사이트의 모니터링 소프트웨어 할;) 아마 전에 언급해야
burnersk

4
사용자 스크립트를 사용하여 해당 태그를 페이지에 삽입 할 수 있습니다. 키 누르기를 창으로 보내는 것보다 덜 취성 솔루션 일 수 있습니다.
sherbang

2

역사적으로 Auto Hot Key를 사용하여 키 누름 보내기와 같은 작업을 수행했지만 Linux에서는 사용할 수 없지만 빠른 Google 검색을 통해 IronAHK ( http://www.ironahk.net/ ) 가 많지 않다는 사실이 밝혀 졌습니다 문서를 아직 사용할 수 있지만 트릭을 수행 할 수 있습니다.


링크가 더 이상 작동하지 않습니다.
Antonín Procházka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.