由于习惯在Windows下用TeamViewer,所以我在ubuntu下也装上了TeamViewer(deb包),可是TeamViewer开机自启选项怎么也改不了,查查进程和安装目录,才发现TeamViewer是在wine下运行的。好吧,先回到windows下分析分析。
TeamViewer官方下载页面:http://www.teamviewer.com/zhcn/download/linux.aspx
一.Windows下分析TeamViewer开机自启项,不想看的可以略过
1.对大多数软件来说,如果软件界面中提供了开机自启选项,那么设置开机自启的配置文件要么是软件的相关文件目录,要么是注册表
TeamViewer这个软件提供了开机自启选项,那么它究竟是在哪配置的呢?
我们这里用到一个工具ProcessMonitor(有些人称它为Procmon)
软件引用页: http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
下载地址:http://download.sysinternals.com/files/ProcessMonitor.zip
打开之后我们会看到一大堆事件,这时我们就要设置过滤器了。
首先我们过滤要监控的进程
2.使用Procmon中的过滤器过滤进程
点击倒三角
点击Architecture旁边的箭头,选择Process Name,
点击is旁边的箭头,选择begins with,
在文本框中输入TeamViewer
点Add,点OK,这样我们就过滤出以TeamViewer开头的两个进程TeamViewer.exe和TeamViewer_Service.exe了
但是过滤出来的事件还是有点多。
由于我们只关注注册表和文件系统的读写操作,我们依次点击工具栏的后三个按钮(分别是网络,进程,性能)
2.使用过滤器过滤文件操作
我们先来看看文件的变化
先工具栏注册表的按钮,这样就只显示文件操作了
但是还不够,由于我们基本只关注文件的创建和写操作,我们还要对结果进行过滤
CreateFile/WriteFile
添加两个过滤器 Operation contains CreateFile和Operation contains WriteFile
结果出来之后
程序就只是修改了TeamViewer9_Logfile.log等几个日志文件,说明不是我们想要的
3.使用过滤器过滤注册表操作
接下来我们分析注册表的变化,
首先工具栏的五个过滤图标只保留注册表的
删掉过滤文件系统的条件
接下来我们过滤操作,由于我们不清楚注册表表有哪些操作,我们猜想应该有cteate和write,但是不知道具体名字的时候我们该怎么做呢
点击Operation下的某一条记录比如RegEnumValue,点击鼠标右键,会有一个Exclude 'RegEnumValue'表示不包含RegEnumValue,点击它,我们就建立了一个Operation Exclude 'RegEnumValue' 的过滤器,然后我们再建立其他的过滤条件
最后只保留RegSetValue/RegCreateKey/RegDeleteKey就可以了,貌似这全是VB里面的函数名
做完这些之后我们设置TeamViewer里面的开机启动选项
取消开机自启后RegDeleteKey 了"Always_Online",RegSetValue "Autostart_GUI"=dword:00000000,重新选择开机自启则是相反的过程。
4.文本比对
为了方便比较,我们导出注册表进行文本比对
从下面这个路径导出注册表之后用Beyond Compare 3文件比对工具进行文本比对
HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer\Version9
开机自启的注册表文件为start.reg
取消开机自启选项的是nostart.reg
可以看到 取消开机自启后
"Always_Online"=dword:00000001这个键值对已经没有了
"Autostart_GUI"=dword:00000001这个键值改成了"Autostart_GUI"=dword:00000000
由此我们可以简单的看出来Always_Online这个键值对应开机自启选项
二.回到ubuntu找线索
由于windows是在注册表中定义开机自启的,自然而然的猜想,wine的注册表中会不会有相同的键值对呢?
TeamViewer的deb包在ubuntu系统中有两个配置的地方,分别是/opt/teamviewer9/和~/.config/teamviewer9/,先用ls命令看一下都有什么吧
ls ~/.config/teamviewer9/结果为
config dosdevices drive_c logfiles system.reg userdef.reg user.reg
ls /opt/teamviewer9/结果为
config doc logfiles tv_bin在~/.config/teamviewer9/下有三个reg注册表,拷贝过来打开看看
cp ~/.config/teamviewer9/*.reg ~/tmp/结果是里面没有任何关于TeamViewer和Always_Online的键值对
再看看,不是还有两个 config目录没看嘛?
第一个配置文件
cat ~/.config/teamviewer9/config/client.conf这里保存的是用户登陆的信息,部分文字如下
TeamViewer User Settings # It is not recommended to edit this file manually [int32] BuddyLoginFlags = 7 [strng] BuddyLoginName = ""第二个配置文件
cat /opt/teamviewer9/config/global.conf这里保存的是全局配置信息,部分文字如下
TeamViewer Global Settings # It is not recommended to edit this file manually [int32] Always_Online = 1 [bin ] Certificate =第三个配置信息
内容和第一个配置信息一样,路径是/opt/teamviewer9/config/用户名/client.conf
从第二个配置信息开头就可以看到有Always_Online这个字段,修改它的值为0就可以了
sudo vim /opt/teamviewer9/config/global.conf修改这个文件的
[int32] Always_Online = 1改为
[int32] Always_Online = 0
另外要注意的是:软件自己设置的禁止开机自启并不是真正的禁止开机,实际上还是有进程存在的,ubuntu下的进程名为teamviewerd,是个守护进程,同样Windows下也实现了类似的机制。
ps axj|grep teamviewerd查看结果,标题是我添加的,还有一个grep进程被我删了
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 1 1146 1146 1146 ? -1 Ssl 0 0:03 /opt/teamviewer9/tv_bin/teamviewerd -fteamviewerd进程的TPGID为-1即为守护进程