我这里有一个 Xubuntu 14.04 服务器,它运行 xrdp 来让几个用户连接到它。
现在有一个问题:从 Windows 瘦客户端通过 RDP 访问此服务器的用户通常使用“X”关闭 RDP 会话(因此断开连接但不注销)。
我知道 sesman.ini 中有一些选项可以处理这种行为,但正如联机帮助页所说,这些选项目前被忽略(并且已经被忽略了多年)。
可以解决我的问题的选项是:
KillDisconnected
DisconnectedTimeLimit
IdleTimeLimit
现在我需要破解一些处理断开连接的会话的东西。我的第一个想法是杀死所有断开连接的远程用户 - 但我不知道如何获取哪些会话断开连接的信息。
那么......我如何找到断开连接的会话?
或者:是否已经有任何首选方法来处理断开连接的会话?
我终于找到了解决这个问题的办法。
首先,我必须安装一个名为的小程序xprintidle:
sudo apt-get install xprintidle
Run Code Online (Sandbox Code Playgroud)
之后,我编写了一个小的 bash 脚本,首先获取 Xvnc 和 xrdp 使用的所有显示,然后检查这些显示会话是否空闲了超过几分钟:
#!/bin/bash
displays=`ps aux | grep Xvnc | grep -v 'grep\|sed' | sed -r 's|.*(Xvnc :[0-9]*).*|\1|' | cut -d' ' -f 2`
limit=180
date
echo "Checking for inactive sessions!"
while read -r d; do
export DISPLAY=$d
idle=`xprintidle`
idleMins=$(($idle/1000/60))
if [[ $idleMins -gt $limit ]]; then
echo "WARN Display $d is logged in for longer than ${limit}min (${idleMins}m)"
else
echo "INFO Display $d is still ok (${idleMins}m)"
fi
done <<< "$displays"
Run Code Online (Sandbox Code Playgroud)