vncserver 获取DisplayNumber bash版本

vncserver中GetDisplayNumber,CheckDisplayNumber是由Perl语言实现的函数。由于项目需要,改为bash脚本。
CheckDisplayNumber 检查display number是否可用
GetDisplayNumber 获取最小可用的显示号

TurboVNC中检查5900+n,6000+n两组端口是否被占用,检查/tmp/.X{n}-lock,/tmp/.X11-unix/X{n}文件是否存在。同事满足上述4个条件才可以认为该display number可用。

HOST=$(uname -n)
function get_display_number() {
    for ((i=1; i<100; i++))
    do
        if check_display_number $i ;then
            return $i
        fi
    done

    echo "no free display number on $HOST.\n" >&2;
    exit 1
}

function check_display_number() {
    local NUMBER=$1
    if lsof -i:$((6000 + $NUMBER)) >/dev/null ;then
        return 1
    fi

    if lsof -i:$((5900 + $NUMBER)) >/dev/null ;then
        return 1
    fi

    if [ -e "/tmp/.X$NUMBER-lock" ] ;then
        echo "\nWarning: $HOST:$NUMBER is taken because of /tmp/.X$NUMBER-lock\n" >&2;
        echo "Remove this file if there is no X server $HOST:$NUMBER\n" >&2;
        return 1
    fi

    if [ -e "/tmp/.X11-unix/X$NUMBER" ] ;then
        echo "\nWarning: $HOST:$NUMBER is taken because of /tmp/.X11-unix/X$NUMBER\n" >&2;
        echo "Remove this file if there is no X server $HOST:$NUMBER\n" >&2;
        return 1
    fi
    return 0
}

版权声明:本文为DMKun原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。