Soluções possíveis:
Use painéis vazios cobrindo a região danificada para forçar janelas usando o espaço restante. Por exemplo, xfce4-panel
pode ser bem configurado. Depende do seu ambiente de trabalho o quão bem isso funciona. O Xfce e o LXDE irão funcionar bem, o Gnome irá criar problemas, eu suponho.
Isso também não ajuda em aplicativos de tela cheia que cobririam o painel, por exemplo, firefox + F11 ou VLC em tela cheia.
Solução alternativa para aplicativos de tela inteira: iniciando Xephyr
com o tamanho de tela desejado, posicionando-o e iniciando aplicativos dentro dele. Automatize isso com um script e 'xdotool':
Xephyr :1 -screen 1500x800x24 &
xdotool search --name Xephyr windowmove 0 437
Inicie os aplicativos na janela do Xephyr com DISPLAY=:1 firefox
. O Xephyr não suporta aceleração de hardware, mas virtualgl
pode ajudar aqui.
Melhor solução alternativa:
Use weston
com Xwayland
. Ele suporta aplicativos de aceleração de hardware e tela cheia.
Use um gerenciador de janelas bastante leve como openbox
na inicialização (ou melhor ainda, um sem decorações de janela como evilwm
). Ele serve apenas como ambiente de fundo, e weston o cobrirá.
Crie um arquivo myweston.ini
personalizado como este (veja man weston.ini
):
[core]
shell=desktop-shell.so
idle-time=0
[shell]
panel-location=none
locking=false
[output]
name=X1
mode=1366x768
[output]
name=X2
mode=1500x768
Crie um script como este para começar a weston em evilwm e Xwayland em Weston (personalize posições de 2 janelas de weston). Por fim, inicie o ambiente de área de trabalho desejado:
# start weston with custom config and two output windows
weston --socket=wayland-1 --config=$HOME/myweston.ini --output-count=2 >$HOME/weston.log 2>&1 &
sleep 1 # wait until weston is ready
# get window id's from logfile and move windows at target (xwininfo could give id's, too)
xdotool windowmove 0x$(printf '%x\n' $(cat $HOME/weston.log | grep 'window id' | head -n1 | rev | cut -d' ' -f1 | rev)) 0 0
xdotool windowmove 0x$(printf '%x\n' $(cat $HOME/weston.log | grep 'window id' | tail -n1 | rev | cut -d' ' -f1 | rev)) 1369 400
# start X server Xwayland in weston
WAYLAND_DISPLAY=wayland-1 Xwayland :1 &
sleep 1 # wait until Xwayland is ready
# start your desired desktop environment
DISPLAY=:1 startlxde
O script de início acima não configura a autenticação de cookie para clientes X. Em vez disso, você também pode usar x11docker para ter autenticação de cookies:
# start weston and Xwayland, read X environment
read Xenv < <(x11docker --weston-xwayland --gpu --output-count=2 --westonini=$HOME/myweston.ini)
# move weston windows to target locations
xdotool windowmove $(xwininfo -name "Weston Compositor - X1" | grep "Window id" | cut -d' ' -f4) 0 0
xdotool windowmove $(xwininfo -name "Weston Compositor - X2" | grep "Window id" | cut -d' ' -f4) 1367 400
# start desired desktop environment
env $Xenv startlxde
Xwayland aparece como uma "janela" cliente de weston. Infelizmente, devido a um bug em Weston ou Xwayland, ele nem sempre fica na posição 0: 0. Você pode mover o Xwayland para a posição desejada com [META] + botão esquerdo do mouse. Eu escrevi um relatório de erros , mas recebi uma resposta nesposta.