web-dev-qa-db-ja.com

Compizを使用せずにウィンドウを別のモニターに移動するキーボードショートカットを作成する

Ubuntu MATE 16.04を実行していますが、すぐに使用できます。必要なのは、キーボードを使用してウィンドウを別のモニターに移動できることだけです。

CompizConfig Settings Manager を使用していますが、動作しますが、Compizを無効にするとシステム上の問題の長いリストが消えます。 Compizは大きなパッケージであり、私が望むのは、ウィンドウを別のモニターに移動できることだけです。他のすべての機能はすでにUbuntu MATE 16.04 LTSキーボードショートカットメニューに組み込まれています(ワークスペースの切り替え、ウィンドウのワークスペースへの移動、タイルの左、右、水平、垂直など)。

画面の東側(右側)にウィンドウを移動および画面の西側(左側)にウィンドウを移動何らかの理由ですべてのアプリケーションで動作しない(特にFirefoxですが、Chromeなどが動作します)。

独自のキーボードショートカットを作成する方法を示すガイドはありますか? a site が誰かがXubuntuのために自分で作ったところを見つけました。私は彼らが何をしたかを理解しようとしていますが、モニター間でウィンドウを移動するキーボードショートカットを作成する簡単な方法はありますか?

7
jtlindsey

前書き

window_jumper.pyはpythonスクリプトで、アクティブウィンドウを複数のモニター間で周期的に移動します。たとえば、A、B、Cの3つのモニターがある場合、割り当てられたショートカットを繰り返しキーを押すと、ウィンドウがAからB、Cに移動し、Aに戻ります。ウィンドウの配置は各画面の左上隅になります。 。

使用法

スクリプトを手動で実行するには

python window_jumper.py

スクリプトにはコマンドラインオプションがありません(現在のところ、将来的には可能性があります)。

キーボードショートカットのセットアップ

Ubuntu Unityの手順:

  1. に行く System Settings -> KeyboardShortcuts tab 、Custom Shortcutsを選択してクリック + ボタン。カスタムショートカットポップアップが2つのフィールドName:およびCommand:とともに表示されます

  2. Name fieldの場合、window_jumperと呼びます。 Command:には、スクリプトファイルへのフルパスを指定します。たとえば、python /home/ubuntu_user/bin/window_jumper.py。クリック Apply

  3. 右端の列をクリックすると、単語New acceleratorが表示されます。このスクリプトに指定するキーボードショートカットを押します。例えば、私は選んだ CtrlSuperJ

Ubuntu Mateの手順:

  1. に行く SystemControl CenterKeyboard Shortcuts 、クリック Add。カスタムショートカットポップアップが2つのフィールドName:およびCommand:とともに表示されます

  2. Name fieldの場合、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 __== "__main__":
    main()

サイドノート:

  • コードは、追加機能を含むように変更される場合と変更されない場合があります。
  • ImportError: No module named gi run Sudo apt install python-giを受け取った場合( commentDariusz に感謝)
8