No se puede automatizar de manera confiable la configuración de xrandr en Debian 7 en VirtualBox

23

Aunque existen varias preguntas sobre el tema (de las cuales la respuesta más útil es esta ) y varios hilos en otros foros, no puedo configurar de manera confiable mi xrandrconfiguración en Debian 7 en VirtualBox.

Estoy tratando de usar xrandrpara controlar la configuración de mi pantalla (en lugar de permitir que mi entorno de escritorio los automatice) porque estoy usando el i3administrador de ventanas , que no automatiza la configuración de pantalla ni usa la configuración de pantalla del entorno de escritorio Gnome.

Preparar:

No estoy seguro de cuán relevante es todo esto, especialmente el hardware, ya que no creo que Debian pueda acceder a mucha información sobre la configuración del monitor; Por lo que puedo decir, VirtualBox solo informa la existencia de pantallas virtuales como si fueran monitores de hardware.

Hardware

  • Laptop Lenovo con gráficos nVidia (no se usa la GPU Intel integrada, AFAIK - hay una configuración de BIOS que usé para lograr esto)
    • Windows 7
    • 32 GB de RAM
    • Uso del último controlador (creo) nVidia (340.84): esto podría ser importante, ya que habilité la aceleración 3D en VirtualBox (ver más abajo), que creo que permite que el SO huésped tenga acceso al hardware del host
  • Seiki 4K TV (utilizado como monitor) a través de HDMI a través de la estación de acoplamiento (que convierte internamente DisplayPort a HDMI)
  • El monitor Samsung SyncMaster 243T se volvió vertical

VirtualBox

  • Usando VirtualBox 4.3.20
  • Se instalan adiciones de invitados (misma versión)
  • Recuento de monitores: 2 (asignado a Seiki y SyncMaster cuando está en modo de pantalla completa)
  • Memoria máxima de video (128 MB) utilizada
  • La aceleración 3D está habilitada

Configuraciones de invitado

  • Debian 7 de 32 bits
  • gnomey gdm3están instalados
  • WM preferido es i3

Comportamiento:

Cuando inicio i3y consulta xrandr, la configuración de pantalla por defecto siempre parecen ser idénticos entre VBOX0y VBOX1, los dos "monitores" que los informes de VirtualBox para xrandr(al menos, así es como yo lo entiendo, yo podría estar perdiendo algo). Tenga en cuenta que, por lo que puedo decir, no hay una buena manera de saber qué VBOX # es el monitor que no tiene prueba y error.

Por lo general, esto incluye una resolución razonable (aunque ligeramente inferior a la nativa) para mi SyncMaster vertical, pero ninguna resolución 4K para el Seiki. La opción "cambiar el tamaño de la pantalla de invitado" en VirtualBox no parece afectar xrandr.

He intentado varias modificaciones del script descritas en la respuesta vinculada anteriormente , pero en general parece que obtengo varios xrandrerrores. No he encontrado muchas correlaciones entre las diversas cosas que he probado y los errores que obtengo, pero aquí están las cosas principales que podrían ser importantes:

Ajustes de guiones

  • (Por lo general) omitiendo los VBoxServicepasos de reinicio (no parecen cambiar el xrandrcomportamiento)
  • Use la xrandr --fbopción antes que cualquier otro xrandrcomando; esto a veces da como resultado el error "pantalla especificada no lo suficientemente grande" que se enumera a continuación
  • Use 30 fps en lugar de 60 (4K a través de HDMI actual es 30 fps máximo, pero no creo que esto deba importar dentro de VirtualBox; en cualquier caso, creo que a veces lo hice funcionar y otras veces falló en ambos sentidos)
  • Usar en cvtlugar de gtf(estos parecen comportarse esencialmente de la misma manera)
  • Sustituya el primer número dado por gtf(que generalmente es alrededor de 200 o 300) con un número menor, como 100.00(creo que esto funcionó una o dos veces en la línea de comando, pero generalmente no parece hacer la diferencia)
  • Aleatorice los nuevos nombres de modo usando $RANDOM(también he intentado varios otros medios de jugar con los nombres)
  • --rmmodeModos explícitamente antes de crearlos usando --newmode(esto parece evitar el error de "fuente" que se enumera a continuación)
  • Use --right-ofo --left-ofcuando configure --outputs (ya que las pantallas generalmente se reflejan por defecto)

Error de mensajes

  • xrandr: specified screen 5120x2160 not large enough for output VBOX0 (3840x2160+3840+0) X Error of failed request: BadValue (integer parameter out of range for operation) Obtuve este ahora cuando volví a ejecutar el script después de que los monitores ya habían sido forzados a su resolución adecuada (usando la solución descrita en la siguiente sección). Esto me sorprendió, porque xrandrinforma lo siguiente: Screen 0: minimum 64 x 64, current 5120 x 2160, maximum 16384 x 16384
  • X Error of failed request: BadMatch (invalid parameter attributes) Esto a veces ocurre cuando se intenta hacer una --newmode. Probablemente sea la segunda razón más común para que el script falle. Yo creo que puede ser causada por xrandr"recordar" el nombre del modo de un intento anterior de ponerla en marcha, pero el uso $RANDOMno no aparecerá constantemente para resolver el problema, por lo que puede ser algún otro problema. (Sin embargo, supongo que es posible que incluso con $RANDOMcolisiones de nombres.) No he visto este error desde que comencé a usarlo --rmmode, pero no he ejecutado el script suficientes veces desde que agregué ese comando para asegurarme de que haya una diferencia en el comportamiento.
  • X Error of failed request: BadMatch (invalid parameter attributes) Esto a veces ocurre cuando se intenta hacer un --addmode. Probablemente sea la razón más común para que el script falle y me desconcierta. A veces, la ejecución manual (es decir, en un terminal) de la misma secuencia de comandos utilizada por el script parece ser una solución viable para este error, lo cual es extraño.

