创建键盘快捷键以将窗口移动到不同的显示器,而无需 Compiz

创建键盘快捷键以将窗口移动到不同的显示器,而无需 Compiz

我正在运行 Ubuntu MATE 16.04,开箱即用,我非常喜欢它。我唯一需要的是能够使用键盘将窗口移动到不同的显示器。

我一直在使用CompizConfig 设置管理器并且它可以工作,但是 Compiz 在我的系统上导致了很多问题,当我禁用它时这些问题就会消失。Compiz 是一个很大的软件包,我想要的只是能够将我的窗口移动到不同的显示器。所有其他功能都已内置在 Ubuntu MATE 16.04 LTS 键盘快捷键菜单中(切换工作区、将窗口移动到工作区、向左、向右、水平、垂直平铺等)。

将窗口移至屏幕东侧(右侧)将窗口移至屏幕西侧(左侧)由于某种原因,它不能在所有应用程序上运行(尤其是 Firefox,但 Chrome 和其他应用程序可以运行)。

有没有指南可以教你如何制作自己的键盘快捷键?我找到了网站有人为 Xubuntu 制作了自己的快捷键。当我试图弄清楚他们做了什么时,有没有人有一种简单的方法来创建在显示器之间移动窗口的键盘快捷键?

答案1

介绍

window_jumper.py是一个 Python 脚本,它将循环移动活动窗口到多个显示器。例如,如果您有 3 个显示器 A、B 和 C,则重复按下指定的快捷键将使窗口从 A 移动到 B、C,然后再移回 A。窗口位置将位于每个屏幕的左上角。

用法

手动运行脚本

python window_jumper.py

该脚本没有命令行选项(截至目前,但将来可能有)。

设置键盘快捷键

Ubuntu Unity 步骤:

  1. 转到System Settings-> KeyboardShortcuts tab,选择Custom Shortcuts并单击+按钮。自定义快捷方式弹出窗口将出现两个字段Name:Command:

  2. 对于Name字段 ,将其命名为window_jumper。对于 ,Command:提供脚本文件的完整路径。例如python /home/ubuntu_user/bin/window_jumper.py。单击Apply

  3. 点击最右边的列,New accelerator会出现文字。按下您希望为此脚本指定的键盘快捷键。例如,我选择了CtrlSuperJ

Ubuntu Mate 说明:

  1. 转到SystemControl CenterKeyboard Shortcuts,点击Add。将出现自定义快捷方式弹出窗口,其中包含两个字段Name:Command:

  2. 对于Name字段 ,将其命名为window_jumper。对于 ,Command:提供脚本文件的完整路径。例如python /home/ubuntu_user/bin/window_jumper.py。单击Apply

  3. 最右侧的列(标有Shortcut)上会有单词Disabled。单击单词,文本将变为New shortcut。按下您想要使用的组合键。

脚本源

也可作为GitHub。如果您有 GitHub 帐户,请在那里提交问题和功能请求。

#!/usr/bin/env python
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GdkX11, Gdk, Gtk


def main():

    DEBUG = False

    screen = GdkX11.X11Screen.get_default()
    monitors = []
    for monitor in range(screen.get_n_monitors()):
        monitors.append(
            [screen.get_monitor_geometry(monitor).x,
             screen.get_monitor_geometry(monitor).y])

    if DEBUG:
        print monitors

    active_window = screen.get_active_window()
    active_window_location = screen.get_monitor_at_window(active_window)

    new_location = None
    new_location = active_window_location + 1
    if active_window_location + 1 >= monitors.__len__():
        new_location = 0
    new_screen = monitors[new_location]
    if DEBUG:
        print new_screen

    active_window.move(new_screen[0], new_screen[1])
    screen.get_active_window()
    # TODO: add resizing window routine in cases where
    # a window is larger than the size of the screen
    # to which we're moving it.

if __name__ == "__main__":
    main()

附注:

  • 代码可能会改变,也可能不会改变以包含附加功能。
  • 万一你收到ImportError: No module named girun sudo apt install python-gi(谢谢达留斯为了评论

相关内容