Как открыть полноэкранное приложение на обоих мониторах двухканального дисплея?

Как открыть полноэкранное приложение на обоих мониторах двухканального дисплея?

У меня есть две машины с Ubuntu 10.4 (и Ubuntu продолжает скрывать все больше и больше конфигураций xorg.conf, так что я больше не знаю, где их найти). Одна из них — ноутбук с двумя мониторами: DP1 — внутренний экран, а VGA1 — внешний; оба работают с разрешением 1600x900. Другая машина — настольный компьютер с VGA1 и HDMI1 (который на самом деле является портом дисплея с адаптером DVI) с разрешением 1600x900. Таким образом, в обоих случаях мой рабочий стол имеет разрешение 3200x900. Я запускаю VNC-сервер на ноутбуке и подключаюсь к нему (через туннель SSH) с рабочего стола — когда я нажимаю горячую клавишу полноэкранного режима, я получаю вид удаленной машины с разрешением 1600x900 на одном мониторе и половину моего локального рабочего стола на другом мониторе — «полный экран» расширяется только для заполнения одного локального монитора.

Обычно это именно то, что вам нужно, когда вы открываете на весь экран веб-браузер, почтовый клиент или другое приложение. Я уверен, что есть некая магия X, чтобы сделать понятным, что на самом деле подразумевает полный экран, и клиентское приложение VNC просто послушно принимает то, что ему говорят. Хотя я хотел бы сохранить нормальное поведение полного экрана для обычных приложений, но когда я подключаюсь к другой машине с разрешением 3200x900 по VNC, мне бы очень хотелось, чтобы полный экран растягивался на оба локальных дисплея. Изменение размера окна до «закрытого» не совсем хорошо, поскольку у меня все еще есть локальные панели вверху и внизу одного дисплея (хотя я могу настроить их на автоматическое скрытие), а также граница окна клиентского приложения VNC (так как оно, похоже, не учитывает -notitle).

Есть ли хороший способ заставить X лгать одному приложению о размере "полного экрана"? Могу ли я заставить его лгать всем приложениям? xrandr --noprimaryпохоже, это не имеет никакого эффекта.

решение1

Я немного покопался. Современная версия магии X11, которую я предположил, на самом деле является магией оконного менеджера,_NET_WM_STATE_FULLSCREEN. Мой VNC-клиент на самом деле использует этот запрос и расширяется до одного монитора. Похоже, что сначала он должен установить_NET_WM_FULLSCREEN_MONITORSдля описания того, какие мониторы использовать в качестве верхнего/нижнего/левого/правого краев, но это не так. Однако я вытащил исходный код из dpkg и покопался, чтобы взломать его. Даже с _NET_WM_FULLSCREEN_MONITORS я не смог добиться правильного поведения. Клиент VNC знает, что он хочет получить разрешение 3200x900, и он пытается несколько раз (30) изменить размер до этого (устанавливая как базовую, так и максимальную ширину и высоту в XA_WM_NORMAL_HINTS, а затем используя XResizeWindow()) в верхнем окне, но это всегда игнорируется. Возможно, compiz ведет себя неправильно?

Но у клиента VNC также есть код для работы с X напрямую, а не через оконный менеджер. Когда я вырезаю код обнаружения WM, он изменяет корневое окно более напрямую (XtNoverrideRedirect, XReparentWindow наверх, XMapRaised и т. д.), и это работает как по волшебству (если я также отключу код обнаружения в функции un-fullscreen). Возможно, он работает даже лучше — alt-tab и другие клавиши управления окнами теперь проходят на удаленную машину, пока я не сниму полноэкранный режим окна клиента VNC.

Так что, возможно, он хакерский и имеет некоторые недостатки*, но, по крайней мере, на данный момент я добился того, чтобы он вел себя приемлемо, на мой взгляд.

*: un-fullscreening не перерисовывает должным образом корневое окно или другие окна, которые были закрыты. Но переключение на другой вьюпорт и обратно вызывает перерисовку, что является приемлемым обходным решением.

решение2

Еще одной возможностью для изучения может стать возможность принудительного выбора определенного размера/местоположения некоторых программ при их запуске.

Я определяю команду для запуска Opera через значок E17 следующим образом:

/usr/local/bin/opera-11.01 -geometry 1600x3200-0+100 %U

Это задает размер и расположение окна Opera.

А в Xemacs я не могу контролировать местоположение, но могу указать размер окна, в котором будет выполняться запуск при запуске, в моем init.el:

(набор-размер-рамы (оконная-рама) 140 80 )

Это не точное решение вашей ситуации, но, возможно, вы можете рассмотреть возможность установки для любого программного обеспечения, которое вы используете, определенного размера/места, эквивалентного полному (двойному) экрану? Не у всех будет такая возможность, но, возможно, стоит рассмотреть.

Связанный контент