linux uos悬浮窗口置顶问题

  • 问题背景

公司软件有一个功能,在PPT播放时,我们软件悬浮窗口需要在WPS幻灯片上层显示,方便客户操作按钮。在window 上我们设置了窗口的topmost 所以能够显示在最前面。如下图所示:

在这里插入图片描述

但是在软件适配国产操作系统Linux统信和麒麟在wps播放时,悬浮窗不能显示到最前面

最终解决办法

把WPS播放窗口设置为其他普通窗口的子级窗口

解决过程

首先分析了下,可能解决的技术方案如下:

  • 通过窗口ID 设置层级
  • 通过窗口ID 设置父子级关系
  • 取消wps播放窗口的全屏

最开始考虑的是把WPS播放窗口,取消全屏状态,我们软件悬浮窗口就可以显示到最上层。命令行如下:

wmctrl -ir <wps播放窗口id> -b remove,fullscreen

通过验证发现是可行的,也达到了预期。

然而,在开发的过程中发现,这样设置后当时是生效了,但是(万事就怕但是啊…)只要PPT播放下一页我们的悬浮窗口又被挡住了。发现这个问题后又开始了其他方案研究。其中考虑过很多技术方案,包括使用WPS nodeJS插件等等。

最终的解决方法刚刚说了:”把WPS播放窗口设置为其他普通窗口的子级窗口“。

步骤如下:

  • 创建一个自己的非全屏的普通窗口把任务栏的工具条和窗口标题栏隐藏。

  • 获取wps播放窗口和自己创建窗口的id

  • 把WPS播放的窗口通过命令行设置为自己创建的普通窗口的子级

命令行如下:

xdotool windowreparent <wps窗口id> <自己创建的普通窗口id>

安装上述的办法验证后(包括翻页)都没问题。

但是有个弊端PPT播放时不是全屏了,能看到任务栏。这个解决这个弊端。我们在把WPS窗口设置为普通窗口子级时,调用命令行,先把任务栏设置为自动隐藏。 PPT播放结束后,又通过命令行把任务栏设置为一直显示。

命令如下:

隐藏任务栏

dbus-send --print-reply --type=method_call --dest=com.deepin.dde.daemon.Dock /com/deepin/dde/daemon/Dock org.freedesktop.DBus.Properties.Set string:'com.deepin.dde.daemon.Dock' string:'HideMode' variant:int32:1

显示任务栏

dbus-send --print-reply --type=method_call --dest=com.deepin.dde.daemon.Dock /com/deepin/dde/daemon/Dock org.freedesktop.DBus.Properties.Set string:'com.deepin.dde.daemon.Dock' string:'HideMode' variant:int32:0

以上就是解决这个问题的全过程~~~~~!

在研究此解决方案时,了解到的命令行使用

获取窗口ID

终端运行 :xwininfo 然后在点击你想要获取的窗口,就可以获取到改窗口ID

设置某个窗口层级为最底层

wmctrl -i -r xxxxxx -b add,below

  • 设置 a 窗口为 b 创建的子窗口(子窗口就可以显示在父窗口上层)

xdotool windowreparent <a窗口id> <b窗口id>

  • 查看某个窗口的属性设置

xprop -id <窗口id> | grep _NET_WM_STATE

  • 设置窗口的属性

xprop -id <窗口ID> -f _NET_WM_STATE 32a -set _NET_WM_STATE '属性值多个使用逗号链接'

_NET_WM_STATE 是一个由 EWMH(Extended Window Manager Hints)定义的窗口属性,用于在 X Window System 中表示窗口的各种状态。这个属性是一个ATOM类型数组,其中每个元素都是一个表示窗口状态的ATOM。

_NET_WM_STATE 属性通常包含如下几种类型的窗口状态:

_NET_WM_STATE_MODAL: 窗口是模态的,意味着它阻止了其他窗口的交互。
_NET_WM_STATE_STAYS_ON_TOP: 窗口始终显示在其他窗口的顶部。
_NET_WM_STATE_FULLSCREEN: 窗口处于全屏状态。
_NET_WM_STATE_MAXIMIZED_HORZ: 窗口在水平方向上被最大化。
_NET_WM_STATE_MAXIMIZED_VERT: 窗口在垂直方向上被最大化。
_NET_WM_STATE_HIDDEN: 窗口被隐藏。
_NET_WM_STATE_SHADED: 窗口被卷起(只显示标题栏)。
_NET_WM_STATE_SKIP_TASKBAR: 窗口不在任务栏中显示。
_NET_WM_STATE_SKIP_PAGER: 窗口不在切换器中显示。
要使用 xprop 查看窗口的 _NET_WM_STATE 属性,可以使用以下命令:

