X11 응용 프로그램에 원격으로 키 입력을 보내는 방법은 무엇입니까?

X11 응용 프로그램에 원격으로 키 입력을 보내는 방법은 무엇입니까?

저는 저장되지 않은 데이터가 포함된 X11 프로그램(Mathematica/Linux)을 실행하고 있습니다(그 프로그램을 떠난 후에 계산되었습니다. 불행하게도 프로그래밍 방식으로 데이터를 저장할 수 있는 통찰력이 없었습니다). 이제 안타깝게도 제가 돌아오기 전에 전원이 꺼질 것이라는 내용의 이메일을 받았습니다. 그래서 데이터를 저장하고 오른쪽 창에 Ctrl-를 보내고 싶습니다 S(창 ID를 찾는 방법을 알고 있습니다). 안타깝게도 xdotool이나 autokey가 설치되어 있지 않으며 설치를 위한 루트 액세스 권한도 없습니다. 그럼 할 수 있는 방법이 있나요?

물론, 한 가지 방법은 이를 수행하기 위한 C 프로그램을 작성하는 것입니다(기능이 거기에 있어야 하며 그렇지 않으면 다른 프로그램이 작동하지 않기 때문입니다). 그러나 저는 X11에 대해 아무것도 작성한 적이 없으므로 그렇게 생각하지 않습니다. 시간이 지나면 할 수 있을 거야..

나는 기계에 대한 SSH 액세스 권한이 있고 디스플레이에 액세스할 수 있습니다(스크린샷을 찍을 수 있습니다 - 잠금 화면이 표시됩니다 - xwininfo를 사용하여 창 목록을 얻을 수 있습니다). 그래서 나에게 필요한 것은 미리 뭔가를 설치하지 않고도 특정 창에 Ctrl싱글을 보내는 방법입니다.S

답변1

이 문제를 해결했습니다.

솔루션의 첫 번째 부분은 Gilles가 제공하는 정보입니다. xdotool은 바이너리이므로 설치할 필요가 없습니다. 실행 파일을 원격 시스템(내 디렉토리에 저장된 실행 파일을 실행할 수 있는 권한이 있는 곳)에 복사하는 것만으로도 충분합니다.

아래 명령을 언급할 때 변수는 DISPLAYMathematica가 실행 중인 디스플레이로 설정되어 있다고 가정합니다(제 경우에는 :0.0). 이는 내 컴퓨터에 SSH로 접속한 후 다음 명령을 실행하기 전에 가장 먼저 수행하는 작업입니다.

다음 단계는 화면이 잠겨 있을 때 Gnome 화면 보호기가 키보드 이벤트를 캡처하므로 Mathematica 창으로 전송된 모든 키 입력이 결국 화면 보호기에 도달하게 된다는 점을 깨닫는 것입니다. 다행스럽게도 Gnome 화면 보호기는 명령줄에서 쉽게 잠금 해제할 수 있습니다. 명령은

gnome-screensaver-command -d

찾았어요여기.

그 후 다음 명령을 사용하여 Mathematica 창을 식별했습니다.

xwininfo -root -tree | grep Mathematica

찾았어요여기.올바른 Mathematica 창은 노트북 파일 이름의 제목에 포함되어 있기 때문에 쉽게 식별할 수 있습니다("노트북"은 특정 유형의 Mathematica 문서에 대한 Mathematica 이름으로 일반적으로 계산에 사용됨). 저장되지 않았습니다. 각 줄은 해당 창 ID(0x13371d와 같은 16진수)로 시작됩니다.

창을 확인한 후 사용합니다.

xdotool windowactivate 0x13371d

(여기서 16진수는 물론 이전에 얻은 창 ID입니다.) 마지막으로 Control-S를 사용하여 보냅니다.

xdotool key ctrl+s

그런 다음 xwininfo를 다시 사용하여 창 제목의 별표가 실제로 사라졌는지 확인했습니다. 이는 노트북이 실제로 저장되었음을 나타냅니다.

관련 정보