140、【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(六)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
之前 blog
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(一)
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(二)
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(三)
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(四)
【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(五)
分析了下 strace
的追踪日志以及里面 open 命令和 openat 命令的区别,还有里面涉及的相关宏定义,以及 D-Bus 与 GNOME 的概念,并分析了 dbus-send 命令与 D-Bus 的关系,还分析了日志中不是 GNOME 和 XFCE 的描述,xprop 命令的用法,下面继续来看下
strace 日志解析
回到 strace 日志
这里 22 行里有记录 -root
选项,查看 xprop
命令帮助文档,描述如下
可以看到,-root
选项指定了 X Window 中根窗口(root window)为目标窗口,这在根窗口被完全挡住的时候很有用
这里提到了根窗口的概念
在 Linux/Unix 的 X Window 系统中,根窗口是最底层的背景窗口,根窗口会覆盖整个屏幕,是所有其他窗口,比如浏览器,终端,对话框等的父窗口,通常看到的壁纸桌面背景就是画在根窗口上的。
所以 xprop -root
命令会显示桌面背景,工作区,窗口管理器等全局信息
然后 -root
选项后面还跟了个 _DT_SAVE_MODE
,这个 _DT_SAVE_MODE
的全称为 Desktop Save Mode,从其命名来看,可以知道这个东西是用来保存点什么东西的
实际上,这个 _DT_SAVE_MODE
是根窗口上的一个属性,类型通常是 STRING 字符类型,常见值包括 “xfce4”,“gnome”,“kde” 等,这个属性可以标识当前桌面环境的会话类型,并用于会话保存与恢复
这里又涉及到一个会话概念
在桌面环境中,一个会话指的是当前登录后,所有正在运行的图形应用程序和它们的状态的集合,比如有多个应用程序:打开了 Firefox 浏览器,里面可能有 5 个标签页,一同时打开了图像编辑窗口,正在编辑一张图片,同时有两个终端窗口,分别在不同的目录下工作,还有音乐播放器正在播放某个播放列表等等,这些工作状态的整体快照(当前这个时刻的各个应用程序状态),就叫做一个会话
然后上面的会话保持与恢复是指系统在注销或重启时,自动保存当前所有程序的状态(窗口位置,打开的文件,工作区等),并在下次登录时,自动重新启动这些程序并恢复它们之前的状态,让人感觉像是从没退出过电脑,相当于是系统能记住并还原之前的工作状态,这样能提升用户体验,避免重复打开文件和调整窗口
另外,需要注意的是,_DT_SAVE_MODE 不是标准,而是根窗口的一个私有属性,是历史遗留的 X Window 窗口属性,主要由 XFCE 设置,用于标识桌面环境类型,没有官方定义,在实践中可以被用于桌面环境探测
所以这里 22 行日志的含义是,使用 xprop
命令读出根窗口的 _DT_SAVE_MODE
属性
而且由于 _DT_SAVE_MODE
属性由主要由 XFCE 设置,所以结合后面 24 行的 grep
命令,可以用来探测当前的桌面环境是否为 XFCE
下面最后再分析下 24 行这里的 grep
命令匹配
主要是分析下这里的正则日志 = \\\"xfce4\\\"$
- =:匹配字面量,这里是匹配后面的
xfce4
字符串 \\\"
:转义为双引号"
,所有不可见字符或特殊字符,比如 “,\,\n 等,都要用 \ 加转义形式表示,而由于 strace 是一个调试工具,它通过系统调用接口读取进程的内存数据,当 strace 看到 argv[1] 是一个字符串 " = “xfce4”$” 时,为了防止歧义和控制字符干扰显示,strace 会对特殊字符进行二次转义,所以这里出现了三个\
- $:行尾,正则表达式中表示行结束(^ 表示行开始)
ok,先到这里,下篇 blog 继续