bash
xprop -id <窗口ID> _NET_WM_STATE
将 <窗口ID> 替换为你想查询的窗口的实际ID。

如果你想要修改窗口的 _NET_WM_STATE 属性,可以使用 xprop 的 -f(指定属性名)和 -set(设置属性值)选项。例如,要将窗口设置为全屏并且置顶,可以使用:

xprop -id <窗口ID>  -f _NET_WM_STATE 32a -set _NET_WM_STATE '_NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_STAYS_ON_TOP, _NET_WM_STATE_SKIP_TASKBAR, _NET_WM_STATE_FULLSCREEN'

请注意,设置窗口状态属性通常需要窗口管理器的支持,不是所有的窗口管理器都会响应这些属性。此外,某些状态可能需要特定的用户交互或应用程序逻辑来生效。

_NET_WM_STATE 属性的值是一个32位的ATOM数组,其中每个ATOM都是窗口状态的一个标识符。这些状态可以组合使用,以表示窗口的多个状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/390048.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推动未来的引擎:人工智能大模型的现状与发展

推动未来的引擎&#xff1a;人工智能大模型的现状与发展 一、引言 随着人工智能技术的迅速发展&#xff0c;人工智能大模型作为其中的重要组成部分&#xff0c;正逐渐成为推动科技进步的重要引擎。无论是在自然语言处理、计算机视觉&#xff0c;还是智能推荐等领域&#xff0…

Python酷库之旅-第三方库Pandas(061)

目录 一、用法精讲 236、pandas.Series.explode方法 236-1、语法 236-2、参数 236-3、功能 236-4、返回值 236-5、说明 236-6、用法 236-6-1、数据准备 236-6-2、代码示例 236-6-3、结果输出 237、pandas.Series.searchsorted方法 237-1、语法 237-2、参数 237-…

Kubernetes 学习记录

https://note.youdao.com/ynoteshare/index.html?idbc7bee305611b52d6900ba209a92bd4d&typenote&_time1694072007342 概览 K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称&#xff0c;源于希腊语&#xff0c;意为“舵手”或“…

江科大/江协科技 STM32学习笔记P17

文章目录 一、TIM输入捕获输入捕获与输出比较的关系频率测量测频法测周法 输入捕获的电路异或门的执行逻辑 输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构输入捕获模式测频率main.c 输入捕获模式测占空比main.c 一、TIM输入捕获 输入捕获与输出比较的关系 在输出比较中…

PMP--冲刺--易混概念

文章目录 十大知识领域一、整合管理项目管理计划与项目文件的区分&#xff1a; 二、范围管理三、进度管理赶工与快速跟进的区分&#xff1a;赶工增加资源&#xff0c;以最小的成本代价来压缩进度工期&#xff1b;快速跟进&#xff0c;将正常情况下按顺序进行的活动或阶段改为至…

秋招突击——算法训练——8/1——用友集团笔试

文章目录 引言正文小友的生产线个人实现参考实现 小友策划游戏人物个人实现参考实现 最佳工作任务安排个人实现参考实现 大众评分最高的一次旅程 总结 引言 今天晚上七点钟到九点钟是用友集团的笔试&#xff0c;作为今天算法练习的主要内容&#xff01;具体怎么样&#xff0c;…

Python练习2

文章目录 主要内容一.Python基础练习题1.密码验证合格程序代码如下&#xff08;示例&#xff09;: 2.两数之和代码如下&#xff08;示例&#xff09;: 3.字符个数统计代码如下&#xff08;示例&#xff09;: 总结 主要内容 Python基础练习题 一.Python基础练习题 1.密码验证合…

频率的工程测量01 - Rif算法的构造

1.原始文档 《用于正弦波频率估计的修正I-Rife算法》&#xff0c;王哲文&#xff0c;2024 DOI&#xff1a; 10. 16337/j. 1004‑9037. 2024. 02. 019 1.1 这篇论文所属的自科基金U21A20500&#xff1a;近5年所承担的重要科研项目表-智能感知系统与安全教育部重点实验室&#…

lua学习(1)

