고쳐 쓰다:
이 문제를 해결했습니다. 여기에서 내 경험을 공유하겠습니다.
- 새로운 vncsession은 하위 프로세스의 상태를 분기하고 확인합니다.
- 키즈체크
/home/$USER/.vnc/
. 사실 가장 큰 문제는 이 폴더입니다. 이 폴더는 이전에 생성된 것으로 보이며 SELinux 컨텍스트가 vncsession과 다릅니다. 폴더를 삭제하고 비밀번호를 다시 만드세요. - TigerVNC를 컴파일하려면 다음 명령을 따르십시오.속도 사양, RPM 버전은 접두사를 사용
/usr
하고 git 버전은/usr/local
. - 실제로 오류 메시지를 포착하려면 모두를 다음
perror
으로 바꾸십시오.syslog(LOG_CRIT, ...
가장 큰 문제는 포크된 프로세스의 오류가 반영되지 journalct -t vncsession
않거나journalctl -u vncserver@:$DISPLAY
. 근본 원인을 찾으려면 vncsession의 소스 코드를 수정해야 합니다.
원래 질문:
Fedora 33에서 TigerVNC를 사용하고 있습니다. TigerVNC의 최신 업데이트는 Switch vncserver
에서 vncsession
. 최신 변경 사항을 반영하여 시스템 단위 파일이 업데이트되었습니다. 그런데 최신 systemd 유닛 파일로 VNC를 시작할 수 없어 디버깅 중입니다. 서비스가 제대로 실행되고( -x
vncsession이 올바르게 호출되는지 확인하기 위해 래퍼 bash 코드에 추가함) 서비스가 시작됩니다.비활성.
유닛 파일의 기본 구조는 다음과 같습니다.
Type=forking
ExecStart=/.../vncsession-start DISPLAY
vncsession-start는 실제로 래퍼입니다.
...
exec /.../vncsession USER DISPLAY
문제는 내가 systemctl start
서비스할 때 오류 없이 종료된다는 것입니다(마스터 PID만 나열되고 ExitCode=0). 그러나 나는 두 가지 다른 방법으로 실행합니다.
- Bash에서 직접 실행: 실행되고 Xvnc가 시작됩니다.
- 유닛 파일을 으로 수정
ExecStart=/bin/bash -cx 'strace -f vncsession USER DISPLAY'
하고 변경Type=simple
: Xvnc도 시작됩니다.
첫 번째 시도는 잘못된 vnc 구성 문제를 해결하는 것입니다. 두 번째 시도는 SELinux 설정을 확인하는 것입니다.
문서에 따르면 시스템 호출이 처리됩니다 Type=forking
. fork()
나는 vncsession
strace로 확인했고 내가 본 것은 다음과 같습니다:
- 배쉬
exec
vnc 세션 - vnc 세션 호출
clone()
,아니요fork()
- vncsession을 실행한 다음
execev()
start Xvnc를 호출합니다.
그래서 내 질문은 다음과 같습니다. 1) 이 상황에 적합한 것은 무엇이며 올바른 선택 Type=
입니까 ? forking
2) 이런 종류의 문제를 디버깅하는 방법은 무엇입니까?
감사합니다!