自宅や職場でマルチモニター設定を楽しんでいるが、マウスなしで個々のモニター(つまり「スクリーン」)間でフォーカスを移動する方法を知りたいですか?
キーボードショートカットは仮想デスクトップの切り替えに優れており、ccsm
のさまざまなオプションを見ましたが、何も思い浮かぶことはありませんでした。
個別のX画面間のフォーカス切り替え または dualscreenmouseutils および switchscreen へのリンクなど、他の質問も調べますが、これらはすべて懸念されているようですxorg.conf
ごとに個別の画面。最近では、Unityは(ディスプレイポートを介して)複数のモニターで "機能する"ので、ちょっとした恥ずかしさがあります。
しかし、単一の(仮想)Unityディスプレイ内で複数の(物理)画面をナビゲートする方法についてのヒントは大歓迎です。
以下のスクリプトは、左画面と右画面を切り替えます(そして「フォーカス」)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"])
スクリプトをインストールするにはxdotool
が必要です(!)
Sudo apt-get install xdotool
スクリプトを空のファイルにコピーし、toggle_screenloc.py
として保存します
次のコマンドでテスト実行します。
python3 /path/to/toggle_screenloc.py
すべて正常に機能する場合は、ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。
python3 /path/to/toggle_screenloc.py
スクリプトを実行すると、次のようになります。
xrandr
コマンドの出力から(左)画面のサイズ(x/y)を導き出します。(xdotool
)コマンドをチェックすることにより、マウスが左右どちらの画面にあるかを確認します。
xdotool getmouselocation
Ifマウスポインターが左画面にあります:
Ifマウスポインターが右画面にあります:
その後、マウスは1回クリックして、(可能であれば)フルスクリーンアプリケーションにフォーカスを設定します(オプション)。
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を選択します。
このリポジトリはあなたを助けるかもしれません
https://github.com/Eitol/screen_focus_changer
Focus_changer.pyの左側のスクリプトを固定の場所に配置し(たとえば、/ opt)、設定にキーバインド/ショートカット/ホットキーを追加します
python3 /opt/focus_changer.py left#左にフォーカス
python3 /opt/focus_changer.py right#右にフォーカス