vscode打开c或者lua文件 插件显示禁用&#xff0c;怎么开启插件。 1. lua 字符串 单个引号和双引号都可变量的定义默认是全局的删除一个变量将其赋值为nil即可 如&#xff1a; bnilnil还可以对表中的数据进行删除&#xff0c;也可删除一个表只要变量不是nil&#xff0c;变…

c语言第七天笔记

作业题&#xff1a; 设计TVM&#xff08;地铁自动售票机&#xff09;机软件。 输入站数&#xff0c;计算费用&#xff0c;计费规则&#xff0c;6站2元&#xff0c;7-10站3元&#xff0c;11站以上为4元。 输入钱数&#xff0c;计算找零(找零时优先找回面额大的钞票)&#xff0…

Nat网络地址转换实验

一、实验拓扑 二、实验要求 三、实验思路 四、实验展示 1.接口IP配置 telnet路由器 r1 r2 r3 pc2 2.全网可达&#xff08;给边界路由器&#xff0c;私家路由器写上缺省 &#xff0c;还要用到nat地址转换&#xff0c;多对多一对多&#xff0c;端口映射&#xff09;因为左右…

华为LTC流程体系详解

LTC&#xff0c;全称Lead to Cash&#xff0c;中文翻译为从线索到现金&#xff0c;是一种企业运营管理思想&#xff0c;也是一个集成的业务流程。它涵盖了企业从接触客户到收到客户回款的整个流程&#xff0c;通过科学化管理&#xff0c;实现更高效地将线索客户转化为付费客户。…

说说ip地址和mac地址的区别

随着互联网的飞速发展&#xff0c;网络连接已成为我们日常生活中不可或缺的一部分。然而&#xff0c;在享受网络带来的便利时&#xff0c;你是否曾好奇过那些让设备能够相互通信的关键技术&#xff1f;IP地址与MAC地址&#xff0c;作为网络通信中的两大基石&#xff0c;它们各自…

3D生物打印咋实现?重组弹性蛋白来助力!

Human-Recombinant-Elastin-Based Bioinks for 3D Bioprinting of Vascularized Soft Tissues是发表于《ADVANCED MATERIALS》上的一篇文章&#xff0c;介绍了一种基于重组人原弹性蛋白的生物墨水&#xff0c;用于3D生物打印复杂软组织。该生物墨水由GelMA和MeTro组成&#xff…

[Docker][Docker Container]详细讲解

目录 1.什么是容器&#xff1f;2.容器命令1.docker creatre2.docker run3.docker ps4.docker logs5.docker attach6.docker exec7.docker start8.docker stop9.docker restart10.docker kill11.docker top12.docker stats13.docker container inspect14.docker port15.docker c…

设施农业“AutoML“时代:大模型自动调参,让农业算法模型更简单易用

&#xff08;于景鑫 北京市农林科学院智能装备技术研究中心&#xff09;设施农业是现代农业的重要发展方向,但在数字化、智能化的进程中仍面临诸多挑战。传统的农业算法模型虽然可以为设施农业提供一定的决策支持,但在实际应用中往往受限于参数调优复杂、模型泛化能力差等因素。…

实例分割-Yolact/Yolact++训练自己数据集

前言 本文主要用于记录实例分割模型yolact和yolact的环境配置&#xff0c;以及成功训练自己数据集的整个过程~ 注意&#xff1a;这里要重点提醒一下&#xff0c;DCNv2对RTX系列不友好&#xff0c;我第一次使用4090服务器&#xff0c;编译持续有问题&#xff0c;被迫放弃&#…

window安装elasticsearch和可视化界面kibana

ElasticSearch 官网下载zip安装包并解压 Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic 修改配置文件 改选项是指定ssl访问还是普通http访问 不改的话使用http访问不了&#xff0c;得使用https 浏览器访问 localhost:9200 Kibana Download Kibana Free |…

Android Listview notifyDataSetChanged() 不起作用

private ArrayList<Map<String, String>> data new ArrayList<Map<String, String>>(); private ArrayList<Map<String, String>> delivered_data new ArrayList<Map<String, String>>(); 如果直接将arraylist 的数据直接…

机器学习-31-多变量异常检测LOF算法(实战)

一文读懂异常检测 LOF 算法(Python代码) 1 LOF算法 一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法。 Local Outlier Factor(LOF)是基于密度的经典算法(Breuning et. al. 2000), 文章发表于SIGMOD 2000, 到目前已经有3000+的引用。 在LOF之前…