Como passar da tela 1 para a tela 3 movendo o cursor para a esquerda e vice-versa?

6

Se eu tiver que mover o mouse da tela esquerda para a direita, a distância será muito grande.

Existe uma maneira de conectar virtualmente os lados da tela como se eles estivessem dispostos em um círculo? Eu poderia então passar da tela esquerda para a tela da direita, simplesmente movendo o cursor para a esquerda.

    
por ubuntico 02.11.2015 / 10:02

2 respostas

4

Script para conectar telas "circulares"

O script abaixo fará o que você descreveu; se o mouse tocar na borda direita da tela direita (a maioria), o mouse aparece novamente na tela esquerda (quase). Se tocar no lado esquerdo da tela esquerda, ele aparecerá no lado direito da tela da direita.

Precauções internas

O script assume que as telas estão organizadas em uma configuração sem sobreposição, x-wise, mas possui uma correção incorporada caso as telas não estejam alinhadas na parte superior ou tenham uma resolução y diferente. Embora você não tenha problemas na maioria dos casos, na situação abaixo, a menos que o script leve em consideração as possíveis diferenças na resolução y e / ou (não) alinhamento das telas:


Seapartesuperiordateladaesquerdaestiverabaixodapartesuperiordateladadireita,ocursorsemoverádapartesuperiordireitaparaapartesuperiordatelaesquerda.Possivelmente,bottomidemidem


Oscript

#!/usr/bin/env python3 import subprocess import time def get_screendata(): data = [s.split("+") for s in subprocess.check_output(["xrandr"]).decode("utf-8").split() \ if s.count("+") == 2] # calculate total x-size of spanning screens x_span = sum([int(item[0].split("x")[0]) for item in data]) # sort screens to find first/last screen (also for 2+ screens) data.sort(key=lambda x: x[1]) # find (possible) screen offset of first/last screen and vertical area scr_first = data[0]; shiftl = int(scr_first[2]) areal = [shiftl, shiftl+int(scr_first[0].split("x")[1])] scr_last = data[-1]; shiftr = int(scr_last[2]) arear = [shiftr, shiftr+int(scr_last[0].split("x")[1])] return (x_span, areal, arear) screendata = get_screendata() x_span = screendata[0]; areal = screendata[1]; arear = screendata[2] new_coords = [] while True: time.sleep(0.5) new_coords = [] # read the current mouse position pos = [int(s.split(":")[-1]) for s in \ subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()\ if any(["x" in s, "y" in s])] # if the mouse is on the left of the first screen if pos[0] == 0: new_coords.append(x_span-2) if pos[1] <= arear[0]: new_coords.append(arear[0]+2) elif pos[1] >= arear[1]: new_coords.append(arear[1]-2) else: new_coords.append(pos[1]) # if the mouse is on the right of the last screen elif pos[0] > x_span-2: new_coords.append(2) if pos[1] <= areal[0]: new_coords.append(areal[0]+2) elif pos[1] >= areal[1]: new_coords.append(areal[1]-2) else: new_coords.append(pos[1]) # move the mouse if new_coords: subprocess.Popen(["xdotool", "mousemove", str(new_coords[0]), str(new_coords[1])])

Como usar

  1. O script precisa de xdotool

    sudo apt-get install xdotool
    
  2. Copie o script em um arquivo vazio, salve-o como circular_mouse.py
  3. Teste- execute o script executando em um terminal:

    python3 /path/to/circular_mouse.py
    

    Você deve ser capaz de fazer um movimento infinito do mouse para a direita ou para a esquerda, a circulação através de suas telas.

  4. Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicione o comando:

    /bin/bash -c "sleep 15 &&  python3 /path/to/circular_mouse.py" 
    
por Jacob Vlijm 02.11.2015 / 17:14
0

Você pode tentar usar Taralli . Você precisaria editar map_beef.c para a configuração do seu próprio monitor.

Como alternativa, @ohayden postou um script básico aqui que pode ser personalizado para fazer o que você é querendo. Para usá-lo, você precisaria instalar xdotool executando

sudo apt-get install xdotool

Respondo que só tenho um monitor, por isso não consegui experimentar nenhuma destas possíveis soluções.

    
por Gsxr1k 27.11.2015 / 19:57