커널 모듈에서 그래픽 응용 프로그램을 실행하시겠습니까?

커널 모듈에서 그래픽 응용 프로그램을 실행하시겠습니까?

현재 내 문제는 다음과 같습니다. 내 Acer Nitro 노트북 키보드에는 다른 노트북 브랜드에는 없는 특수 키인 Nitro 키가 있습니다. 아래 그림에서 백스페이스 키 옆에 이상한 N 키가 있는 것을 볼 수 있습니다. 이것이 바로 니트로 키입니다.

니트로 본드

Nitro 버튼을 누를 때마다 내 응용 프로그램이 표시되도록 GUI 응용 프로그램을 개발하고 싶습니다. 우분투 22.04를 사용하고 있습니다.

내가 찾은 내용에 따르면 Nitro 키 이벤트를 캡처하고 거기에서 애플리케이션을 시작하려면 LKM을 작성해야 한다고 생각합니다. 나는 여기에 대한 답변을 따르고 있습니다 (https://stackoverflow.com/questions/33836541/linux-kernel-how-to-capture-a-key-press-and-replace-it-with-another-key) 주요 이벤트를 캡처합니다.

LKM에서 GTK 애플리케이션을 실행할 수 있는지 알고 싶습니다. 즉, 여기에 샘플 코드를 입력하세요(https://www.gtk.org/docs/getting-started/hello-world) 내 커널 모듈 코드에서. 또한, 나는 목표를 달성하기 위한 올바른 길을 가고 있는지 알고 싶습니다.

미리 감사드립니다!

[고쳐 쓰다]내가 원하는 것을 명확히 하기 위해: Acer Nitro 노트북에는 일반적으로 키보드 색상과 팬 속도를 변경하는 GUI를 제공하는 Nitrosense라는 응용 프로그램이 있습니다. Nitro 키를 누르면 사용자에게 GUI가 표시됩니다. 그러나 Nitrosense 애플리케이션은 Windows에서만 사용할 수 있습니다. Ubuntu에도 동일한 내용을 작성하고 싶었습니다. 지금까지 키보드 색상과 팬 속도를 변경하기 위한 다양한 저장소를 찾았지만 Nitro 키를 눌렀을 때 열리는 앱에 대한 저장소는 없었기 때문에 이와 같은 것을 만들고 싶었습니다. Ubuntu 22.04에서 GNOME 42를 사용하고 있습니다. 내가 원하는 것은 로그인한 사용자가 Nitro 키를 누를 때마다 작업을 수행할 수 있는 GUI가 자동으로 나타나는 것입니다.

[업데이트 2]나도 이 창고를 찾았어https://github.com/kphanipavan/PredatorNonSense이는 제가 다른 Acer 브랜드에 대해 우려했던 것과 동일한 작업을 수행하려는 것 같습니다. 나는 이것이 도움이 될 것이라고 생각합니다.

[업데이트 3]사용하다가 발견한 이벤트입니다evtest 니트로키 evtest 이벤트

그러나 시도할 때 xev아무 것도 인쇄되지 않아 X 서버가 Nitro 키 이벤트를 인식하지 못하는 것으로 생각됩니다. Nitro 키 이벤트를 X 서버로 보내는 모듈을 작성하려면 문서를 찾아야 할까요?

키보드 단축키를 추가하기 위해 GNOME 제어 센터의 키보드 설정으로 이동했지만 Nitro 키도 인식하지 못했습니다. GNOME이 X 서버에서 실행 중이고 X 서버가 Nitro 키 이벤트를 인식하지 못하기 때문일 수도 있습니다.

UPD2에 언급된 저장소도 살펴보았는데, 작성자가 한 작업도 grep로그를 지속적으로 폴링하여 evtest키가 눌렸는지 확인하는 것이었습니다. 이 셸 명령을 확인하세요.https://github.com/kphanipavan/PredatorNonSense/blob/master/PNS.sh.

내가 할 수 있는 일은 키보드 장치 파일을 폴링하고 Nitro가 눌렸는지 확인하는 간단한 시스템 서비스를 작성하는 것입니다. 하지만 이는 막대한 자원 낭비가 될 수 있다는 점을 언급했다. 이에 대한 제안이 있으십니까?

답변1

Nitro 버튼을 누를 때마다 내 응용 프로그램이 표시되도록 GUI 응용 프로그램을 개발하고 싶습니다.

따라서 Nitro 버튼을 커널 입력 레이어 이벤트로 노출해야 합니다. 그런 다음 일부 사용자 공간 애플리케이션이 이를 작동하고 UI 애플리케이션을 시작할 수 있습니다.

Linux는 다중 사용자이며 시스템은 하나의 시스템과 다른 계정으로 GUI를 사용하는 수십 명의 사람들이 있는 상황을 위해 설계되었습니다. 따라서 단순히 "앱을 실행"할 수는 없으며 올바른 사용자를 찾아야 합니다. 그러나 커널은 사용자와 아무 관련이 없습니다.

이는 특정 사용자에 대해 어떤 조치를 취해야 함을 의미합니다. 이를 배치하는 가장 쉬운 위치는 해당 특정 사용자의 창 관리자 구성입니다(저는 귀하라고 가정합니다).

LKM에서 GTK 애플리케이션을 실행할 수 있는지 알고 싶습니다.

이는 불가능하며 작동하지 않습니다.


자원:

주요 이벤트가 발생했는지 evtest확인 하는데 사용됩니다 . Nitro그렇다면 커널 모듈을 작성할 필요가 없습니다. 그런 다음 이를 사용하여 xevX 이벤트로 변환되었는지 확인합니다.

키 누르기 이벤트가 발생하지 않으면 실제 이벤트를 검색하는 것이 흥미로울 것입니다.

마지막으로 데스크톱에서 어떤 창 관리자를 사용하는지 알아낸 다음 Google에서 창 관리자 문서를 검색하고 특정 키 입력에 대한 프로그램을 시작하는 방법을 알아보세요.


(그런데 일반적으로 이미지보다는 4개의 공백으로 들여쓰기된 텍스트를 붙여넣는 것이 더 좋습니다)

이는 코드 425 에 대한 일반적인 키 누름 및 해제 이벤트입니다 KEY_PRESENTATION.

이 코드를 X 키 기호에 매핑하는 자신만의 키보드 레이아웃을 만들고 싶다면 다음을 읽어 보는 것이 좋습니다.신뢰할 수 없는 XKB 구성 가이드(2004). 기존 레이아웃을 새 이름으로 복사한 다음 수정하여 시스템 패키지가 업데이트될 때 손실되지 않도록 하세요.

작은 사용자 공간 프로그램에서 키를 수신하려면 커널 입력 계층 라이브러리가 있는 언어를 선택하세요.파이썬. /dev/input/by-path/...키보드에 해당하는 심볼릭 링크를 사용해야 합니다 . /dev/input/eventX숫자는 실행 시 안정적이지 않습니다.

답변2

시스템에 이미 ACPI Thermald 데몬 또는 기타를 통해 열 관리가 구성되어 있을 수 있다는 점을 고려하면 팬 속도를 가지고 플레이하려고 하지 않을 것입니다.


키보드 색상을 변경하는 기능과 관련하여 이는 일부 적절한 장치 드라이버를 통해서만 수행할 수 있다고 기록된 것이 맞습니다.
키보드(거의 확실히 일부 HID 호환 장치)는 일부를 노출해야 합니다.산출장치(와는 다름입력하다키보드 키 전송과 관련된 장치) 키보드에 명령을 보내려면 올바르게 처리해야 합니다.

에서 영감을 얻으실 수 있습니다.Acer Gaming RGB 키보드 백라이트 및 터보 모드 Linux 커널 모듈

이는 기본적으로 /sys/devices 트리에 컨트롤을 노출하도록 설계되어야 합니다.

이러한 컨트롤을 작동하는 방법은 /sys/devices 컨트롤을 대담하게 반영하는 것부터 gtk 위젯 개념에 이르기까지 사용자 공간에서 귀하가 결정합니다.
키보드 키(특수 Nitro 키 포함)를 사용하여 이 기능을 활성화하는 것은 DE가 기본 시스템 설정으로 처리할 수 있는 간단한 키 매핑 문제입니다.

관련 정보