Ubuntu 24.04 작업 서버에서 시간대를 바꾼 뒤 VNC를 재시작하려고 root로 systemctl restart vncserver@1을 실행했더니 “Unit vncserver@1.service not found”가 나왔습니다. VNC는 멀쩡히 접속되고 있는데 서비스가 없다고 나와서 확인해 보니, VNC가 시스템 서비스가 아니라 일반 계정의 사용자 서비스로 등록되어 있었습니다.

결론
- TigerVNC가
systemctl --user(사용자 서비스)로 등록되어 있으면 root의 systemctl에서는 보이지 않습니다. vncserver -list도 명령을 실행한 계정의 세션만 보여줍니다. root에서는 빈 목록이 나옵니다.- VNC를 띄운 계정으로 로그인해
systemctl --user restart vncserver@1로 재시작합니다. - 사용자 서비스는 그 계정이 로그인해야 시작되므로, 재부팅 후 자동으로 띄우려면
loginctl enable-linger가 필요합니다.
환경
| 항목 | 내용 |
|---|---|
| OS | Ubuntu 24.04.4 LTS |
| VNC | TigerVNC (Xtigervnc), 디스플레이 :1, 포트 5901 |
| 등록 방식 | 일반 계정의 systemd 사용자 서비스 vncserver@1.service |
| 용도 | 외장 저장장치(ICY DOCK)의 데이터를 파일서버로 옮기는 작업 서버 |
| 작업 시점 | 2026년 10월 |
호스트명과 계정 이름은 글에서 ubuntu-vnc, user로 바꿨습니다.
증상. root에서 서비스를 찾지 못함
ssh://root@ubuntu-vnc:22
1 ubuntu-vnc
root@ubuntu-vnc:~#
systemctl restart rsyslog vncserver@1
Failed to restart vncserver@1.service: Unit vncserver@1.service not found.
ssh://root@ubuntu-vnc:22SSH2xtermUTF-8
- 시간대 변경을 반영하려고 rsyslog와 VNC를 함께 재시작하려 했습니다.
vncserver@2로 바꿔 봐도 같은 메시지가 나왔습니다.
서비스 목록과 유닛 파일 위치, VNC 세션 목록을 차례로 확인했습니다.
ssh://root@ubuntu-vnc:22
1 ubuntu-vnc
root@ubuntu-vnc:~#
systemctl list-units --all | grep -i vnc
ssh://root@ubuntu-vnc:22SSH2xtermUTF-8
- 시스템 서비스 전체에서 vnc가 들어간 이름을 찾습니다. 아무것도 나오지 않았습니다.
ssh://root@ubuntu-vnc:22
1 ubuntu-vnc
root@ubuntu-vnc:~#
ls /etc/systemd/system/ | grep -i vnc
ssh://root@ubuntu-vnc:22SSH2xtermUTF-8
- 관리자가 등록한 시스템 서비스 유닛 파일 위치입니다. 여기에도 VNC 파일이 없었습니다.
ssh://root@ubuntu-vnc:22
1 ubuntu-vnc
root@ubuntu-vnc:~#
vncserver -list
TigerVNC server sessions: X DISPLAY # RFB PORT # RFB UNIX PATH PROCESS ID # SERVER
ssh://root@ubuntu-vnc:22SSH2xtermUTF-8
- 실행 중인 TigerVNC 세션 목록입니다. root에서는 빈 목록이 나왔습니다.
[직접 확인] 이 시점에도 VNC 접속은 되고 있었습니다. 서비스가 없는 게 아니라 root에서 안 보이는 상태였습니다.
원인. 일반 계정의 사용자 서비스로 등록됨
VNC를 쓰는 일반 계정으로 들어가 같은 확인을 했더니 바로 보였습니다.
ssh://user@ubuntu-vnc:22
1 ubuntu-vnc
user@ubuntu-vnc:~$
vncserver -list
TigerVNC server sessions: X DISPLAY # RFB PORT # RFB UNIX PATH PROCESS ID # SERVER 1 5901 1516 Xtigervnc
ssh://user@ubuntu-vnc:22SSH2xtermUTF-8
- 디스플레이
:1, 포트5901로 Xtigervnc가 실행 중입니다.
ssh://user@ubuntu-vnc:22
1 ubuntu-vnc
user@ubuntu-vnc:~$
systemctl --user list-units --all | grep -i vnc
vncserver@1.service loaded active running TigerVNC server :1 app-vncserver.slice loaded active active Slice /app/vncserver
ssh://user@ubuntu-vnc:22SSH2xtermUTF-8
--user를 붙이면 이 계정의 사용자 서비스를 봅니다.vncserver@1.service가active running이면 VNC가 사용자 서비스로 돌고 있는 것입니다.
ssh://user@ubuntu-vnc:22
1 ubuntu-vnc
user@ubuntu-vnc:~$
ss -tlnp | grep 590
LISTEN 0 5 0.0.0.0:5901 0.0.0.0:* users:(("Xtigervnc",pid=1516,fd=9))
LISTEN 0 5 [::]:5901 [::]:* users:(("Xtigervnc",pid=1516,fd=10))ssh://user@ubuntu-vnc:22SSH2xtermUTF-8
- 5901 포트를 어떤 프로세스가 열고 있는지 확인합니다.
0.0.0.0:5901과[::]:5901은 모든 네트워크에서 접속을 받는 상태라는 뜻입니다(아래 주의사항 참고).
[직접 확인] 일반 계정에서는 세션과 사용자 서비스가 모두 보였고, root에서는 아무것도 보이지 않았습니다. 같은 서버라도 어느 계정의 systemd로 보느냐에 따라 결과가 달랐습니다.
| 구분 | 시스템 서비스 | 사용자 서비스 |
|---|---|---|
| 명령 | sudo systemctl … | systemctl --user … (해당 계정으로) |
| 유닛 위치 | /etc/systemd/system/ | ~/.config/systemd/user/ 등 |
| 시작 시점 | 부팅 시 | 그 계정이 로그인할 때 (linger를 켜면 부팅 시) |
| root에서 보이나 | 보임 | 안 보임 |
해결 방법
VNC를 띄운 계정으로 재시작
ssh://user@ubuntu-vnc:22
1 ubuntu-vnc
user@ubuntu-vnc:~$
systemctl --user restart vncserver@1
ssh://user@ubuntu-vnc:22SSH2xtermUTF-8
- root가 아니라 VNC를 등록한 계정으로 로그인해서 실행합니다.
sudo를 붙이면 다시 root 범위가 되니 붙이지 않습니다. - 재시작하면 열려 있던 VNC 화면이 끊기니, 작업 중인 창은 저장해 둡니다.
ssh://user@ubuntu-vnc:22
1 ubuntu-vnc
user@ubuntu-vnc:~$
systemctl --user status vncserver@1
ssh://user@ubuntu-vnc:22SSH2xtermUTF-8
Active: active (running)이 보이면 정상으로 다시 올라온 것입니다.
root에서 그 계정의 서비스를 바로 다루고 싶다면 계정을 지정해 실행할 수도 있습니다.
ssh://root@ubuntu-vnc:22
1 ubuntu-vnc
root@ubuntu-vnc:~#
systemctl --user -M user@ restart vncserver@1
ssh://root@ubuntu-vnc:22SSH2xtermUTF-8
-M 계정@는 지정한 계정의 사용자 systemd에 붙어서 명령을 실행합니다.
[참고 · 직접 확인하지 않음]
-M user@ 방식은 systemd 문서 기준으로 정리했고, 이 서버에서는 실행해 보지 않았습니다.주의사항
재부팅 후 자동 실행: linger
ssh://user@ubuntu-vnc:22
1 ubuntu-vnc
user@ubuntu-vnc:~$
loginctl show-user user --property=Linger
ssh://user@ubuntu-vnc:22SSH2xtermUTF-8
Linger=no면 그 계정이 로그인하기 전까지 사용자 서비스가 시작되지 않습니다. 재부팅 후 아무도 로그인하지 않으면 VNC도 안 뜹니다.- 부팅만 해도 VNC가 떠야 하면
sudo loginctl enable-linger user로 켜고,systemctl --user enable vncserver@1로 자동 시작을 등록합니다.
5901이 모든 네트워크에 열려 있음
- VNC는 화면이 암호화되지 않는 경우가 많고 비밀번호도 짧게 제한됩니다. 내부망이라도
0.0.0.0:5901로 열어 두기보다는 접속 PC만 허용하는 것이 안전합니다. - 방법 1:
sudo ufw allow from 접속PC_IP to any port 5901처럼 방화벽으로 허용 대상을 제한 - 방법 2: VNC를
localhost에서만 받게 하고 SSH 터널(ssh -L 5901:localhost:5901 …)로 접속
[참고 · 직접 확인하지 않음] linger 설정과 방화벽 제한은 이 서버에서 적용하지 않았고, Ubuntu·TigerVNC 문서 기준으로 정리했습니다.
정리
Unit vncserver@1.service not found가 나와도 VNC가 접속된다면 사용자 서비스로 등록됐을 가능성이 크다.- VNC를 띄운 계정으로
vncserver -list,systemctl --user list-units | grep vnc로 확인한다. - 재시작은 그 계정에서
systemctl --user restart vncserver@1로 한다. - 부팅 시 자동 실행은 linger, 보안은 방화벽 제한이나 SSH 터널로 챙긴다.
관련 글: Ubuntu TigerVNC에서 Firefox 실행 안 됨 — snap cgroup 오류, 사용자 서비스 전환과 deb 교체로 해결 (VNC를 사용자 서비스로 바꾸게 된 이유)
다른 방식(x11vnc, GNOME 원격 데스크톱)에서 비슷한 문제가 있었다면 댓글로 남겨 주세요.