linux uos悬浮窗口置顶问题

news2024/9/20 20:23:13
  • 问题背景

公司软件有一个功能,在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.coloradmin.cn/o/1973521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式 贪婪与非贪婪匹配

目录 一. 回顾二. 遇到的问题三. 分析四. 解决4.1 转换为非贪婪模式匹配4.2 提高匹配的精度 一. 回顾 我们在正则表达式 分组与非捕获组这篇文章中&#xff0c;有如下分组匹配案例 <select name"fruit_console"><option value"apple" selected&…

银河麒麟V10使用vsn

环境:电脑windows11 ,系统银河麒麟V10的,通过堡垒机链接的,vsn也可以通过堡垒机链接,就相当于自己链接的时候不需要输入ip和端口号之类的, 目前银河麒麟机器上已经安装了vsn 步骤1:windows本地机器安装RealVNC https://www.realvnc.com/en/connect/download/viewer…

(三)springboot2.7.6集成activit5.23.0之流程跟踪高亮显示

1.引入diagram-viewer。 上一篇集成流程设计器时已经把diagram-viewer文件夹拷贝过来了。所以这一步就省略了。 2.引入依赖activiti-diagram-rest。 <dependency><groupId>org.activiti</groupId><artifactId>activiti-diagram-rest</artifactId…

设施农业智能化新引擎:AutoML让复杂农业算法唾手可得

&#xff08;于景鑫 北京市农林科学院智能装备技术研究中心&#xff09;近年来,人工智能技术蓬勃发展,大模型呈现出肆意生长之势,为各行各业带来新机遇。AutoML作为新一代自动化机器学习技术,承载着颠覆传统、引领变革的使命,正逐渐成为现代农业的"新宠"。本文将深入…

HCIP学习作业一 | HCIA复习

要求&#xff1a; R1-R2-R3-R4-R5 RIP 100 运行版本2 R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&#xff0c;R1-R2之间…

Suno声称在受版权保护的音乐上训练模型属于“合理使用“

继美国唱片业协会&#xff08;RIAA&#xff09; 最近对音乐生成初创公司 Udio 和 Suno 提起诉讼之后&#xff0c;Suno 在周四提交的一份法庭文件中承认&#xff0c;该公司确实使用了受版权保护的歌曲来训练其人工智能模型。但它声称&#xff0c;根据合理使用原则&#xff0c;这…

Uni-APP页面跳转问题(十六)

【背景】最近在做公司一个PAD端,谁被点检功能,主要时为了移动端点检设备和打印标签,需求比较简单就是扫描设备二维码,问题在于扫描后要能够重复进行多设备的扫描;早期开发的设备点检能够满足需求但是当连续扫描五六十个设备后,APP卡死,必须重启才能使用。 界面原图: 输…

智慧水务项目(四)django(drf)+angular 18 添加drf_yasg api接口文档

一、说明 文档api接口是必须的 本来准备用coreapi&#xff0c;据说drf_yasg更流弊 二、步骤 1、requirements.txt添加drf-yasg 2、settings.py中添加部分代码 drf_yasg需要与django.contrib.staticfiles配套使用&#xff0c;一般情况下&#xff0c;项目创建都会在INSTALLE…

PCG —— 基础使用

目录 一&#xff0c;基础知识 在关卡添加PCG资产 常见设置 调试 二&#xff0c;基础节点 Surface Sampler Static Mesh Spawner Transform Point Normal To Density Density Filter Bounds Modifier Self Prunning Difference Get Spline Data Spline Sampler …

LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】

【栈】No. 0155 最小栈【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xff01; …

SAP EPPM-CPM(商业项目管理)模块简介

经过十几年的发展&#xff0c;SAP诞生了很多相关管理相关的模块&#xff0c;比如最经典的&#xff0c;无可替代的ERP核心组件之一的PS&#xff08;Project System&#xff09;模块&#xff0c;也有很多年历史的投资组合及项目管理PPM&#xff08;Portfolio Management and Proj…

GE电源维修 服务器 交换机电源维修CAR2512TE

GE电源维修 GV服务器电源维修 交换机电源维修 服务器电源模块维修的时候&#xff0c;我们先需要利用万用表检测一下各功率器件是否存在击穿短路&#xff0c;例如电源整流桥堆、开关管、高频大功率整流管、浪涌电流的大功率电阻是否烧断等&#xff0c;然后需要再检测各输出电压…

Kithara与Dlib (二) - 人脸实时检测

Kithara和Dlib进行人脸实时检测 目录 Kithara和Dlib进行人脸实时检测ResNet (残差网络)流程介绍核心代码性能测试开源源码 ResNet (残差网络) ResNet&#xff0c;全称为Residual Network&#xff08;残差网络&#xff09;&#xff0c;是由何凯明&#xff08;Kaiming He&#x…

飞瓜数据没有视频号爆款视频你就错过了涨粉的最新方法!

为了帮助用户更快的了解用户需求并切入视频号营销中&#xff0c;也为大家提供了更多的垂直类目。 飞瓜数据 飞瓜数据为很多视频平台提供了视频相关的数据服务&#xff0c;但我们发现并飞瓜并没有参与视频号相关的内容仅在视频号直播做了相关的扩展。视频号相关的数据并未提供。…

Java中等题-多数元素2(力扣)【摩尔投票升级版】

给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;[3] 示例 2&#xff1a; 输入&#xff1a;nums [1] 输出&#xff1a;[1]示例 3&#xff1a; 输入&#xff1a;num…

队列的基本运算(顺序,环形,链式)

以下分别介绍了顺序队列&#xff0c;环形队列&#xff0c;链式队列的基本运算。主要有五种基本运算&#xff1a;1.初始化队列&#xff0c;2.销毁队列&#xff0c;3.判断队列是否为空&#xff0c;4.进队列&#xff0c;5.出队。 目录 顺序队列 环形队列 链式队列 顺序队列与环…

《LeetCode热题100》---<5.③普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 方法一&#xff1a;将数组视为哈希表 class Solution {public int firstMissingPosi…

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

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

位运算(更新中)

一、基础知识 1.基础位运算 << 左移操作符 &按位与 有0就是0 >>右移操作符 | 按位或 有1就是1 ~按位取反 ^异或 相同为1&#xff0c;相异为0 /…

大模型检索X一键成片,巴黎奥运的AI新演绎

媒体智能与巴黎奥运的一场邂逅。 随着巴黎奥运会开幕式为全世界掀起一场文艺浪潮&#xff0c;塞纳河畔也从浪漫艺术的盛宴&#xff0c;转向体育竞技的击攘。让全世界不可错过巴黎前方的每刻高光&#xff0c;更需要一场多媒体技术的迎赶革新。 于是&#xff0c;我们看到另一场媒…