Возможные обходные пути:
Используйте пустые панели, закрывающие поврежденную область, чтобы форсировать окна, используя оставшееся пространство. Например, xfce4-panel
можно хорошо настроить. Насколько хорошо это работает, зависит от среды вашего рабочего стола. Xfce и LXDE будут работать нормально, Gnome, я полагаю, создаст проблемы. Это не помогает для полноэкранных приложений, которые также закрывают панель, например, firefox+F11 или VLC в полноэкранном режиме.
Обходной путь для полноэкранных приложений. :Запуск Xephyr
с желаемым размером экрана, его размещение и запуск приложений внутри него. Автоматизируйте это с помощью скрипта и xdotool `:
.
Xephyr :1 -screen 1500x800x24 &
xdotool search --name Xephyr windowmove 0 437
Запуск приложений в окне Xephyr с помощью DISPLAY=:1 firefox
. Xephyr не поддерживает аппаратное ускорение, но здесь может помочь virtualgl
.
Лучшее решение:
Используйте weston
с Xwayland
. Он поддерживает аппаратное ускорение и полноэкранные приложения.
Используйте довольно легкий оконный менеджер, такой как openbox
при запуске (или, что еще лучше, вообще без оконных украшений, напримерevilwm
). Он служит только в качестве фонового окружения, его закроет Уэстон.
Создайте пользовательский myweston.ini
файл, подобный этому (см.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
Создайте скрипт, подобный этому, чтобы запустить Weston в evilwm и Xwayland в Weston (настроить положение 2 окон Weston ). Наконец, запустите желаемую среду рабочего стола :
.
# 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
Приведенный выше сценарий запуска не настраивает аутентификацию файлов cookie для X-клиентов. Вместо этого вы также можете использовать x11docker для проверки подлинности файлов cookie :
.
# 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 появляется как клиентское "окно" Weston. К сожалению, из-за ошибки в Weston или Xwayland, он не всегда находится в позиции 0 :0. Вы можете переместить Xwayland в желаемую позицию с помощью [META] + левая -кнопка -мыши. Я написал отчет об ошибке , но не получил ответа.