есть ли инструмент, который позволяет:
- запомнить текущую конфигурацию RandR (положение, ориентация, разрешение и т. д.) для каждого монитора,
- автоматически применить последнюю удачную конфигурацию, как только дисплей будет подключен, без необходимости возиться с апплетами или xrandr (1)?
Конфигурации должны быть применены для каждого пользователя, для каждого дисплея.
Если такого инструмента в дикой природе не существует, я бы хотел собрать его самостоятельно, но, насколько я вижу, я не могу сказать, что монитор подключен. Нужно ли опрашивать xrandr -q? время от времени, чтобы выяснить, что выход был подключен или отключен, или есть более эффективный способ сделать это? Можно ли настроить Udev именно на это?
udevadm monitor --property
из терминала и подключить монитор. С моей картой я вижу событие, когда она подключена. Возможно, вы сможете использовать правило + RUN в udev и некоторые сценарии bash, чтобы получить то, что вы хотите. Тем не менее, я не уверен, как вы сможете реализовать это для каждого пользователя с помощью udev.Ответы:
Я использую этот простой (самодельный) скрипт, который опрашивает RandR и переключается между LVDS1 и VGA1, когда VGA подключается / отключается. (Для HDMI выходов, в следующем файле сценария, изменить все
VGA1
кHDMI1
)Это грязное решение, но оно работает просто отлично.
Он настроен для моей настройки: вам, скорее всего, придется изменить выходные имена RandR (
LVDS1
иVGA1
), и, в отличие от меня, вам, вероятно, будет хорошо работать с режимом RandR по умолчанию для VGA.Полные шаги:
Ctrl+Alt+t
Перейдите в подходящее место, чтобы создать и сохранить сценарий оболочки с автоматическим переключением. пример
cd ./Desktop/
Создайте и отредактируйте файл .sh с помощью желаемого текстового редактора (здесь я использовал pluma. Вы можете попробовать nano, vim и т. Д.). Назовите это для вашего удобства. пример
sudo pluma homemadeMonitor.sh
Отредактируйте файл и скопируйте и вставьте все из вышеупомянутого скрипта (тот, что с #! / Bin / bash)
Сделайте исполняемый файл .sh набрав следующую команду в терминале
sudo chmod +x homemadeMonitor.sh
Запустите файл .sh
./homemadeMonitor.sh
источник
Отвечая на «[a] способ узнать, что монитор был подключен» часть вопроса:
Поддержка по-прежнему немного варьируется, но в последних ядрах есть некоторая поддержка для генерации событий udev, когда происходит горячее подключение дисплея. С ядром 2.6.38 и оборудованием ATI X1400 я получаю событие при первом подключении VGA-дисплея, но никаких событий при последующих отключениях или повторных подключениях дисплея не происходит. Аппаратное обеспечение Intel может иметь лучшую поддержку. Собственный драйвер NVIDIA в настоящее время не поддерживает KMS; Я не пробовал искать события горячей замены на оборудовании NVIDIA, но я сомневаюсь, что это сработает.
Если вы хотите поэкспериментировать с udev, попробуйте выполнить следующие действия:
[drm] radeon kernel modesetting enabled
и[drm] initializing kernel modesetting
udevadm monitor --property
и посмотрите, будут ли сообщения о событиях, когда вы отключаете дисплеиЕсли вы получаете события udev на дисплее hotplug, вы можете запустить скрипт с правилом udev, например:
Примечание. Это не будет работать, если вы используете графический процессор nVIDIA с проприетарным двоичным драйвером, поскольку он не использует KMS. Вы не получите никаких событий Udev.
источник
Что касается инструмента, который может хранить профили конфигурации монитора для каждого пользователя и для каждого дисплея, autorandr сделает именно это. https://github.com/wertarbyte/autorandr .
В моем ноутбуке установлена карта NVIDIA, поэтому вместо xrandr я использую серверную часть с дисперсией: http://willem.engen.nl/projects/disper/ . Autorandr будет использовать disper в качестве бэкэнда для управления вашими мониторами, если вы называете его как
autodisper
. Для остальной части этого поста я буду ссылаться на это какautorandr
на последовательность.Вы можете сохранить профили с
autorandr --save profile_name
. Запускautorandr
сам по себе даст вам список профилей и определит, какой из них обнаружен в качестве текущей конфигурации.Например:
Вы можете настроить автоматическую загрузку соответствующего профиля для текущей конфигурации с помощью
autorandr --change
. Эта команда в сочетании с правилом udev для запуска, когда он подключен в горячем режиме, будет делать то, что вы просили.В качестве дополнительной меры предосторожности я добавил
--default laptop
эту команду, которая по умолчанию будет отображать экран ноутбука, если нет сохраненного профиля, соответствующего текущей конфигурации. Таким образом, полная команда, которую я использую для переключения дисплеев:К сожалению, моя машина не выдает вывод udev, когда я подключаю монитор к горячему подключению. Я использую проприетарные драйверы NVIDIA, так что это не удивительно. Поэтому я связал его с ключом XF68Display (Fn-F8), что почти так же хорошо.
источник
udev
autorandr
: github.com/phillipberndt/autorandrЯ использовал предложенное выше правило udev вместе со сценарием оболочки, который выглядит как
Часть Xauthority так же важна, как и экспорт
DISPLAY
, вы можете использовать echo,$DISPLAY
чтобы увидеть, какому числу она равна. Используйтеxrandr -q
для просмотра внешних мониторов, которые у вас есть. Последнее утверждение просто чтобы убедиться, что вы никогда не застряли без дисплея.источник
Небольшая программа , которая ждет серверов X , чтобы уведомить его о конфигурации измененном монитора, а затем выполняет заданную команду (например,
autorandr
упомянутые в другом ответе) доступен по адресу: https://bitbucket.org/portix/srandrd/overviewПохоже, это более чистое решение, которое использует
udev
(где вам нужно беспокоиться о поиске подходящего X-сервера и т. Д.)источник
Если вам нужно, чтобы он автоматически обнаруживал отображение при подключении, кажется, что самое чистое решение - добавить правило UDEV для запуска сценария, содержащего ваши команды xrandr. Вот пример из решения одного пользователя 1 :
Мониторинг (вывод) событий UDEV с помощью
udevadm
этого шага будет наиболее важным для каждого пользователя. Беги
udevadm monitor --environment --udev
. Затем подключите кабель HDMI.Правило UDEV
Основываясь на выводе вышеприведенной команды, пользователь создал это правило UDEV в
/etc/udev/rules.d/95-monitor-hotplug.rules
.Обратите внимание на используемые переменные среды, поэтому xrandr будет запускаться под профилем пользователя.
скрипт xrandr hotplug_monitor.sh
Вы можете настроить параметры xrandr в соответствии с вашими потребностями.
источник
Для тех, кто по какой-либо причине не хочет идти по маршруту горячего подключения, все еще возможно не опрашивать в скрипте с использованием inotifywait:
Опрос xrandr дал серьезные проблемы с юзабилити на моем новом ноутбуке (мышь периодически зависала).
источник
При использовании решения peoro я получил дополнительный вывод от xrandr, поэтому я использовал опцию -c для grep, которая подсчитывает количество совпадений. Я адаптировал его для HDMI и добавил аудио переключатель:
источник
Я думаю, что люди, которые смотрят на этот вопрос, не те, кто хочет использовать GNOME, и те, кто использует GNOME, не должны были бы смотреть на этот вопрос, но в интересах полноты:
GNOME имеет эту встроенную функциональность. Если вы измените настройку через gnome-control-center, gnome-settings-daemon запомнит (включит
.config/monitors.xml
) и автоматически применяет ее, когда монитор подключен или отключен.К сожалению, конфигурация в файле monitors.xml плохо документирована. Смотрите вопрос здесь . Инструменты отображения гномов также не имеют возможности настройки панорамирования, масштабирования для каждого монитора и не уменьшают масштаб. Поскольку многие люди используют экран ноутбука HiDPI вместе с обычным экраном DPI, инструментов недостаточно, чтобы получить работоспособное решение.
Я видел, что это упомянуто как пункт дорожной карты для Wayland, хотя, когда это наконец прибудет, мы могли бы видеть решение для упомянутых проблем. До тех пор в Gnome я просто запускаю скрипт запуска после задержки, чтобы вручную настроить xrandr.
источник
Для упрощения, например, в Xfce, пожалуйста, установите «arandr», который должен быть доступен в ваших дистрибутивах. Сконфигурируйте ваш дисплей, используя «arandr», затем сохраните его, например, как «displayLayout». Арандр должен добавить для вас расширение «.sh», чтобы его можно было напрямую использовать в «функции connect ()», как написано в сценарии «hotplug_monitor.sh», упомянутом выше iyrin, например:
Чтобы использовать механизм отключения, добавьте вверху скрипта чуть ниже "#! / Bin / bash" примерно так:
xrandr обнаружит дисплей и передаст вывод в awk, который отфильтрует его по регулярному выражению «connected», за которым следует цифра, которая, по сути, и есть то, что нам нужно. По моему мнению, нет необходимости совпадать с точным разрешением в регулярном выражении, поскольку основной дисплей отображается как «подключенный основной», за которым следует число, то есть разрешение. Тогда awk "print $ 1" будет печатать только первый столбец, который в этом случае является именем внешнего монитора, и это будет сохранено в переменной PLUGGED_EXTERNAL. Далее вместо фиксированного отображаемого имени «HDMI1» в скрипте $ PLUGGED_EXTERNAL можно использовать так:
источник
Редактирование моего ответа, чтобы упростить настройку.
Установите autorandr для автоматизации макета экрана в xrandr, загрузите последнюю версию .deb с https://github.com/nalipaz/autorandr/releases и запустите:
Настройка авторандра с сохраненными макетами экрана
Например, на моем ноутбуке без подключенных мониторов я настроил arandr так, как хочу, затем запустил:
Затем подключил мой hdmi и перенастроил arandr, затем запустил:
После настройки каждого макета, который вы можете запустить (замените «mobile» на предыдущее предпочтительное имя, я использовал mobile):
Теперь, когда autorandr полностью настроен, вы можете автоматизировать процесс, установив пакет, который будет опрашивать подключенные дисплеи и запускаться
autorandr --change
при обнаружении. Да, я знаю об udev, и вы можете настроить его, если он работает для вас, но в моем тестировании udev не работал для моего hdmi последовательно. Это работало только 1 из каждых 20 штепселей / отключений или около того, и иногда это просто останавливалось вообще.Загрузите последнюю версию .deb отсюда: https://github.com/nalipaz/poll-xrandr/releases/, а затем установите с
Скорее всего, необходимо выполнить больше задач после завершения
autorandr --change
, autorandr позволяет вставлять эти команды в файл ~ / .autorandr / postswitch. Сделайте следующее:Теперь отредактируйте файл postswitch, чтобы он был похож на следующее:
Кроме того, вы, вероятно, захотите добавить autorandr и poll-xrandr в свои стартапы, что-то вроде следующих двух команд:
Отключите или подключите монитор и наблюдайте за волшебством!
источник