fakexrandr, Зеркальные поддельные дисплеи - X Ошибка неудавшегося запроса: BadMatch

fakexrandr, Зеркальные поддельные дисплеи - X Ошибка неудавшегося запроса: BadMatch

Мне нужно создать зеркальные фальшивые дисплеи на одном физическом мониторе. Я установилфейкxrandrи теперь у меня есть два поддельных дисплея (683x768) на 1366x768 (макс./предпочтительно) мониторе моего ноутбука.

При запуске xrandr --output eDP1~1 --same-as eDP1 --verboseкоманды возникает следующая ошибка:

введите описание изображения здесь

*также xrandr --fb 683x768выводится та же ошибка.

Филипп Берндт(владелец/создательфейкxrandr) сказал: «Применение любых настроек зависит от графического драйвера».Эта проблема. Но меня этот ответ не удовлетворил.

Для отслеживания проблемы я записал вывод xrandr --verboseна двух физических мониторах. Вы можете следить за коммитами вэтот репозиторийчтобы увидеть поведение выходных данных xrandr --verbose.

  • После того, как я это сделал, я понял, что xrandr --output eDP1~1 --same-as eDP1команда пытается назначить current 683x768. Screen 0:Но графический драйвер или физический монитор на моем ноутбуке не имеет 683x768опции/поддержки вывода. Возможно, это проблема. (Я не уверен в точности этого абзаца, возможно, он может быть совершенно неверным.)

В общем: какова истинная причина этой ошибки на снимке экрана и как решить эту проблему?

решение1

RandR — это расширение сервера X11, которое используется для передачи конфигурации выходов между клиентами сервера (= приложениями) и графическим драйвером. Большинство приложений на самом деле не говорят на этом протоколе сами, а вместо этого используют библиотеку под названием libXrandR. FakeXRandR заменяет эту библиотеку той, которая по-прежнему запрашивает конфигурацию у графического драйвера, но затем возится с результатом, чтобы обмануть приложения, заставив их поверить, что присутствовала совершенно другая конфигурация, чем есть на самом деле. Поскольку это обязательно приводит к ошибкам, если кто-то пытается изменить один из поддельных выходов, он пытается смягчить самые серьезные проблемы, заменяя любые запросы конфигурации на поддельных выходах запросами на изменение исходного физического выхода. Но они, конечно, все равно потерпят неудачу, если вы попытаетесь применить разрешение, которое существует только на поддельных выходах.

Хорошей аналогией может быть ситуация, когда у вас довольно старая машина, которая может ехать со скоростью 50 км/ч. Теперь вы хотите ехать по улице, где требуется ехать со скоростью 100 км/ч. Решение, которое ищет FakeXRandR, заключается в замене цифр на тахометре таким образом, чтобы стрелка теперь показывала 180 км/ч, когда вы на самом деле едете со скоростью 50. Если вас останавливает регулировщик, вы можете сказать: «Посмотрите на офицера, мой спидометр показывает, что я могу ехать со скоростью 180, так что я в порядке», и он, вероятно, согласится с этим. Но на самом деле вы все равно не можете ехать быстрее, потому что для этого вам пришлось заменить двигатель, а не какие-то напечатанные цифры на панели приборов.

вкратце:FakeXRandR — неподходящий инструмент для вашей задачи.

Если вам действительно нужно сделать это на уровне RandR, вам придется исправить графический драйвер как в коде X11, так и в коде ядра.Я написал несколько советов о том, где искать, в другом отчете об ошибке для FakeXRandr. Более простым решением, если вы просто хотите, чтобы правая половина экрана отображала левую, будет использование продвинутого композитного оконного менеджера, напримерКомпиз. Компоновочные менеджеры добавляют слой перенаправления между окнами приложений и тем, что вы фактически видите. Это позволяет им, в данном случае, рисовать каждое окно дважды, сначала на левой стороне вывода, затем на правой стороне; что фактически клонирует ваш вывод. Для этого уже есть плагин (установите все пакеты compiz, особенноcompizconfig-настройки-менеджер, ccsm и найдите там то, что вам нужно), или, по крайней мере, должна быть возможность написать такой, который будет делать то, что вам нужно, не прилагая слишком больших усилий.

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