개요
원래 XRDP를 더 선호하긴 하는데 이상하게 Rocky에서는 XRDP세션 종료되고 나면 로컬 화면이 먹통이 되어버리는 이상한 종특이 있어서(아직 해결 못함) VNC를 설치해서 사용해보려고 합니다.
사용하는 이유는 VM을 Proxmox가 아니라 TrueNAS위에 구성했기 때문입니다. TrueNAS가 VM Console을 위해 기본으로 사용하고 있는 SPICE는 점유율이 낮아 좋다고 알려져 있긴 한데, 추가 패키지를 설치하지 않으면 복사-붙여넣기도 일방향만 되는 문제도 있고 자잘하게 불편한 점이 있습니다. 그런데 심지어 Rocky 9에서부터는 SPICE 지원이 안된다는군요(링크).
그래서.. VNC를 사용하려고 한건데.. 확실히.. 우분투에 비해서 검색으로 얻을 수 있는 정보의 최신성과 양의 차이가 있긴 있네요…=ㅅ=.
TigerVNC가 systemd 유닛으로 바뀌었다는데 검색해도 나오는 대부분의 정보는 쉘에서 vncserver를 입력해서 실행하거나 환경, 버전 등을 명시하지 않은 채 맘대로 만들어진 systemd 유닛을 알려주거나 해서… 트러블 슈팅에 조금 시간이 걸렸습니다.
TigerVNC-Server 구성하기
패키지 설치
아래 명령으로 tigervnc-server 패키지를 설치합니다. 어차피 이후 과정을 root로 진행할거라 sudo -i 하고 시작하셔도 됩니다.
sudo dnf install tigervnc-server
작성일(2024-05-27) 기준 1.13.1 버전입니다.
Wayland 디스플레이 서버 비활성화
nano /etc/gdm/custom.conf
아래처럼 WaylandEnable=False 행의 주석을 삭제하고 저장합니다.
VNC 패스워드 생성
vncpasswd
현재 계정의 passwd를 생성하는 과정이 시작됩니다.
view-only password는 n으로 생성하지 않고 넘어갑니다. 이렇게 생성된 패스워드는 ~/.vnc/passwd 에 저장됩니다.
VNC Server 기본 환경 설정
/etc/tigervnc 아래에 vncserver-config-defaults와 vncserver.users를 각각 편집해야 합니다.
nano /etc/tigervnc/vncserver-config-defaults
여기선 어떤 세션과 해상도를 사용할지 정하게 됩니다.
session과 geometry가 필요했는데 예시로 주석처리된 부분이 있길래 주석 해제하고 해상도만 변경했습니다.
1920*1080을 사용하려면 1920×1080으로 변경하시면 됩니다.
그 다음 사용자를 설정해야 합니다.
nano /etc/tigervnc/vncserver.users
VNC는 여러 세션이 생성될 수 있고 각 세션마다 :1 :2 :3 … :n 이렇게 번호를 가져갑니다.
그리고 각 세션을 사용할 수 있는 유저를 이 파일에서 :1=user 이렇게 정의하죠.
주석부분에도 예시가 있듯이, 유저를 정의해주면 됩니다. 이 글에선 :2=root 이렇게 하겠습니다.
왜 1 놔두고 2????? 갑분 root?????의 이유는 이 글 맨 하단에 적겠습니다.
방화벽 규칙 적용
정말 많은 글들이 SELinux는 일단 비활성화하고 시작해야 한다고 하는데(setenforce 0) 그대로 놔둬도 됩니다.
사용할 포트만 열어주면 됩니다.
위에 세션당 :1 :2 :3 … :n 이렇게 간다고 했죠? 열어줄 포트는 5900 + n을 따라갑니다.
예시글에서는 :2이기 때문에 5902포트를 열면 됩니다.
firewall-cmd --permanent --add-service=vnc-server
firewall-cmd --permanent --add-port=5902/tcp
firewall-cmd --permanent --add-port=5902/udp
firewall-cmd --reload
Systemd 유닛 생성 및 등록
검색해서 참고할 최신 reference가 없어서 멘땅 헤딩을 많이 한 부분입니다.
먼저, 유닛을 생성합니다.
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
복사 대상인 /etc/systemd/system/vncserver@:2.service 여기서 숫자 2는 위에 :2=root의 2와 일치해야 합니다.
구버전 글들은 복사한 파일을 열어서 안에 뭘 건드리고 뭘 어떻게 하고 편집을 해야된다고 하지만… 그런거 필요없고 바로 start해주면 됩니다. 그리고 status로 상태를 보죠.
systemctl start vncserver@:2.service
systemctl status vncserver@:2.service
아래처럼 active (running)이 보이면 정상 작동 하고 있는 겁니다.
아래처럼 출력되면 문제가 있는겁니다.
하단 링크를 통해 뷰어(TigerVNC) 다운로드 후 테스트 겸 접속시도 해 보겠습니다. vncpasswd에서 설정한 비밀번호를 입력합니다.
작동을 확인했으면 부팅때마다 자동으로 실행될 수 있도록 등록합니다.
systemctl enable vncserver@:2.service
헤딩 기록 (Trouble-Struggling)
A VNC server is already running as :1
이 글에서 세션을 :2로 시작한 이유이기도 합니다.
원래 맨 처음 헤딩할 때는, 여러 가이드를 토대로 :1로 서비스를 시작하려고 했습니다. 근데 아무리 시도해도 dead상태를 벗어날 기미가 없었습니다.
~/.vnc 폴더 의 로그 파일을 살펴 보니
systemctl enable vncserver@:2.service
1번 세션에 할당된 VNC서버가 이미 있다는 문구가 보입니다.
동일 배포판을 Proxmox위에 설치해봤더니 :1로도 서비스가 잘 생성되는 것을 보아 TrueNAS에서 SPICE를 쓰는 것과 연관이 있는 것으로 보입니다.
다짜고짜 root로 세션을 시작하는 이유
결론부터 말씀드리자면 root일 필요는 없습니다. 아래처럼 말이죠.
맨 처음 구버전용 가이드 & 얼토당토 않은 가이드를 읽고 그대로 따라하다보니 systemd를 건드리면서 이렇게 적어넣어 보게 됐습니다.
User=better0101
그랬더니 해당 서비스가 시작되지 못하고 에러를 뿜었는데 journalctl -xeu vncserver@:2.service 해보니 프로세스가 root로 실행되어야 한다는 메세지가 남아있더군요.
그래서 무지성으로 일단 root로 진행해 본 뒤, 제대로 실행되는 걸 확인하고 나서야 일반 계정으로도 성공시킬 수 있었습니다.
root가 아닌 일반 계정으로 설정하기
위의 단계를 모두 읽어보셨다는 가정을 하고 간단하게 적겠습니다.
먼저 /etc/tigervnc/vncserver.users에 계정을 추가하세요.
:3에 user를 할당했으니, 세션 3을 사용하기 위한 추가 준비가 필요합니다. 먼저 해당 유저의 vncpasswd를 생성해주어야 합니다. 이 때, root계정으로 해서도 안되고, sudo vncpasswd를 해도 안됩니다. 둘 모두 root계정의 패스워드를 정하는 명령입니다.
쉘에서 아래와 같이 user인 상태로 진행하셔야 합니다.
[user@localhost ~]$ vncpasswd
다시 root로 돌아와서, 두 번째로 5900 +3 = 5903 포트를 열어주어야 합니다.
firewall-cmd --permanent --add-port=5903/tcp
firewall-cmd --permanent --add-port=5903/udp
firewall-cmd --reload
(firewall-cmd –permanent –add-service=vnc-server 는 위에서 했기 때문에 또 할 필요 없습니다.)
마지막으로 vncserver@:3.service를 생성해 주어야 하는데, 여전히 내용물을 수정할 필요는 없으므로 아까 생성했던 @:2를 @:3으로 복사만 해주면 됩니다.
그리고 시작해 준뒤, status를 봅니다.
cp /etc/systemd/system/vncserver@:2.service /etc/systemd/system/vncserver@:3.service
systemctl start vncserver@:3.service
systemctl status vncserver@:3.service
아래처럼 제대로 작동되고 있는 것을 확인할 수 있고, 테스트로 접속해 보시고 문제 없으면 부팅 후 자동으로 실행되도록 등록해주면 끝납니다.
systemctl enable vncserver@:3.service
출처
VNC(Virtual Network Computing) 실습 및 트러블슈팅
VNC 실습과 실습 과정에서 발생한 오류에 대한 Troubleshooting 내용입니다.
velog.io
2. https://sourceforge.net/projects/tigervnc/files/stable/1.13.1/
TigerVNC - Browse /stable/1.13.1 at SourceForge.net
Connect your teams with an integrated digital workplace Wherever your teams work, keep them connected with a digital workplace that unifies all your productivity tools in one central place
sourceforge.net