XFCE - Enviar janela para outro monitor ao pressionar a tecla

27

Estou executando o Xubuntu 11.10 com uma configuração de monitor duplo. Estou procurando criar um pressionamento de tecla (talvez CTRL+ ALT+, o SPACEque me permitirá enviar uma janela selecionada para o próximo monitor.

No GNOME, há um pacote chamado swapmonitorque é capaz de enviar a janela para o outro monitor. Chamar este programa com um pressionamento de tecla atinge o mesmo efeito.

Como isso é feito no XFCE / Xubuntu?

caixão
fonte
Você não tem acesso swapmonitorno Xubuntu? Ou você está perguntando como definir um atalho de teclado para ele?
ire_and_curses
Parece não funcionar no XFCE. Embora eu gostaria de saber quais opções existem por aí.
boffin
Como você configurou os vários monitores? Como uma grande tela virtual, ou X separado exibe? Você está usando a nvidia twinview?
Keith
É o TwinView. Eu tenho uma placa Nvidia GeForce de idade com 2 Dell 19" monitores
boffin

Respostas:

27

Isso foi postado há um tempo atrás e tenho certeza de que você já recebeu sua resposta, mas para aqueles que não o receberam.

Execute estes comandos

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

Em seguida, faça o download do script bash no seguinte link (crédito para jc00ke) https://github.com/jc00ke/move-to-next-monitor

Pessoalmente, tenho um diretório na raiz onde armazeno todos os meus scripts pessoais. No entanto, onde você faz o download, é realmente com você. Altere-o para ter permissões para poder executar. Por exemplo, salve os scripts como move-to-next-monitor.sh e execute o seguinte

chmod 755 move-to-next-monitor.sh
  1. gerenciador de configurações -> teclado -> atalhos de aplicativos
  2. Clique em Adicionar
  3. Clique em Abrir e direcione-o para seu script
  4. Atribua um atalho de teclado a ele e pronto!

Agora você tem um atalho de teclado para alternar uma janela de uma tela para outra. Não sei ao certo como funciona com mais de 2 telas.

itzjustricky
fonte
O script ligado tive esse problema para mim: github.com/jc00ke/bin/issues/1
thejoshwolfe
11
Até agora, estou funcionando bem com o Mint 17.3 e o xfce 4.12, placa de vídeo do chipset ati e três monitores. Não estou vendo o problema de maximizar o thejoshwolfe no meu sistema. Obrigado pelas dicas!
Ether_joe 12/08
11
@thejoshwolfe Adicionei minha versão do script que resolve o problema de maximização para mim.
jbrock
11
@ether_joe Adicionei minha versão do script que pode beneficiá-lo, pois você tem três monitores.
jbrock
Estou no xfce, e essa coisa é má. Ele apenas moverá a janela do monitor esquerdo para a direita e colocou minha área de trabalho em um estado realmente estranho uma vez.
Sava B.
10

Fiz algumas alterações no script acima mencionado, originalmente criado por jc00ke.
- O meu está configurado para três monitores.
- Mantém se a janela foi maximizada ou não.
- É usado para mover a janela para a esquerda ou direita com o uso script-name -le script-name -rrespectivamente.
- Adicionei uma correção em que os aplicativos Chromium, quando minimizados, são muito pequenos e não seriam maximizados novamente no novo monitor.
Eu correspondi com jc00ke. Enquanto isso funciona muito bem no Xfce, ele disse que teve problemas com seu script no Unity. É claro que outros ambientes de área de trabalho, como o Unity, não precisariam desse script, porque essas opções estão embutidas no gerenciador de janelas.
Para usar o script, torne-o executável chmod +x script-namee instale os dois programas a seguir 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
fonte
7

Também criei meu próprio script python para mover janelas entre monitores.

https://github.com/calandoa/movescreen

Uso:

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

Recursos interessantes:

  • lidar com as 4 direções
  • lidar com alguns casos especiais, como janelas sobrepostas em vários monitores
  • restaure de forma independente a tela inteira , maximize os estados horizontal e verticalmente
  • depurando ou adicionando novos recursos facilmente com python.
calandoa
fonte
1

Uma outra alternativa que não depende de nenhuma dependência "binária" (como xdotool ou wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Você pode instalá-lo com pip(não há necessidade de copiá-lo manualmente, torná-lo executável etc.)
  • Ele lida com várias telas com diferentes layouts (horizontal, vertical, misto)
  • Mantenha a relação janela / tela ao mover-se entre telas de tamanhos diferentes
  • Restaurar estados maximizados (horizontal, vertical)

Tipo.

AlexisBRENON
fonte