Максимизируйте окна до физического экрана при использовании виртуального разрешения с xrandr
У меня есть нетбук с небольшим экраном в широкоэкранном формате (1024x600), что означает, что многие программы, разработчики которых не представляли такую вещь, открывают окна, размер которых не может быть изменен, а днища скрыты. Через Ubuntu 10.04 я позаботился об этом с помощью команды xrandr:
xrandr --output LVDS1 --fb 1024x768 --panning 0x768
(обратите внимание на 0x), что дало мне виртуальный рабочий стол нормального размера, который панорамировал вертикально, но (каким-то образом) диспетчер окон игнорировал, поэтому развернутые окна занимали только физический экран. В результате мне не пришлось панорамировать, пока не появилось большое диалоговое окно: приятно.
В 11.04 это не совсем работает. Все, что я сказал выше, является правдой, но нижние 168 пикселей кажутся постоянно черными, поэтому, если большое окно расширяется вниз, я не могу видеть, что в нем (однако, оно есть: появляются маркеры изменения размера, и они полезны для тех, случаи, когда изменение размера разрешено). Я предполагаю, что это связано с Unity. Это побеждает цель, поэтому я пробую команду xrandr:
xrandr --output LVDS1 --fb 1024x768 --panning 1024x768
(обратите внимание на 1024x). Увы, это больше не обманывает оконный менеджер, а развернутые окна все уходят снизу. Вопрос:
Как настроить все так, чтобы "развернутое" окно занимало только физический экран (или, в более общем случае, занимало определенный фрагмент экрана)?
На этот вопрос я бы с удовольствием ответил:
Почему первая команда xrandr обманывает оконный менеджер ("0x" означает, что, согласно man-странице, панорамирование по горизонтальной оси отключено; функционально это бессмысленно, поскольку виртуальный размер совпадает с физическим размером)? Что не так с Unity?
Обратите внимание, что действие "максимизировать" необходимо, так как в Unity максимизированное окно оформлено по-другому: его заголовок поглощается на панели инструментов в верхней части экрана, сохраняя для меня ценные пиксели. Простое изменение размера окна не является хорошей альтернативой.
Рекомендации:
Я нашел этот вопрос: я бы хотел, чтобы максимизировать охват одной трети экрана. Я был очень разочарован, когда Compiz Maximumize, казалось, ничего не делал (есть ошибка Launchpad: https://bugs.launchpad.net/ubuntu/+source/compiz-fusion-plugins-extra/+bug/462158).
Я также нашел тот же вопрос на суперпользователя: https://superuser.com/questions/269966/id-like-to-prevent-maximize-from-covering-one-third-of-the-screen, который предлагает две альтернативы. Плагин Compiz Grid не помогает, потому что он не максимизируется, как я описал выше. Я не пробовал оконный органайзер Python, но он похож на Grid. В общем, я не ожидаю, что умные сценарии помогут, потому что значение "максимизировать" контролируется самим оконным менеджером, и поэтому решение должно быть решением Compiz. Есть один?
2 ответа
Позвольте мне ответить на мой собственный вопрос; ответ странно вовлечен. Хитрость заключается в том, что требуемое поведение рабочего стола (которое содержалось в 10.04) теперь (в 11.04) контролируется Compiz, который имеет понятие "выходы": то есть экраны для рисования. Они настраиваются в диспетчере параметров CompizConfig (пакет compizconfig-backend-gconf
или же -kconfig
), в меню "Общие параметры", на вкладке "Настройки дисплея".
Эта вещь имеет три настройки, все из которых важны. Самым важным является "Обнаружение результатов": это должно быть отключено, потому что все дело в том, что я хочу создать нефизическую настройку экрана, тогда как автоопределение просто подберет размер моего экрана.
Вторым по важности является поле "Выходы", представляющее собой список разрешений. На первый взгляд вы можете ожидать, что здесь будет указано "1024x768", но это неправильно: он говорит Compiz использовать весь виртуальный экран, поэтому развернутые окна будут перетекать вниз; это неправильное поведение. Но написание "1024x600" также не работает, так как это скажет Compiz притвориться, что экран высотой всего 600 пикселей; поэтому нелогичным результатом является решение растянуть каждое окно. Это уродливо, а также не функционирует, вызывая удивительные графические глюки и, как ни странно, смещение кнопок от места, где вам нужно нажать, чтобы активировать их. Нехорошо.
Гораздо лучший вариант - написать "1024x600+0-168", что говорит Compiz о том, что на самом деле на дне 168 неиспользованных пикселей: это воспроизводит поведение "черной полосы", на которое я жаловался. Приятно знать, откуда это, но я все еще не хочу этого. Но он говорит мне, что это значит: это означает, что Compiz просто игнорирует эти пиксели: он не будет рисовать окна там. Моя мышь все еще там, хотя, потому что это поведение контролируется X, который предшествует Compiz. Кажется, что нужно сделать так, чтобы Compiz велел рисовать там (чтобы окна могли идти туда), но не рисовать там (чтобы они туда не ходили).
Поэтому полностью правильное решение состоит в том, чтобы описать два устройства вывода для Compiz: одно "1024x600 + 0-168" и одно "1024x768", что говорит Compiz рисовать, а не рисовать на этих нижних пикселях одновременно. Но как убедиться, что он знает, какой из них "хотеть"? Это первая опция на этой вкладке: "Перекрывающийся обработчик вывода". Установите его на "Предпочитать меньший вывод", что в точности соответствует тому, что я сказал словами там.
Итак, ответ: беги xrandr --mode 1024x700 --fb 1024x768 --panning 0x768
; перейдите к параметрам дисплея Compiz и вставьте два выхода "1024x600 + 0-168" и "1024x768"; снимите флажок "Обнаружить выходы"; и сделайте так, чтобы "Overlapping Output Handler" предпочитал меньшие выходы. Уф.
Эта вещь Xrandr очень весело и полезно. Спасибо, что поделились этой информацией! Панорамирование работает! Я в дистрибутиве на основе lubuntu. Но есть и другое более простое решение, найденное здесь http://forums.linuxmint.com/viewtopic.php?f=110&t=146674
В основном, для окон, которые слишком велики для нетбуков, подобных нашему (у меня также 1024x600), просто нажмите alt + щелчок левой кнопкой мыши по окну и перетащите его в любом направлении. Таким образом, мы можем легко увидеть нижние пиксели.