로그아웃 후에도 vnc 서버를 활성 상태로 유지할 수 있습니까?

로그아웃 후에도 vnc 서버를 활성 상태로 유지할 수 있습니까?

저는 OpenSUSE를 사용하고 있으며 x11vnc 서버 시작 시 실행되는 스크립트를 만들었습니다. 그러나 사용자가 로그아웃하면 x11vnc가 종료됩니다. 자동으로 다시 시작하고 싶습니다. 여기 제가 쓴 스크립트가 있습니다. 부팅시 완벽하게 작동합니다.

#!/bin/sh
#
# /etc/init.d/vnc
#
### BEGIN INIT INFO
# Provides:          x11vnc server
# Required-Start:    xdm
# Should-Start: 
# Required-Stop: 
# Should-Stop: 
# Default-Start:     5
# Default-Stop:      0 1 2 6
# Short-Description: 
# Description:       Start or stop vnc server
### END INIT INFO


#INIT SCRIPT VARIABLES
SERVICE=$(basename $0)
#Gets the name of the script

BIN="/usr/bin/x11vnc"
#Binary path
ALLOWED_GROUP=$(getent group g_vnc-usr | awk -F ":" '{ print $4 }')
#Only inf-usr group is allowed to take control of any machine.

AUTH=`ps wwaux | grep '/X.*-auth' | sed -e 's/^.*-auth *//' -e 's/ .*$//' | head -n 1`

OPT="-display :0 -auth ${AUTH} -nopw -unixpw ${ALLOWED_GROUP} -shared -oa /var/log/vnc.log -xkb -bg -verbose -forever"
#Various options of the x11vnc providing auth, user auth, logging and "keep alive" connection.

CMD="${BIN} ${OPT}"
#Both bin and options are stored

. /lib/lsb/init-functions

rc_reset
# Reset status of this service

case "$1" in
    start)
    echo -n "Starting ${SERVICE}..."
        ## Start daemon with startproc(8). 
    /sbin/startproc ${CMD}

    ##>> /dev/null 2>&1
    sleep 2s

    # Remember status and be verbose.
        rc_status -v
    ;;

    stop)
    echo -n "Shutting down ${SERVICE}..."
    ## Stop daemon with killproc(8) 
    /sbin/killproc ${BIN}

    # Remember status and be verbose
    rc_status -v
        ;;

    restart)
    ## Stop the service and regardless of whether it was
    ## running or not, start it again.
    $0 stop
    $0 start

    # Remember status and be quiet
    rc_status
    ;;

    status)
    echo -n "Checking for service ${SERVICE}..."
    ## Check status with checkproc(8), if process is running
    ## checkproc will return with exit status 0.
    /sbin/checkproc ${BIN}

    # Remember status and be verbose
    rc_status -v
    ;;
    *)
    echo -n 
    echo -n "Usage: ${SERVICE} {start|stop|restart|status}"
    exit 1
    ;;
esac
rc_exit

이 스크립트를 사용하면 현재 로그인한 사람이 없더라도 그룹의 모든 사용자가 컴퓨터를 인수할 수 있습니다.

xinitrc사용 하고 추가하고 싶었어요exec /etc/init.d/vnc restart

감사합니다.

답변1

systemd를 사용하는 경우 여기의 다른 제안보다 훨씬 더 나은 솔루션은 시스템 작성자가 설계하고 권장하는 대로 systemd 단위 재정의 파일을 추가하는 것입니다.

이는 최소한의 사용자 정의와 향후 유지 관리 및 업그레이드에 미치는 영향을 최소화하면서 원하는 작업을 정확하게 수행합니다.

기본 시스템 서비스(:INTEGER 접미사 없음)의 이름이 vncserver@내 이름과 같은 경우 디렉터리를 만들고 이 파일을 name 으로 여기에 넣습니다 ./etc/systemd/system/[email protected]/override.conf

[Service]
Restart=on-success
RestartSec=10

그런 다음 실행하십시오 systemctl daemon-reload. 시스템이 이전 세션 프로세스를 근절하는 속도에 따라 RestartSec를 조정하십시오.

디렉토리와 파일을 수동으로 만드는 대신 대안으로 실행할 수 있습니다

systemctl edit vncserver@

상용구 텍스트가 지시하는 곳에 위의 텍스트를 입력하세요. 이 방법을 사용하면 디렉터리가 아닌 기본 서비스 이름만 알면 되며 edit 명령이 데몬 다시 로드를 처리합니다.

답변2

(댓글을 답변으로 변환)

인수 -loop는 루프에서 x11vnc를 다시 시작하는 데 사용될 수 있습니다. 매뉴얼 페이지에서:

x11vnc 프로세스가 종료될 때마다 다시 시작하는 외부 루프를 만듭니다. -bg 및 -inetd는 이 모드에서 무시됩니다(그러나 아래 -loopbg 참조).

X 서버가 종료되었다가 다시 시작되는 경우에도 계속하는 데 유용합니다(이 시점에서 프로세스는 물론 새 X 서버에 다시 연결하기 위한 권한이 필요합니다).

답변3

RHEL 상자에서 systemctl을 사용하여 다음과 같이 변경했습니다. 1분 후에 서비스를 시작하기 위해 "/bin/at now" 명령을 추가했습니다. 제 경우에는 중지 명령을 다음과 같이 변경했습니다.

ExecStop=/bin/sh -c '/usr/bin/vncserver -kill -9 %i > /dev/null 2>&1; echo "systemctl start vncserver@:1.service" | /bin/at now + 1 minute || :'

내가 편집한 내용:/etc/systemd/system/vncserver@:1.service

변경한 후 다음 명령을 실행하여 시스템을 업데이트합니다.systemctl 데몬 다시 로드

답변4

두 가지 명령을 더 추가해야 합니다: Restart=on-success그리고 서비스 파일 섹션 RestartSec=10내에 .[Service]

예를 들어 서비스 파일을 고려해보세요: /etc/systemd/system/vncserver@:2.service. 따라서 파일은 아래와 같이 보일 것입니다.

[단위]
Description=원격 데스크톱 서비스(VNC)
이후=syslog.target network.target

[서비스]
유형=포킹
ExecStartPre=+/usr/libexec/vncsession-복원 %i
ExecStart=/usr/libexec/vncsession-start %i
PID파일=/run/vncsession-%i.pid
다시 시작=성공 시
재시작초=10
SELinuxContext=system_u:system_r:vnc_session_t:s0

[설치하다]
WantedBy=다중 사용자.대상

그런 다음 실행 systemctl daemon-reload하고 systemctl restart vncserver@:2. 그러면 vnc 세션에서 로그아웃한 후에도 다시 로그인할 수 있습니다.

관련 정보