x11vnc
재부팅할 때까지 VNC를 사용할 수 없게 만드는 끔찍한 검은색 화면을 수정하는 시작 스크립트를 만들고 있습니다 . 지금까지 최신 /run/sddm/*
파일을 사용하고 다음으로 변경하여 :0
해결 방법을 찾았 습니다.n-1해당 파일이 있습니다. 그러나 이것은 단지 추측일 뿐이며 사용자 토글이 마지막에 디스플레이 세션을 추가한 다음 제거하는 경우에만 작동합니다. 마지막 프로젝트가 아닌 프로젝트로 다시 전환하려고 하면 어떤 모니터를 사용하고 있는지 알 수 없어 문제가 다시 발생합니다. 지금까지의 진행 상황:
#!/bin/sh
while true; do
lso=`ls -t /run/sddm/{* | grep -m1 -`
cnt=$((`ls /run/sddm/{* | grep -c -`-1))
/usr/bin/x11vnc -auth $lso -once -noxdamage -repeat -rfbauth /home/USER/.vnc/passwd -rfbport 5900 -shared -display :$cnt
usleep 400000
done
가장 중요한 점은 이를 제거 -forever
하고 -loop
서버를 다시 로드하고 연결할 때마다 새로운 디스플레이 구성을 제공한다는 것입니다.
:0
예 를 들어 올바른 X 쿠키 파일(디스플레이 번호를 알고 있는 경우 이 작업을 수행할 수 있음)을 찾으려면 현재 디스플레이가 필요 :1
하고 올바른 모니터 그림을 표시하려면 올바른 출력이 필요합니다.
모든 업데이트가 포함된 Kubuntu 18.04에서 실행됩니다.
답변1
Xvfb
현재 Linux vt(no 또는 ) 에서 실행 중인 Xorg 서버의 표시 번호를 찾으려면 xnest
다음과 같이 하면 됩니다(@basin의 요구 사항 충족).논평)
pgrep -at "$(cat /sys/class/tty/tty0/active)" Xorg | grep -Po ' \K:[0-9]+'
-t tty
pgrep 옵션은 제어 터미널이 있는 프로세스를 선택하고, tty
이 -a
옵션은 전체 명령줄을 인쇄하도록 지시합니다. 두 번째 grep은 프로세스에서 디스플레이 번호를 추출합니다.
물론 사용자가 Ctrl-Alt-Fn을 통해 텍스트 콘솔로 전환하면 아무 것도 인쇄되지 않습니다.
답변2
나는 마침내 그것을 알아 냈습니다. 나에게 올바른 방향을 알려준 Billy 삼촌에게 감사드립니다(그의 두 번째 편집은 여전히 나에게 적합하지 않았지만).
#!/bin/sh
while true; do
lso=/run/sddm/`pgrep -at "$(cat /sys/class/tty/tty0/active)" Xorg | grep -Po '\{[0-9a-f\-]{36}\}'`
cnt=`cat -v $lso | grep -Po '\^[A-C]{1}[0-9]{1,3}\^@\^RMIT' | grep -Po '[0-9]{1,3}'`
/usr/bin/x11vnc -auth $lso -once -noxdamage -repeat -rfbauth /home/USER/.vnc/passwd -rfbport 5900 -display :$cnt
usleep 400000
done
작동 방식은 다음과 같습니다. 변수에는 lso
현재 X-쿠키 파일의 전체 경로가 포함되어야 합니다. 이것이 Billy 삼촌의 조언이 도움이 되는 곳입니다. 숫자는 출력 줄에 표시되지 않지만 pgrep
GUID 스타일 X 쿠키는 표시됩니다. 그렇기 때문에 grep
괄호로 둘러싸인 16진수 문자열에서 하이픈의 정확한 위치를 대략적으로 고려하지 않았습니다.
이 cnt
변수에는 디스플레이 번호가 포함되어야 합니다. X-쿠키 자체에서 추출합니다. 이진 문자를 cat -v
캐럿 이스케이프 제어 문자로 변환합니다. 그런 다음 이 이진 문자를 X-쿠키 파일의 표시 번호 주변 문자와 일치시켰습니다. 이 [A-C]{1}
부분은 실제로 숫자를 표시하는 길이 필드입니다. A는 한 문자를 나타내고, B는 두 문자를 나타냅니다. 예상대로 구문 분석할 수 없었지만 운 좋게도 사용된 정규식에서는 이를 요구하지 않습니다. 따라서 스크립트는 최대 999개의 모니터를 지원하므로 이 정도면 충분합니다.
한 가지 단점은 다른 시스템에서 로 표시되는 길이가 0인 문자열로 인해 ^@
이 스크립트가 손상될 수 있다는 것입니다. 더 나은 방법을 아는 사람이 있으면 알려 주시기 바랍니다.
또한 일부 시스템에는 X 쿠키가 존재하지 않아 이 스크립트의 활용도가 떨어지기 때문에 X 쿠키에서 추출하지 않고 표시 번호를 감지하는 것이 좋습니다.