我有一个应用程序在 Ubuntu Server 14.04.3 上运行,使用 xsession 和 xorg 以及 google-chrome。我在机器上安装了 teamviewer 10,因此如果他们有互联网连接,他们就可以远程登录 PC 并编辑应用程序的设置。我想要做的是检测何时创建 teamviewer 会话(当有人登录 PC 时),并在一定时间后将其踢出(可以通过终止 Teamviewer 进程 ID 来实现)。
问题是我不知道我如何检测teamviewer会话何时开始。这可能吗?
答案1
我的主机上安装了 teamviewer 10 作为快速支持版本。
Teamviewer日志文件:
~/Desktop/TeamViewer/teamviewerqs/logfiles/TeamViewer10_Logfile.log
完整版:
~/.config/teamviewer10/logfiles/TeamViewer10_Logfile.log
因此,要检测会话,您可以使用以下方式查看此文件tail -f
以及模式 *"==== 。打开桌面!====". 一旦找到模式,就会在 60 秒后终止所需的进程。
tail -f "$HOME/Desktop/TeamViewer/teamviewerqs/logfiles/TeamViewer10_Logfile.log" \
| awk '/==== .*Open Desktop! ====/ { system("sleep 60 ; pkill -9 TeamViewer_Desktop") }'
答案2
我找不到任何命令行工具来检查当前会话。此外,TeamViewer 不会为每个新会话创建新进程。
我最终使用由 cYrus 编写的修改后的脚本直接检查创建的套接字如何确定 Linux 上的套接字连接启动时间
该脚本通过teamviewerd
守护进程检查已建立的连接。这取决于配置,但默认情况下,它会尝试端口,5938
如果失败,它会尝试443
,并且可能会80
。然后它会打印出所有套接字的寿命/正常运行时间(以分钟为单位)。
teamviewerd
在桌面应用程序启动时创建一个连接,然后为会话创建另一个新连接(我无法测试多个会话)
#!/bin/bash
function suptime() {
addr=${1:?Specify the remote IPv4 address}
port=${2:?Specify the remote port number}
pid=$(netstat -ntp 2>/dev/null | awk '
$6 == "ESTABLISHED" && $5 == "'$addr:$port'"\
{sub("/.*", "", $7); print $7}')
hex_addr=$(python -c "
import socket, struct;
print hex(struct.unpack('<L',
socket.inet_aton('$addr'))[0])[2:10].upper().zfill(8)")
hex_port=$(python -c "print hex($port)[2:].upper().zfill(4)")
inode=$(awk '$3 == "'$hex_addr:$hex_port'" {print $10}' /proc/net/tcp)
time=$(find /proc/$pid/fd -lname "socket:\[$inode\]" -printf %A@)
LANG=C printf '%i' $(bc <<<"($(date +%s.%N) - $time)/60")
}
ns=$(netstat -tpn | grep -e ":5938 *ESTABLISHED *[0-9]*/teamviewerd" -e ":443 *ESTABLISHED *[0-9]*/teamviewerd" | awk '{print $5}')
for s in $ns
do
addr=$(echo $s | awk '{split($0,a,":"); print a[1]};')
port=$(echo $s | awk '{split($0,a,":"); print a[2]};')
echo $(suptime $addr $port)
done
其他可能的选择:
- 检查日志中的连接,就像 Amit 在他的回答中所做的那样。
- 使用
xdotool
或类似工具,打开侧面板然后关闭会话。
答案3
作为TeamViewer 12和Ubuntu 16.04,一种新工艺
/opt/teamviewer/tv_bin/TeamViever_Desktop --IPCport 5936 --module 1
随会话的开始而产生。这很容易被监控。
(我知道这是一个老问题,但有人可能会发现更新很有用)