XFCE - Invia la finestra ad altri monitor premendo un tasto


27

Sto eseguendo Xubuntu 11.10 con una configurazione a doppio monitor. Sto cercando di creare una sequenza di tasti (forse CTRL+ ALT+ SPACEche mi permetterà di inviare una finestra selezionata al monitor successivo.

In GNOME c'è un pacchetto chiamato swapmonitorche è in grado di inviare la finestra all'altro monitor. La chiamata a questo programma con la pressione di un tasto produce lo stesso effetto.

Come viene fatto in XFCE / Xubuntu?


Non hai accesso a swapmonitorXubuntu? O stai chiedendo come impostare una scorciatoia da tastiera per questo?
ire_and_curses,

Non sembra funzionare su XFCE. Anche se vorrei sapere quali sono le opzioni disponibili.
bara il

Come si configurano i monitor multipli? Come un grande schermo virtuale o schermi X separati? Stai usando nvidia twinview?
Keith,

È TwinView. Ho una vecchia scheda Nvidia GeForce con 2 monitor Dell 19 "
boffin

Risposte:


27

Questo è stato pubblicato un po 'di tempo fa e sono sicuro che hai già ottenuto la tua risposta, ma per quelli che non lo hanno fatto.

Esegui questi comandi

sudo apt-get install xdotool
sudo apt-get install wmctrl

Quindi scaricare lo script bash dal seguente link (credito a jc00ke) https://github.com/jc00ke/move-to-next-monitor

Personalmente, ho una directory nella mia radice in cui memorizzo tutti i miei script personali. Tuttavia, dove lo scarichi dipende davvero da te. Modificalo per avere le autorizzazioni in modo da poter eseguire. Ad esempio, salvare gli script come move-to-next-monitor.sh e quindi eseguire quanto segue

chmod 755 move-to-next-monitor.sh
  1. gestore impostazioni -> tastiera -> scorciatoie applicazione
  2. Clicca Aggiungi
  3. Fai clic su Apri e indirizzalo al tuo script
  4. Assegna una scorciatoia da tastiera e voilà!

Ora hai una scorciatoia da tastiera per passare da una schermata all'altra. Non sono sicuro di come funzioni con più di 2 schermi.


Lo script collegato presentava questo problema per me: github.com/jc00ke/bin/issues/1
thejoshwolfe,

1
Finora ho funzionato bene con Mint 17.3 e xfce 4.12, con la scheda video chipset e tre monitor. Non vedo il problema di massimizzazione di thejoshwolfe sul mio sistema. Grazie per i suggerimenti!
ether_joe,

1
@thejoshwolfe Ho aggiunto la mia versione dello script che risolve il problema di massimizzazione per me.
jbrock

1
@ether_joe Ho aggiunto la mia versione dello script che potrebbe esserti utile dato che hai tre monitor.
Jbrock

Sono in xfce, e questa cosa è malvagia. Sposterà la finestra dal monitor sinistro a destra e metterà il mio desktop in uno stato davvero strano una volta.
Sava B.

10

Ho apportato alcune modifiche allo script sopra menzionato, originariamente creato da jc00ke.
- Il mio è impostato per tre monitor.
- Mantiene se la finestra è stata ingrandita o meno.
- Viene utilizzato per spostare la finestra a sinistra o a destra con l'utilizzo script-name -le script-name -rrispettivamente.
- Ho aggiunto una correzione in cui le app Chromium ridotte a icona sono molto piccole e non si ingrandivano di nuovo sul nuovo monitor.
Ho corrisposto con jc00ke. Mentre funziona alla grande su Xfce, ha affermato di avere problemi con la sua sceneggiatura in Unity. Naturalmente altri ambienti desktop come Unity non avrebbero bisogno di questo script perché tali opzioni sono integrate nel gestore delle finestre.
Per utilizzare la marca di script eseguibile chmod +x script-namee installare i due programmi seguenti, sudo apt-get install xdotool wmctrl.

#!/bin/bash
#
# Move the current window to the next monitor.
#
# Also works only on one X screen (which is the most common case).
#
# Props to
# http://icyrock.com/blog/2012/05/xubuntu-moving-windows-between-monitors/
#
# Unfortunately, both "xdotool getwindowgeometry --shell $window_id" and
# checking "-geometry" of "xwininfo -id $window_id" are not sufficient, as
# the first command does not respect panel/decoration offsets and the second
# will sometimes give a "-0-0" geometry. This is why we resort to "xwininfo".

screen_width=$(xdpyinfo | awk -F" |x" '/dimensions:/ { print $7 }')
screen_height=$(xdpyinfo | awk -F" |x" '/dimensions:/ { print $8 }')
window_id=$(xdotool getactivewindow)

case $1 in
    -l )
        display_width=$((screen_width / 3 * 2)) ;;
    -r )
        display_width=$((screen_width / 3)) ;;
esac

# Remember if it was maximized.
window_state=$(xprop -id $window_id _NET_WM_STATE | awk '{ print $3 }')

# Un-maximize current window so that we can move it
wmctrl -ir $window_id -b remove,maximized_vert,maximized_horz

# Read window position
x=$(xwininfo -id $window_id | awk '/Absolute upper-left X:/ { print $4 }')
y=$(xwininfo -id $window_id | awk '/Absolute upper-left Y:/ { print $4 }')

# Subtract any offsets caused by window decorations and panels
x_offset=$(xwininfo -id $window_id | awk '/Relative upper-left X:/ { print $4 }')
y_offset=$(xwininfo -id $window_id | awk '/Relative upper-left Y:/ { print $4 }')
x=$((x - x_offset))
y=$((y - y_offset))

# Fix Chromium app view issue of small un-maximized size
width=$(xdotool getwindowgeometry $window_id | awk -F" |x" '/Geometry:/ { print $4 }')
if [ "$width" -lt "150" ]; then
  display_width=$((display_width + 150))
fi

# Compute new X position
new_x=$((x + display_width))
# Compute new Y position
new_y=$((y + screen_height))

# If we would move off the right-most monitor, we set it to the left one.
# We also respect the window's width here: moving a window off more than half its width won't happen.
if [ $((new_x + width / 2)) -gt $screen_width ]; then
  new_x=$((new_x - screen_width))
fi

height=$(xdotool getwindowgeometry $window_id | awk -F" |x" '/Geometry:/ { print $5 }')
if [ $((new_y + height / 2)) -gt $screen_height ]; then
  new_y=$((new_y - screen_height))
fi

# Don't move off the left side.
if [ $new_x -lt 0 ]; then
  new_x=0
fi

# Don't move off the bottom
if [ $new_y -lt 0 ]; then
  new_y=0
fi

# Move the window
xdotool windowmove $window_id $new_x $new_y

# Maintain if window was maximized or not
if [ "${window_state}" = "_NET_WM_STATE_MAXIMIZED_HORZ," ]; then
    wmctrl -ir $window_id -b add,maximized_vert,maximized_horz
fi

7

Ho anche creato il mio script Python per spostare le finestre sui monitor.

https://github.com/calandoa/movescreen

Uso:

movescreen.py <up|down|left|right>

Caratteristiche interessanti:

  • gestire le 4 direzioni
  • gestire alcuni casi speciali come finestre sovrapposte su più monitor
  • ripristinare indipendentemente fullScreen , ingrandita orizzontalmente e verticalmente stati
  • il debug o l'aggiunta di nuove funzionalità facili con Python.

1

Un'altra alternativa che non si basa su alcuna dipendenza "binaria" (come xdotool o wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Puoi installarlo con pip(non è necessario copiarlo manualmente, renderlo eseguibile, ecc.)
  • Gestisce più schermi con diversi layout (orizzontale, verticale, misto)
  • Mantenere il rapporto finestra / schermo quando ci si sposta tra schermi di dimensioni diverse
  • Ripristina stati massimizzati (orizzontale, verticale)

Genere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.