如何编写脚本来切换 unitytweaktool 设置(hotcorners)

如何编写脚本来切换 unitytweaktool 设置(hotcorners)

具体来说,每次启动 Steam 游戏时,我都想打开/关闭热点。但我对任何类型的脚本都一无所知。任何学习这类内容的资源都很好。

如果这个问题问得不对,请告诉我,我会删除它。

答案1

如果你只想要脚本,请跳过解释

解释

您必须至少学习一种适当的编程(/脚本)语言,但是:

介绍;dconf 和 gsettings
大多数(如果不是全部)设置,由 Unity Tweak Tool 编辑dconf数据库,其中存储了许多设置。编辑 dconf 数据库最好通过 设定,它实际上是clidconf 数据库的前端。

在您的示例中,遗憾的是,设置/切换热点只能通过dconf直接编辑数据库来完成,因为没有SCHEMA可用的数据库gsettings

获取当前值
hotcorners 插件设置如下:

/org/compiz/profiles/unity/plugins/core/show-desktop-edge

你可以当前状态通过命令:

dconf read /org/compiz/profiles/unity/plugins/core/show-desktop-edge

在您的情况下,这将产生如下输出(来自您的评论):

 '|BottomRight'

设置新值
禁用hotcorners,您需要运行以下命令:

dconf write /org/compiz/profiles/unity/plugins/core/show-desktop-edge "''"

(重新)使能够hotcorners,与您之前设置的热角:

dconf write /org/compiz/profiles/unity/plugins/core/show-desktop-edge "'|BottomRight'"

切换脚本的剖析

脚本(一般来说)应该做什么:

  1. 测试当前 A/B 状态
    • 如果当前状态是 A -> 设置 B
    • 如果当前状态为 B -> 设置 A

剧本

在脚本中,上述步骤在注释中描述:

#!/usr/bin/env python3
import subprocess

key = "/org/compiz/profiles/unity/plugins/core/show-desktop-edge"
val_on = "'|BottomRight'"

def test():
    # read the current setting
    return subprocess.check_output(["dconf", "read", key]).decode("utf-8").strip() == val_on

currstate = test()

if currstate == True:
    # if currently hotcorners are "on", set it to "''"
    newval = "''"
else:
    # if currently hotcorners are "off", set it to val_on
    newval = val_on

subprocess.Popen(["dconf", "write", key, str(newval)])

如何使用

  1. 将脚本复制到一个空文件中,另存为toggle_hotcorners.py
  2. 从终端测试运行它:

    python3 /path/to/toggle_hotcorners.py
    
  3. 如果一切正常,请将其添加到键盘快捷键。选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/toggle_hotcorners.py
    

我如何查看 Unity Tweak Tool 正在编辑的内容?

不仅适用于 Unity Tweak Tool,还可以查看系统设置正在编辑的内容,在许多情况下,以下内容可以为您提供有用的信息:

  • 打开终端,打开 Unity Tweak Tool
  • dconf watch /在终端中运行命令
  • 在 Unity Tweak Tool 中通过 GUI 更改值

终端中的输出发生变化:

![在此处输入图片描述

您可以看到如果我在 Unity Tweak Tool 中禁用/启用热点角会发生什么情况。

答案2

对@Jacob的脚本做了一些调整。首先,dconf watch /在unity-tweak-tool中使用和打开/关闭hotcorners来找出哪些变量(?)被改变了

  1. 我将窗口绑定到左下角,设置是/org/compiz/profiles/unity/plugins/expo/expo-edge
  2. 右下角也有工作区分布,设置位于/org/compiz/profiles/unity/plugins/scale/initiate-edge

感谢谷歌和为期2天的代码研讨会:

#!/usr/bin/env python3
import subprocess

key = "/org/compiz/profiles/unity/plugins/expo/expo-edge" #<-- this is for "show workspaces"
val_on = "'BottomRight'"

def test():
    # read the current setting
    # if one corner is on, other is also on and vice versa, no need to check both
    return subprocess.check_output(["dconf", "read", key]).decode("utf-8").strip() == val_on

currstate = test()

if currstate == True:
    # if currently hotcorners are "on", set it to "''"
    newval = "''"
    othercorner = "''"
else:
    # if currently hotcorners are "off", set it to val_on
    newval = val_on
    othercorner = "'BottomLeft'"

subprocess.Popen(["dconf", "write", key, str(newval)])

# this is for "windows spread"
subprocess.Popen(["dconf", "write", "/org/compiz/profiles/unity/plugins/scale/initiate-edge", str(othercorner)])

Volia,效果非常好。

非常感谢@Jacob 为我提供信息和基本脚本,因为我不知道 dconf 是做什么的,也不知道如何使用 python。到现在还是不知道。你到底从哪里学到的。

说真的,我在哪里可以学到这些东西?

相关内容