web-dev-qa-db-fra.com

Raccourci clavier Unity pour déplacer la souris (et la mise au point) d'un écran à un autre

Vous appréciez la configuration multi-moniteurs à la maison et au travail, mais vous vous demandez comment déplacer la mise au point entre des moniteurs individuels (c'est-à-dire des "écrans") sans souris?

Les raccourcis clavier sont excellents pour la commutation de bureaux virtuels, et j’ai examiné diverses options dans ccsm, mais rien ne m’est venu à l’esprit.

Je regarde aussi d’autres questions telles que commutateur de focus entre écrans X séparés ou des liens vers dualscreenmouseutils et switchscreen mais tous semblent concerner écrans séparés par xorg.conf. De nos jours, Unity "fonctionne" avec plusieurs moniteurs (via un port d'affichage), ce qui est un peu gênant pour les richesses.

Mais tout conseil pour naviguer entre plusieurs écrans (physiques) dans un seul écran Unity (virtuel) serait le bienvenu.

5
Dirk Eddelbuettel

Basculer entre les écrans et (éventuellement) définir le focus sur la fenêtre (plein écran)

Le script ci-dessous bascule (et "met l'accent") entre les écrans gauche et droit si les deux écrans sont plus ou moins alignés au centre ou en haut, et plus ou moins de la même résolution verticale.
Je suppose que dans la quasi-totalité des cas de configuration d’un écran gauche/droit, cela fonctionnera.

Le scénario

#!/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"])

Comment utiliser

  1. Le script nécessite xdotool pour être installé (!)

    Sudo apt-get install xdotool
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom toggle_screenloc.py

  3. Testez-le avec la commande:

    python3 /path/to/toggle_screenloc.py
    
  4. Si tout fonctionne correctement, ajoutez-le à une touche de raccourci: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    python3 /path/to/toggle_screenloc.py
    

Qu'est-ce qu'il fait exactement

Si le script est exécuté, il:

  1. déduit la taille de l'écran (gauche) (x/y) à partir de la sortie de la commande xrandr.
  2. il voit si la souris est sur l'écran de gauche ou de droite en cochant la commande (xdotool):

    xdotool getmouselocation
    

Si le pointeur de la souris est situé sur l'écran de gauche:

  • il est déplacé au milieu (verticalement) de l'écran de gauche et horizontalement vers une position égale à la position actuelle + la largeur de l'écran de gauche.

Si le pointeur de la souris est sur l'écran de droite:

  • les actions sont le contraire.

Ensuite, la souris clique une seule fois pour définir le focus sur l'application (possible) plein écran (facultatif).

4
Jacob Vlijm

La réponse de Jacob Vlijm a la bonne idée, mais il existe d'autres moyens. Voici ma prise:

#!/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

La simplification provient de l’utilisation de xdotool getmouselocation --Shell, qui permet de transférer les variables dans le script en cours. Cela nous permet également de focaliser la fenêtre sans cliquer, ce qui pourrait avoir des effets secondaires indésirables.

Notez que dans mon cas, mes écrans sont empilés verticalement, donc je déplace la souris vers le haut (thêta = 0) ou vers le bas (thêta = 180). J'ai aussi choisi 1080px comme ligne de démarcation.

4
chreekat

ce référentiel peut vous aider

https://github.com/Eitol/screen_focus_changer

Vous placez le script gauche focus_changer.py à un endroit fixe (/ opt par exemple), puis ajoutez le raccourci clavier/raccourci/raccourci clavier dans vos paramètres.

python3 /opt/focus_changer.py left # Se concentrer sur la gauche

python3 /opt/focus_changer.py right # Se concentrer sur la droite

1
Hector Oliveros