devsfs 규칙

devsfs 규칙

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: 답변의 질문에 대답하려면 다음을 수행하십시오.

  1. 내 devfs 규칙이 Jail devfs 규칙 ID와 일치합니다.
  2. 키보드와 마우스를 분리했다가 복원하면 Xorg.0.log에 이벤트가 표시되지 않습니다. 대신 호스트 시스템에는 키보드와 마우스가 분리되었다가 다시 연결되는 것으로 표시됩니다.
  3. 호스트 시스템은 최소 설치이며 관리 팩과 비디오 드라이버만 포함되어 있습니다. 완전한 Xorg 설치가 없습니다.

편집 #2:

  1. inputplug를 설치하고 다음을 실행했습니다. DISPLAY=:0 inputplug -d --debug -c echo 키보드를 연결했다가 뽑았을 때 출력이 인쇄되지 않았습니다.
  2. 마찬가지로 기본/호스트 시스템의 dmesg는 키보드가 연결되고 연결 해제되는 것을 보여줍니다.
  3. 감옥에서는 /dev/ukbd1 아래의 장치가 호스트와 일치함을 보여줍니다.
  4. 감옥 디스플레이에는 /dev/input/event7 아래에 새로 추가된 장치도 표시됩니다.
  5. 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를 어떻게 구성합니까?

관련 정보