Solución alternativa de Gnome:

Descubrí que si inicio sesión en el escritorio de Gnome, luego realizo la función "Cambiar el tamaño de la pantalla de invitado" de VirtualBox, y luego cerrar sesión y volver a iniciarla i3, xrandrgeneralmente incluye las resoluciones correctas para Seiki y SyncMaster en su generación automática lista de modos, y la resolución 4K se establece como la resolución "preferida" para cada pantalla VBOX. Esto me permite simplemente usar xrandr --output [4K VBOX] --auto --left-of [SyncMaster VBOX], seguido de xrandr --output [SyncMaster VBOX] --mode [SyncMaster resolution](tenga en cuenta que la resolución de SyncMaster aún debe especificarse manualmente, ya que xrandrinforma la misma resolución preferida para ambos VBOX# sin tener en cuenta la verdad o la cordura).

Esta solución alternativa, una vez realizada, aparentemente persiste durante los apagados y reinicios (es decir, los modos deseados todavía están presentes en xrandrla lista de modos, aunque todavía necesito ejecutar los dos xrandrcomandos después de comenzar una i3sesión), pero no siempre persiste cuando simplemente cerrar sesión y comenzar una nueva i3sesión. Tenga en cuenta que la gdm3pantalla de inicio de sesión nunca tiene la resolución correcta (por lo que he visto). No tengo más comentarios sobre lo extraño que está sucediendo aquí.

EDITAR: Este enfoque no parece ser programable, y el comportamiento en realidad no parece ser consistente.

Otras notas:

  • No tengo un xconfarchivo (o similar) en mi etc/X11directorio.
  • Arreglar las pantallas es un problema bastante común, porque cada vez que apago uno de mis monitores, VirtualBox mata uno de los monitores virtuales de pantalla completa. (Urgh.)

Preguntas:

  • ¿Hay alguna manera de distinguir mediante programación entre las capacidades reales de hardware (es decir, resoluciones nativas) de diferentes monitores desde VirtualBox?
  • ¿Por qué veo estos diversos errores? ¿Qué está pasando xrandr, etc.?
  • ¿Hay alguna forma de lograr de manera confiable la resolución correcta de pantalla completa sin requerir que inicie una gnomesesión antes de mi i3sesión?

Posiblemente problemas relacionados

  • El puntero de mi mouse no se alinea correctamente de manera confiable con los clics que parecen detectarse; los clics generalmente ocurren debajo y a la derecha del puntero. Una vez que tengo las pantallas configuradas correctamente, este problema generalmente desaparece, aunque actualmente las pantallas tienen las resoluciones correctas pero el puntero todavía está ligeramente apagado.
  • Cuando logro obtener las resoluciones correctas, la pantalla parpadea ocasionalmente. Esto es molesto pero habitable. ¿Alguna idea de qué lo causa o si se puede solucionar?
Kyle Strand
fuente
Tendré que desenterrar mis notas, pero ¿cuáles son los modos admitidos para sus pantallas? ¿i3 tiene alguna forma de iniciar un script antes / justo después de iniciar sesión? superuser.com/questions/808737/… es lo que terminé haciendo con un problema físico similar, pero esto puede necesitar un poco de evaluación para trabajar en su caso.
Journeyman Geek
@JourneymanGeek El 4K tiene soporte para la mayoría de los modos estándar a 60 hz, y soporte para modos más grandes (incluido 4K) a 30 hz. SyncMaster parece admitir la mayoría de los modos normales, con una resolución nativa (vertical) de 1920x1280. El script de configuración i3 admite ejecutar un script al iniciar sesión; Estoy usando esta función para ejecutar automáticamente el script descrito anteriormente, que se parece al tuyo, pero sigo recibiendo xrandrerrores extraños .
Kyle Strand
¿Cómo lanzas i3? ¿Tiene su propia rutina de inicialización de X? ¿O lo dejas caer en tu .xinitrcy usas startx? Utilizo xmonad (que, según tengo entendido, es similar a i3?) Que inicio usando startx. Mi xrandrsecuencia de comandos se realiza .xinitjusto antes de que se inicie mi administrador de ventanas. He tenido excelentes resultados de esa manera. X está listo para partir, y nada más se ha lanzado para interferir.
Chris
Utilizo gdm3y i3seleccioné el entorno de escritorio predeterminado para mi cuenta.
Kyle Strand
1
Desafortunadamente, ninguno que se me ocurra de inmediato, ya que VBox no parece asignar nombres consistentemente a los monitores. ¿Podría publicar el resultado de xrandr --query(a) cuando detecta la configuración de forma incorrecta y (b) después de que todo funcione correctamente? O al menos uno de todo funciona correctamente.
Chris

Respuestas:

0

La actualización a la última versión de VirtualBox, 5.0.14, parece haber resuelto el problema.

Kyle Strand
fuente