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版权协议,转载请附上原文出处链接和本声明。