2

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

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

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

2 ответа2

3

Я немного покопался. Современная версия магии 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 и т.д.), И это работает как чудо (при условии, что я также отключаю код обнаружения в не полноэкранной функции ). Возможно, это работает даже лучше - alt-tab и другие ключи управления окнами теперь проходят на удаленную машину, пока я не открою полноэкранное окно клиента VNC.

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

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

0

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

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

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

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

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

(set-frame-size (window-frame) 140 80)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .