XFCE - Fenster per Tastendruck an einen anderen Monitor senden

27

Ich verwende Xubuntu 11.10 mit einem Dual-Monitor-Setup. Ich suche einen Tastendruck (vielleicht erstellen CTRL+ ALT+ , SPACEdie ich ein ausgewähltes Fenster auf den nächsten Monitor senden kann.

In GNOME gibt es ein Paket namens, swapmonitordas das Fenster an den anderen Monitor senden kann. Der Aufruf dieses Programms mit einem Tastendruck erzielt den gleichen Effekt.

Wie geht das in XFCE / Xubuntu?

boffin
quelle
Haben Sie swapmonitorunter Xubuntu keinen Zugriff ? Oder fragen Sie, wie Sie eine Tastenkombination dafür einrichten können?
ire_and_curses
Es scheint nicht auf XFCE zu funktionieren. Obwohl ich gerne wissen möchte, welche Möglichkeiten es gibt.
Am
Wie haben Sie die mehreren Monitore eingerichtet? Als großer virtueller Bildschirm oder separate X-Displays? Verwenden Sie nvidia twinview?
Keith
Es ist TwinView. Ich habe eine alte Nvidia GeForce-Karte mit 2 Dell 19 "-Monitoren
Uhr

Antworten:

27

Dies wurde vor einer Weile gepostet und ich bin sicher, dass Sie Ihre Antwort bereits erhalten haben, aber für diejenigen, die dies nicht getan haben.

Führen Sie diese Befehle aus

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

Laden Sie dann das Bash-Skript unter folgendem Link herunter (Dank an jc00ke): https://github.com/jc00ke/move-to-next-monitor

Persönlich habe ich ein Verzeichnis in meinem Stammverzeichnis, in dem ich alle meine persönlichen Skripts speichere. Wo Sie es herunterladen, liegt jedoch ganz bei Ihnen. Ändern Sie es in Berechtigungen, damit Sie es ausführen können. Speichern Sie die Skripte beispielsweise als move-to-next-monitor.sh und führen Sie dann Folgendes aus

chmod 755 move-to-next-monitor.sh
  1. Einstellungsmanager -> Tastatur -> Anwendungsverknüpfungen
  2. Klicken Sie auf Hinzufügen
  3. Klicken Sie auf Öffnen und leiten Sie es an Ihr Skript
  4. Weisen Sie ihm ein Tastaturkürzel zu und voilà!

Sie haben jetzt eine Tastenkombination, mit der Sie ein Fenster von einem Bildschirm auf einen anderen umschalten können. Ich bin nicht sicher, wie es mit mehr als 2 Bildschirmen funktioniert.

itzjustricky
quelle
Das verlinkte Skript hatte dieses Problem für mich: github.com/jc00ke/bin/issues/1
thejoshwolfe
1
Funktioniert soweit für mich in Ordnung mit Mint 17.3 und XFCE 4.12, ATI-Chipsatz-Grafikkarte und drei Monitoren. Ich sehe das Maximierungsproblem von thejoshwolfe auf meinem System nicht. Danke für die Tipps!
ether_joe
1
@thejoshwolfe Ich habe meine Version des Skripts hinzugefügt, mit der das Maximierungsproblem für mich gelöst wird.
Jbrock
1
@ether_joe Ich habe meine Version des Skripts hinzugefügt, die Ihnen bei drei Monitoren von Nutzen sein kann.
Jbrock
Ich bin in xfce und dieses Ding ist böse. Es verschiebt nur das Fenster vom linken Monitor nach rechts und versetzt meinen Desktop einmal in einen wirklich seltsamen Zustand.
Sava B.
10

Ich habe einige Änderungen an dem oben erwähnten Skript vorgenommen, das ursprünglich von jc00ke geschrieben wurde.
- Mine ist für drei Monitore eingerichtet.
- Es wird beibehalten, ob das Fenster maximiert wurde oder nicht.
- Es wird verwendet , um das Fenster nach links oder rechts mit der Nutzung zu bewegen script-name -lund script-name -rist.
- Ich habe einen Fix hinzugefügt, bei dem Chromium-Apps, wenn sie minimiert sind, sehr klein sind und auf dem neuen Monitor nicht wieder maximiert werden.
Ich habe mit jc00ke korrespondiert. Während dies auf Xfce hervorragend funktioniert, sagte er, er habe Probleme mit seinem Skript in Unity. Natürlich benötigen andere Desktop-Umgebungen wie Unity dieses Skript nicht, da solche Optionen in den Fenstermanager integriert sind.
Um das Skript zu verwenden, müssen Sie es ausführbar machen chmod +x script-nameund die folgenden beiden Programme installieren 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
jbrock
quelle
7

Ich habe auch mein eigenes Python-Skript erstellt, um Fenster über Monitore zu verschieben.

https://github.com/calandoa/movescreen

Verwendung:

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

Interessante Funktionen:

  • Behandle die 4 Richtungen
  • Behandeln Sie einige Sonderfälle, z. B. Fenster, die sich auf mehreren Monitoren überlappen
  • Wiederherstellung unabhängig Vollbild , maximiert horizontal und vertikal Staaten
  • Debuggen oder Hinzufügen neuer Funktionen einfach mit Python.
calandoa
quelle
1

Eine andere Alternative, die sich nicht auf "binäre" Abhängigkeiten stützt (wie xdotool oder wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Sie können es mit installieren pip(Sie müssen es nicht manuell kopieren, ausführbar machen usw.)
  • Es verarbeitet mehrere Bildschirme mit unterschiedlichen Layouts (horizontal, vertikal, gemischt)
  • Behalten Sie das Fenster / Bildschirm-Verhältnis bei, wenn Sie zwischen Bildschirmen unterschiedlicher Größe wechseln
  • Maximierte Zustände wiederherstellen (horizontal, vertikal)

Nett.

AlexisBRENON
quelle