web-dev-qa-db-ja.com

1つの画面から別の画面にマウス(およびフォーカス)を移動するUnityキーボードショートカット

自宅や職場でマルチモニター設定を楽しんでいるが、マウスなしで個々のモニター(つまり「スクリーン」)間でフォーカスを移動する方法を知りたいですか?

キーボードショートカットは仮想デスクトップの切り替えに優れており、ccsmのさまざまなオプションを見ましたが、何も思い浮かぶことはありませんでした。

個別のX画面間のフォーカス切り替え または dualscreenmouseutils および switchscreen へのリンクなど、他の質問も調べますが、これらはすべて懸念されているようですxorg.confごとに個別の画面。最近では、Unityは(ディスプレイポートを介して)複数のモニターで "機能する"ので、ちょっとした恥ずかしさがあります。

しかし、単一の(仮想)Unityディスプレイ内で複数の(物理)画面をナビゲートする方法についてのヒントは大歓迎です。

5

画面を切り替えて、(オプションで)(全画面)ウィンドウにフォーカスを設定します

以下のスクリプトは、左画面と右画面を切り替えます(そして「フォーカス」)if両方の画面は多かれ少なかれ中央揃えまたは上揃え、そしてほぼ同じ同じ垂直解像度。
左/右の画面設定のほとんどすべての状況で機能すると思います。

スクリプト

#!/usr/bin/env python3
import subprocess
# just a helper function
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
# get the current mouse position
current = [int(n) for n in [it.split(":")[1] for it in get(["xdotool", "getmouselocation"]).split()[:2]]]
# get the x/y size of the left screen
screendata = [(s.split("x")[0], s.split("x")[1].split("+")[0]) for s in get(["xrandr"]).split() if "+0+0" in s ][0]
xy = [int(n) for n in screendata]
# see if the mouse is on the left- or right screen
if current[0] < xy[0]:
    # if the mouse currently is on the left screen, move it to the right (from the middle of the left screen)
    command = ["xdotool", "mousemove", "--sync", str(current[0]+xy[0]), str(xy[1]/2)]
else:
    # if the mouse currently is on the left screen, move it to the right (from the middle of the left screen)
    command = ["xdotool", "mousemove", "--sync", str(current[0]-xy[0]), str(xy[1]/2)]

subprocess.Popen(command)
# optional: click after the mouse move: comment out if not needed / wanted
subprocess.Popen(["xdotool", "click", "1"])

使い方

  1. スクリプトをインストールするにはxdotoolが必要です(!)

    Sudo apt-get install xdotool
    
  2. スクリプトを空のファイルにコピーし、toggle_screenloc.pyとして保存します

  3. 次のコマンドでテスト実行します。

    python3 /path/to/toggle_screenloc.py
    
  4. すべて正常に機能する場合は、ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/toggle_screenloc.py
    

正確に何をするか

スクリプトを実行すると、次のようになります。

  1. xrandrコマンドの出力から(左)画面のサイズ(x/y)を導き出します。
  2. xdotool)コマンドをチェックすることにより、マウスが左右どちらの画面にあるかを確認します。

    xdotool getmouselocation
    

Ifマウスポインターが左画面にあります:

  • 左画面の中央(垂直)に移動し、現在の位置+左画面の幅に等しい位置に水平に移動します。

Ifマウスポインターが右画面にあります:

  • アクションは反対です。

その後、マウスは1回クリックして、(可能であれば)フルスクリーンアプリケーションにフォーカスを設定します(オプション)。

4
Jacob Vlijm

Jacob Vlijmの答えには正しい考えがありますが、他の方法もあります。私の見解は次のとおりです。

#!/bin/bash

eval $(xdotool getmouselocation --Shell)

if [ $Y -gt 1080 ]
then
    theta=0
else
    theta=180
fi

xdotool mousemove_relative --polar $theta 1080

eval $(xdotool getmouselocation --Shell)

xdotool windowfocus $WINDOW

簡略化はxdotool getmouselocation --Shellを使用することで実現します。これにより、実行中のスクリプトに変数が便利にダンプされます。これにより、クリックせずにウィンドウをフォーカスできるため、望ましくない副作用が生じる可能性があります。

私の場合、ディスプレイは垂直に積み重ねられているため、マウスを上(シータ= 0)または下(シータ= 180)に移動します。また、分割線として1080pxを選択します。

4
chreekat

このリポジトリはあなたを助けるかもしれません

https://github.com/Eitol/screen_focus_changer

Focus_changer.pyの左側のスクリプトを固定の場所に配置し(たとえば、/ opt)、設定にキーバインド/ショートカット/ホットキーを追加します

python3 /opt/focus_changer.py left#左にフォーカス

python3 /opt/focus_changer.py right#右にフォーカス

1
Hector Oliveros