lxinput在未保存设置时是如何临时调整鼠标和键盘响应的?strace跟踪貌似没看出来?

其它类软件,非上述版软件
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

lxinput在未保存设置时是如何临时调整鼠标和键盘响应的?strace跟踪貌似没看出来?

#1

帖子 科学之子 » 2016-09-08 4:22

lxinput在未保存设置时是如何临时调整鼠标和键盘响应的?strace跟踪貌似没看出来?

代码: 全选

strace -e trace=\!gettimeofday,recvmsg,clock_gettime,poll,writev  lxinput
排除了那些被疯狂调用的系统调用后进行设置(但不保存),没有跟踪到任何调用?
头像
astolia
论坛版主
帖子: 6422
注册时间: 2008-09-18 13:11

Re: lxinput在未保存设置时是如何临时调整鼠标和键盘响应的?strace跟踪貌似没看出来?

#2

帖子 astolia » 2016-09-22 15:56

这个肯定是跟xserver通讯让x自己去调,又不是通过系统调用来调整的
翻了下代码,果不其然

代码: 全选

wget http://ftp.ubuntu.com/ubuntu/pool/universe/l/lxinput/lxinput_0.3.5.orig.tar.xz -O- | tar -xJOf - lxinput-0.3.5/src/lxinput.c | sed -n '59,80p'
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: lxinput在未保存设置时是如何临时调整鼠标和键盘响应的?strace跟踪貌似没看出来?

#3

帖子 科学之子 » 2016-09-22 16:39

astolia 写了:这个肯定是跟xserver通讯让x自己去调,又不是通过系统调用来调整的
翻了下代码,果不其然

代码: 全选

wget http://ftp.ubuntu.com/ubuntu/pool/universe/l/lxinput/lxinput_0.3.5.orig.tar.xz -O- | tar -xJOf - lxinput-0.3.5/src/lxinput.c | sed -n '59,80p'
但我无法理解,"通讯"难道不需要系统调用吗?
比如写个特殊文件,或者发送了信号量什么的,不都是需要"系统调用"吗?
头像
astolia
论坛版主
帖子: 6422
注册时间: 2008-09-18 13:11

Re: lxinput在未保存设置时是如何临时调整鼠标和键盘响应的?strace跟踪貌似没看出来?

#4

帖子 astolia » 2016-09-23 22:52

是要用系统调用啊,我的意思是lxinput只是把调整参数通过系统调用发给xserver,你不会看到它用某个系统调用直接操作某个设备文件的(不过这些调整实际也用不着操纵设备文件,只需要忽略设定时间段内的相同设备事件就行了)。另外所有的调整都是持久性的,也不存在你以为的临时调整,不保存时实际是再做一次调整恢复初始状态。
和xserver通信是通过本地socket文件/tmp/.X11-unix/X*,所以发送数据肯定是用write系或send系的系统调用,我看了一下,恰恰就是你排除掉的writev

以下是我的系统上strace列出的相关系统调用

代码: 全选

...前略...
socket(AF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_LOCAL, sun_path=@"/tmp/.X11-unix/X0"}, 20) = 0
...中略...
writev(3, [{"\22\0\7\0\3\0\240\3w\1\0\0\6\0\0\0 \0\0\0\1\0\0\0\364\306\274\0", 28}, {NULL, 0}, {"", 0}], 3) = 28
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\34\0W\4\3\0\240\3w\1\0\0\376\306\274\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096}], msg_controllen=0, msg_flags=0}, 0) = 32
...后略...
开始时创建了个文件号fd为3的socket,然后连接到/tmp/.X11-unix/X0,以后都是通过writev和recvmsg向socket文件,或者说是socket文件背后的xserver收发消息
回复