내 바이너리가 Linux의 일부 글로벌 단축키에 반응할 수 있는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/74790

  •  09-06-2019
  •  | 
  •  

문제

특정 단축키(예:Ctrl 키-) 그런 다음 특정 작업을 수행합니까?내 응용 프로그램은 C로 작성되었으며 Linux에서만 실행되며 GUI가 없습니다.이런 종류의 작업에 도움이 되는 라이브러리가 있나요?

편집하다:예를 들어 amarok에는 전역 단축키가 있습니다. 예를 들어 키 조합을 작업에 매핑하는 경우(예를 들어 Ctrl 키-+, Ctrl 키 그리고 +) 키를 누를 때 해당 작업을 실행할 수 있습니다.내가 지도를 한다면 Ctrl 키-+ 볼륨 증가 동작으로, 누를 때마다 Ctrl 키-+ 볼륨이 일정량 증가해야 합니다.

감사해요

도움이 되었습니까?

해결책

단축키는 얼마나 글로벌해야 합니까?X 세션에 대해 전역적이면 충분합니까?이 경우 Xlib 연결을 열고 필요한 이벤트를 수신할 수 있어야 합니다.

일반적으로 X의 키보드 이벤트는 현재 포커스가 있는 창에 전달되고 처리될 때까지 계층 구조 위로 전파됩니다.분명히 이것은 우리가 원하는 것이 아닙니다.다른 창이 이벤트에 접근하기 전에 이벤트를 처리해야 합니다.우리는 전화해야 해 XGrabKey 이 작업을 수행하려면 핫키의 키코드와 수정자를 사용하여 루트 창에서 실행하세요.

좋은 예를 찾았어요 여기.

다른 팁

제 생각에는 스모프라 여기서 올바른 길을 가고 있습니다.당신은 키 누르기를 가로채서 적절한 조치를 취할 수 있도록 X에 전역 단축키를 등록하려고 합니다. Xlib 아마도 당신이 원하는 것일 겁니다. XGrabKey 기능인 것 같아요.

유감스럽게도 배우는 것이 쉽지 않습니다.유용해 보이는 다음 예제를 찾았습니다. TinyWM.나는 또한 Java/JNI 사용(동일한 기본 Xlib 함수에 액세스)

소스 코드를 살펴봐야 합니다. xbindkeys.

Xlib 프로그래밍은 매우 난해하고 문서를 찾기가 어렵고 미묘한 이식성 문제가 있습니다.전투에 강화된 코드를 복사하는 것이 더 나을 것입니다.

이를 수행하는 한 가지 방법은 애플리케이션이 특정 포트 또는 소켓 파일에서 들어오는 요청을 수신하도록 하는 것입니다.

그런 다음 해당 포트나 소켓 파일에 연결하고 실행 중인 애플리케이션에 명령을 보내는 작은 클라이언트 애플리케이션을 작성할 수 있습니다.

그런 다음 특정 키 조합을 바인딩하여 작은 클라이언트 앱을 실행하도록 창 관리자를 구성할 수 있습니다.

UNIX에서 명령줄 셸에 대한 액세스는 다음을 통해 이루어집니다. 단말기.이는 사람들이 문자 그대로 기계에 직접 연결된 터미널을 통해 대형 공유 컴퓨터에 액세스하던 시절을 생각나게 합니다(예:직렬 케이블로).

사실, 'xterm' 프로그램이나 UNIX 상자에서 사용하는 파생 프로그램은 모두 'xterm' 프로그램으로 적절하게 참조됩니다. 터미널 에뮬레이터 - 이는 (사용자의 관점과 운영 체제의 관점 모두에서) 구식 터미널 머신 중 하나와 매우 유사하게 작동합니다.

다양한 종류의 터미널이 있고 UNIX 시스템이 각 종류의 기능을 알아야 하기 때문에 흥미로운 방식으로 입력을 처리하는 것이 약간 복잡해집니다.이러한 기능은 전통적으로 텀캡 파일을 사용하고 있으며 더 현대적인 시스템에서는 용어 정보 대신에.노력하다

man 5 terminfo

자세한 내용은 Linux 시스템을 참조하세요.

이제 좋은 소식은 터미널 기능 등을 너무 복잡하게 다룰 필요가 없다는 것입니다.입력 또는 창 기능을 사용하여 흥미로운 작업을 수행하는 명령줄 응용 프로그램을 갖고 싶습니다.도서관이 있고, 저주, 도움이 될 것입니다.조회

man 3 ncurses

자세한 내용은 Linux 시스템에서 확인하세요.아마도 온라인에서 저주 사용에 대한 괜찮은 튜토리얼을 찾을 수 있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top