ElectronJS не может обнаружить два монитора с разными значениями X11 DISPLAY.

Вопрос или проблема

У меня есть требование, где я использую два монитора. Каждый раз, когда мы отображаем интерфейс входа, на одном мониторе будет интерфейс входа, а на другом – пустой экран. Мне удалось это реализовать с помощью Electron JS.

Указанный сценарий работает отлично, когда значение DISPLAY для обоих мониторов равно :0. Я могу обнаружить оба монитора и запустить два окна: одно для интерфейса входа, а другое для управления мониторами.

Работающий код:

numberOfScreens = screen.getAllDisplays()       // Возвращает два монитора
numberOfScreens.forEach((display) => {
  console.log(display.bounds.x)                // У обоих мониторов будут разные значения X и Y 
  console.log(display.bounds.y)
})

Но тот же код не работает, когда два монитора имеют разные значения DISPLAY: :0 и :0.1.

numberOfScreens = screen.getAllDisplays()  // Возвращает один монитор, не может обнаружить другой.
numberOfScreens.forEach((display) => {
  console.log(display.bounds.x)          
  console.log(display.bounds.y)
})

Буду очень признателен, если кто-нибудь сможет предоставить мне решение для этой задачи. Заранее большое спасибо.

Ответ или решение

Проблема, с которой вы столкнулись, связана с тем, что Electron на данный момент не поддерживает работу с несколькими дисплеями, использующими разные значения переменной окружения DISPLAY при работе с X11. При использовании двух мониторов с одинаковым значением DISPLAY (например, :0), Electron может корректно обнаруживать оба дисплея и работать с ними, как вы заметили. Однако, когда мониторы имеют разные значения DISPLAY (например, :0 и :0.1), Electron будет видеть только один дисплей, что и вызывает вашу проблему.

Вот несколько подходов для решения вашей проблемы:

  1. Переключение на один DISPLAY: Попробуйте запустить оба монитора с одинаковым значением DISPLAY. В некоторых случаях вы можете настроить X11 так, чтобы оба монитора использовали один и тот же DISPLAY. Используйте инструмент xrandr для настройки распределения экранов.

  2. Использование Virtual Display (VNC / Xvfb): Используйте виртуальный дисплей, такой как Xvfb (X virtual framebuffer), чтобы создать единый контекст для вашего приложения. Вы можете настроить Xvfb с необходимыми параметрами и затем использовать это для запуска вашего приложения Electron.

  3. Ручное управление окнами: Если вы не можете изменить настройки DISPLAY, вы можете вручную управлять окнами. Вам нужно будет научиться управлять окнами при помощи других инструментов, возможно, используя библиотеки вроде wmctrl или xdotool для управления окнами на уровне X11. Это не является идеальным решением, но может помочь в определенных сценариях.

  4. Проверка поддержки Electron: Следите за обновлениями Electron. Возможно, в будущих версиях будет добавлена поддержка работы с несколькими DISPLAY. Проверьте документацию Electron и официальные репозитории на GitHub.

  5. Обратная связь в сообществе Electron: Если эта проблема критична для вашего проекта, вы можете оставить обращение на GitHub в репозитории Electron, чтобы разработчики могли рассмотреть возможность добавления поддержки такой функциональности в будущих версиях.

Попробуйте применить один из этих методов для решения вашей проблемы. Если вы столкнетесь с дополнительными трудностями, пожалуйста, не стесняйтесь обращаться за более детальной информацией или поддержкой!

Оцените материал
Добавить комментарий

Капча загружается...