xorg-x11이 감옥에서 실행되는 전체 시스템이 있습니다. 내 유일한 문제는 X가 실행되는 동안 키보드나 마우스를 추가하거나 제거할 수 없다는 것입니다. X를 다시 시작하면 새로 연결된 키보드나 마우스가 제대로 작동합니다. X를 다시 시작하고 싶지 않습니다. 베어 메탈에서 시스템을 실행하면 예상대로 작동합니다. 감옥에서 도망칠 때만 이런 일이 발생합니다.
연결하거나 분리할 때 다음 장치가 생성되는 것을 볼 수 있습니다.
/dev/input/event*
/dev/usb/*
/dev/ukbd*
/dev/kbd*
/dev/ums*
/dev/ugen*
저는 dbus를 실행하고 있지만 어떤 이유로든 Xorg가 이를 볼 수 없는 것 같습니다.
/var/log/Xorg.0.log를 추적하면 키보드나 마우스를 연결하거나 분리할 때 키보드나 마우스가 추가되거나 제거된다는 메시지가 표시되지 않습니다.
편집 #1:
이 감옥에 대한 내 devfs 규칙은 다음과 같습니다.
add path 'dri*' unhide
add path 'drm*' unhide
add path 'dsp*' unhide
add path 'mixer*' unhide
add path 'speaker*' mode 0660 group operator unhide
# USB drives
add path 'da*' unhide
편집 #1: 답변의 질문에 대답하려면 다음을 수행하십시오.
- 내 devfs 규칙이 Jail devfs 규칙 ID와 일치합니다.
- 키보드와 마우스를 분리했다가 복원하면 Xorg.0.log에 이벤트가 표시되지 않습니다. 대신 호스트 시스템에는 키보드와 마우스가 분리되었다가 다시 연결되는 것으로 표시됩니다.
- 호스트 시스템은 최소 설치이며 관리 팩과 비디오 드라이버만 포함되어 있습니다. 완전한 Xorg 설치가 없습니다.
편집 #2:
- inputplug를 설치하고 다음을 실행했습니다. DISPLAY=:0 inputplug -d --debug -c echo 키보드를 연결했다가 뽑았을 때 출력이 인쇄되지 않았습니다.
- 마찬가지로 기본/호스트 시스템의 dmesg는 키보드가 연결되고 연결 해제되는 것을 보여줍니다.
- 감옥에서는 /dev/ukbd1 아래의 장치가 호스트와 일치함을 보여줍니다.
- 감옥 디스플레이에는 /dev/input/event7 아래에 새로 추가된 장치도 표시됩니다.
- xinput 목록에는 이전과 이후의 차이가 표시되지 않았습니다.
글쎄요, 감옥에서는 루트로 /dev에 어떤 파일도 생성할 수 없습니다. 이것은 무리한 일이지만 감옥 자체에는 필요한 장치 노드를 생성할 수 있는 권한이 없고 대신 호스트에 의존하여 생성합니까?
답변1
devsfs 규칙
제가 가장 먼저 의심한 것은devfs 규칙설정되었습니다.
다음을 사용하여 감옥에서 어떤 규칙을 설정했는지 확인할 수 있습니다.
# jls -j <jailname> -n devfs_ruleset
devfs_ruleset=0
에서 기본 규칙을 확인 /etc/defaults/devfs.rules
하고 에서 자신만의 규칙을 설정할 수 있습니다 /etc/devfs.rules
.
감옥에서 오디오를 활성화하는 일반적인 예는 다음과 같습니다.
# /etc/devfs.rules
[devfsrules_my_fine_x_jail=42]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'mixer*' unhide
add path 'dsp*' unhide
service devfs restart
규칙을 어겼다면 기억하세요 . 참고하시기 바랍니다겹쳐지거나 중첩되어서는 안 됩니다.귀하의 규칙 세트이지만 위와 같이 명시적입니다.
그런 다음 감옥 구성에서 규칙 세트를 설정합니다.
# /etc/jail.conf
myjail {
devfs_ruleset = 42;
}
이 경우에는 충분할 수 있습니다(TM). 특히 X를 다시 시작한 후에 작동한다면 더욱 그렇습니다. 그러나 이 장치는 에서 본 것으로 알려졌기 때문에 언급할 가치가 있습니다 /dev
. 언급되지 않은 것은 이것이 감옥에서 확인되는지 아니면 콘솔에서 확인되는지입니다. 또한 kbd/mouse가 연결되었을 때 실제로 추가되는 내용에는 차이가 없습니다.
X구성
호스트와 감옥에서 정확히 동일한 X 설정이 사용되는 것으로 가정합니다. 그러나 그것이 어떻게 설정되었는지에 대한 언급은 없습니다. 오늘날 X는 모든 것을 자동으로 감지하는 데 매우 능숙합니다. 다시 한 번 최신 FreeBSD 14와 새로운 X를 사용한다고 가정합니다.
X를 구성하는 현대적인 방법은 하나의 큰 xorg.conf를 갖는 것이 아니라 실제로 필요할 때만 부분을 추가하는 것입니다. /usr/local/etc/X11/xorg.conf.d/input.conf
어떤 장치 경로와 드라이버가 있는지 선택하는 설정이 있다면 흥미로울 것입니다. 이것의 일부는 비활성화와 같은 이상한 일을 하지 않도록 하는 것입니다.자동으로 장치 추가.
이 경우 아무것도 설정되지 않았다고 가정합니다. 그러나 X를 다시 시작할 때 작동한다면 /var/log/Xorg.0.log
어떤 마우스/키보드 장치 경로와 드라이버가 실제로 선택되었는지 확인하는 것이 흥미로울 것입니다. 호스트에서 실행하는 경우 감옥에서와 동일한 것을 사용하고 있습니까? 감옥에서 포착되지 않은 이벤트는 콘솔에서 트리거됩니까? 이는 검색 범위를 좁히는 데 도움이 됩니다.
개발상의 특이점
앞에서 보면 실제로 어떤 장치가 사용되는지 알 수 없습니다. 어쩌면 장치가 제대로 실행되고 있지만 구성 문제일 수도 있습니다 evdev
. 우리는우데브번역 레이어? 아마도 번역 레이어에는 Linux chroot 환경과 같이 감옥 내부에 엣지 문제가 있을 수 있습니다.여기를 보아라udev를 바인딩하고 마운트해야 하는 위치입니다.
최후의 조치
Xorg를 사용한 올바른 자동 감지가 불가능하더라도 X 서버 전체 다시 시작을 피할 수 있는 옵션이 있습니다.X 입력명령으로 실행할 수 있습니다. 정확히 어떤 주문이 필요한지는 사용하는 장비에 따라 다릅니다. 간단한 --enable
장치 이름이면 충분할 수도 있습니다. 이런 일이 거의 발생하지 않으면 VT를 전환하고(가능한 경우) 실행하십시오 jexec xinput
.
devd
또는 그만한 가치가 있다면 전력을 다해 해킹된 스크립트를 작성하세요. 하키, 그렇죠. 최후의 수단으로 그렇습니다. 바라보다USB 키보드가 연결되어 있을 때 프로그램을 실행하도록 FreeBSD에서 devd를 어떻게 구성합니까?