当前位置: 首页>>技术教程>>正文


如何为窗口设置 “Always on Top” 的快捷方式?

问题描述

在 12.04 (Unity) 中,我想为窗口的“始终在最前面的选项”分配一个快捷方式。可能类似于 Ctrl + Shift + Home 打开和 Ctrl + Shift + End 关闭,或其他什么。在 Compiz 设置管理器的某处是否可以选择执行此操作?

这个(旧)post 声称

For compiz, Enable Extra WM Actions. Check the properties, and insert ALT+A to Key field for Toggle Always-On-Top action.

但我找不到那个。

最佳思路

它应该适用于自 9.04 版以来的每个 Ubuntu 操作系统,无需安装任何东西,也无需修改创建任何快捷方式。

试试 Alt + Space , T

  • Alt + Space 作为第一个快捷键调出鼠标右键菜单

  • T 选择“始终在前”功能。

次佳思路

由于还没有人提到这一点,我将留下一个在 Ubuntu 12.04 上对我有用的解决方案。

您可以设置常规键盘快捷键并使用 wmctrl 切换“始终在顶部”选项。

转到系统设置>键盘 >快捷方式 >自定义快捷方式。点击 + 并为您的快捷方式命名。然后输入以下命令。

wmctrl -r :ACTIVE: -b toggle,above

如果你还没有它,你可以使用从 repos 安装 wmctrl

sudo apt-get install wmctrl

你应该有一些与此类似的东西。

点击申请,你应该很高兴去!

This solution came from a discussion on Ubuntu forums

第三种思路

Unity 而不是 GNOME(17.04 之前的 Ubuntu)

如果没有通过以下方式安装 CCSM 和额外的 compiz 插件:

sudo apt-get install compizconfig-settings-manager compiz-plugins-extra

请注意。 CCSM 可以杀死某些系统上的 Unity3D。

如果您尚未安装 compiz-plugins-extra,则需要重新启动 Compiz 以使用 Alt + F2Alt 加载它们(即使它们在重新启动前在 CCSM 中显示得很好)和

compiz --replace

您可以在 CCSM 的“Windows 管理”部分下看到额外的 WM 操作,如您发现的帖子中所述。您可以在那里轻松设置所需的操作。

第四种思路

我尝试使用 wmctrl 命令切换,但它在我的 Ubuntu 设置上不起作用。切换会打开,但不会关闭。 (我认为这可能是因为我使用的是 gnome 桌面环境,在该环境中 wmctrl AFAIK 稍有损坏)。

无论如何,经过大量研究和研究如何在 bash 中编写正确的代码后,我创建了一个命令,该命令在逻辑层中使用 wmctrl 命令来有效地切换当前 GNOME 桌面上的“始终在最前面”状态。我在 Ask Unix/Linux 上发布了这个答案,但我想我也会在这里发布,以防有​​人遇到同样的问题。

这是命令:

bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'

它使用 xprops 检查活动窗口状态属性 “_NET_WM_STATE”,如果它包含文本 “ABOVE”,则表示“始终在最前面”选项处于活动状态。然后它会根据需要运行带有参数 addremovewmctrl 命令。


命令分解(每个命令插入下一个,替换 占位符):

  • 获取活动窗口 ID:

     xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
    
  • 使用 id 从 xprop 获取窗口状态:

     xprop -id $(■) _NET_WM_STATE
    
  • 检查状态是否包含”ABOVE”,表示窗口设置为“always on top”:

     [[ $(■) =~ "ABOVE" ]]
    
  • 如果为真则返回 “remove”,否则返回 “add”:

     ■ && echo "remove" || echo "add"
    
  • 使用返回值作为参数运行 wmctrl 命令:

     wmctrl -r :ACTIVE: -b $(■),above
    
  • 将整个内容发送到 bash 以便您可以使用命令替换 ${ ... } 、bash 布尔评估 [[ ... ]] 和正则表达式匹配运算符 =~

     bash -c '■'
    

特别是最后一步,我花了很长时间才弄明白。在我意识到默认情况下键盘快捷键不在 bash 中运行之前,我不知道为什么这些命令在我测试时可以在控制台中运行,但在直接作为键盘快捷键运行时却默默地失败了。它让我在墙上爬了好久!

注意:因为您需要在发送到 bash 的命令周围加上引号,所以在编写命令时我必须小心,我从不超过一级(使用双引号)。在引号中任何进一步的字符串嵌套都需要大量令人困惑的反斜杠来转义引号。

更详细的说明:如何创建键盘快捷键(感谢@rajesh_chaurasiya)

  1. 如果您还没有使用 sudo apt-get install wmctrl 安装 wmctrl

  2. 转到系统设置>键盘快捷键。单击 + 按钮以添加自定义快捷方式。

  3. 选择一个名称,例如“Toggle always on top”(可以是您喜欢的任何名称)。

  4. 在命令字段中,添加此答案顶部的完整命令。

  5. 记录键绑定以完成快捷方式。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11977.html,未经允许,请勿转载。