AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1008199
Accepted
Frakcool
Frakcool
Asked: 2018-02-21 16:07:17 +0800 CST2018-02-21 16:07:17 +0800 CST 2018-02-21 16:07:17 +0800 CST

wmctrl Ubuntu 17.10 切换,以上不切换

  • 772

在尝试了这个问题的答案之后:如何启动一个设置了“Always On Top”的应用程序?,特别是@MichaelTunnell评论中的那个:

这对我来说是最好的选择,因为我可以使用这个命令创建一个 bash 脚本或键盘快捷键(我做过),这样我可以在需要时使用它,但在不需要时不能使用。不过,我确实进行了更改...我想要一个快捷方式来始终打开活动窗口的顶部,并且仅在需要时才打开,所以这是我的命令。wmctrl -r :ACTIVE: -b toggle,above

我能够在 Ubuntu 16.10 或更低版本中始终切换到顶部,但不能在我现在安装的 Ubuntu 17.10 上切换,并且希望拥有相同的快捷方式

我也试过这篇文章,基本上是 Michael Tunnell 评论的更详细的帖子:始终在顶部 Ubuntu 的键盘快捷键

该快捷方式可以在下图中看到,它用于将窗口 Always-on-top 设置为 True,但即使我再次使用相同的命令“将其关闭”,我也无法删除活动的应用程序那个属性。

在此处输入图像描述

这是 GNOME Ubuntu 17.10 中的错误吗?还是我在这个特定版本中缺少任何额外的配置?

gnome shortcut-keys 17.10 wmctrl
  • 3 3 个回答
  • 1061 Views

3 个回答

  • Voted
  1. Geoff Davids
    2019-11-08T07:28:02+08:002019-11-08T07:28:02+08:00

    经过大量研究并弄清楚如何在 bash 中编写正确的代码后,我创建了一个命令,该命令使用逻辑层中的 wmctrl 命令在当前 GNOME 桌面上有效地切换“始终在顶部”状态!看哪:

    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'

    它使用 来检查活动窗口状态属性“_NET_WM_STATE” xprops,如果它包含文本“ABOVE”,则表示“始终在顶部”选项处于活动状态。然后它只是运行wmctrl带有参数add或remove适当的命令。


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

    • 获取活动窗口 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 的命令周围加上引号,所以在编写命令时我必须小心,因为我从来没有超过一层(使用双引号)。引号中任何进一步的字符串嵌套都需要大量令人困惑的反斜杠来转义引号。

    • 3
  2. Best Answer
    pomsky
    2018-02-21T16:12:11+08:002018-02-21T16:12:11+08:00

    wmctrl与 Wayland 不完全兼容,Wayland 是 Ubuntu 17.10 上的默认会话。

    作为一种解决方法,您可以在此问答之后切换回 Xorg 会话:如何在 Ubuntu 17.10 中从 Wayland 切换回 Xorg?

    • 2
  3. brotherJ4mes
    2020-11-26T08:08:12+08:002020-11-26T08:08:12+08:00

    我认为 Geoff 的解决方案很棒,但我想要一些更具可读性/适应性的东西,所以我编写了这个快速 bash 脚本,它的功能非常相似,但xdotool用于获取 idxprop

    #!/bin/bash
    
    # check if window is currently "ABOVE"
    xprop -id $(xdotool getactivewindow) | grep NET_WM_STATE | grep -q ABOVE
    
    if [ $? -eq 0 ]; then
            wmctrl -r :ACTIVE: -b remove,above
    else
            wmctrl -r :ACTIVE: -b add,above
    fi
    

    现在我只是把我的快捷方式指向这个脚本,它对我有用。

    很不言自明,我想。可能需要解释的部分是$?它只返回前一个命令的退出代码(在这种情况下,grep:如果匹配则为 0,如果失败则为 1)。请注意,以这种方式使用退出代码可能不是一个好习惯,因为grep可能由于其他原因而失败,但此脚本失败的风险非常低;)

    • 1

相关问题

  • 如何安装 KDE?

  • 为什么我的时钟、指示器小程序和通知区域有时会在我重新启动时移动?我怎样才能防止这种情况?

  • 停止菜单图标闪烁

  • 是否有适用于 IMAP 邮件帐户的 Gnome 小程序?

  • 如果顶部面板中缺少会话小程序,如何注销?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve