linux – 如何找到断开连接的xrdp会话?
我这里有一台运行xrdp的Xubuntu 14.04服务器让几个用户连接到它.
现在有一个问题:通过RDP从 Windows瘦客户端访问此服务器的用户通常使用“X”来关闭RDP会话(因此断开但不注销). 我知道sesman.ini中有一些选项来处理这种行为,但正如联机帮助页所说,这些选项目前被忽略(并且已经存在多年). 现在我需要破解处理断开连接的会话的东西.我的第一个想法是杀死所有断开连接的远程用户 – 但我不知道如何获取会话断开的信息. 那么……我如何找到断开连接的会话? 解决方法
这是一种获取断开连接的xrdp会话列表的方法.它依赖于以下事实:在正常的X会话管理器使用中,xrdp服务器是唯一建立到Xvnc X Window System显示服务器的TCP连接的客户端.当xrdp会话处于活动状态时,关联的Xvnc显示服务器有两个TCP连接,一个处于ESTABLISHED状态,另一个处于LISTEN状态.使用lsof(1)程序看起来像这样.
$sudo lsof -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Xvnc 1625 guest 1u IPv4 252910 0t0 TCP 127.0.0.1:5910 (LISTEN) Xvnc 1625 guest 9u IPv4 261226 0t0 TCP 127.0.0.1:5910->127.0.0.1:35242 (ESTABLISHED) 如果远程会话的用户通过关闭RDP连接(或者,在Apache Guacamole RDP会话的情况下,通过关闭浏览器窗口)放弃它,它看起来像这样: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Xvnc 1625 guest 1u IPv4 252910 0t0 TCP 127.0.0.1:5910 (LISTEN) 请注意,此断开连接的Xvnc显示服务器进程没有ESTABLISHED连接.因此,任何只监听的Xvnc进程都是断开连接的会话. 这是一个shell脚本(名为lsdisconnected),它显示每个断开连接的远程会话的PID和USER.它使用lsof(1)和gawk(1)来实现连接逻辑. #!/bin/bash sudo lsof -FRgpLT -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999 | gawk ' match($0,/^p([0-9]+)/,p) {pid = p[1]; pids[pid]=0; } ; match($0,/^L([A-Za-z0-9]+)/,p) {user[pid] = p[1]; } ; /TST=LISTEN/ {pids[pid] = pids[pid] - 1 ;}; /TST=ESTABLISHED/{pids[pid] = pids[pid] + 1}; END { for (pid in pids){ if (pids[pid] < 0) { print pid,user[pid]; } }}; ' 这是查找断开连接的远程桌面会话的便捷方法;断开连接后立即工作,无需使用空闲时间. 对于那些可能不熟悉lsof(1)的人,这里是对这个例子中命令行参数的解释. > -b -w避免了lsof内核等待.这里不需要它们.> -n避免对主机名进行DNS查找.> -c / ^ Xvnc $/ b使用正则表达式查找具有确切命令名称Xvnc的进程.> -a告诉lsof在过滤时使用AND而不是OR.> -iTCP:5900-5999过滤器,TCP端口编号为5900 – 5999,用于X显示连接.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 当我SSH到服务器时更改默认目录
- 如何在arch linux上为php(cli)和php-fpm创建单独的配置文件
- linux – 为什么/ proc / cpuinfo显示矛盾的处理器速度?
- Linux vim常见使用详解
- php – 在Gearman安排一份特定日期和时间的工作
- linux – Gnome shell特权升级
- 如何在Linux中显示IPv6 NDISC缓存?
- LINUX教程:Linux下配置SSH无秘钥登录
- Getting over the dangers of rm command in Linux---refer
- 图像处理 – 用于图像处理的Rasberry Pi HDMI输入和HDMI输出