Permitir rotar en modo vertical pero no rotar la pantalla externa

Para evitar que esta pregunta se marque como duplicada, he incluido una lista de preguntas similares al final de esta publicación con una explicación de por qué mi pregunta es diferente. Lea estos motivos antes de marcar esta pregunta como duplicada.


Estoy tratando de averiguar cómo hacer que mi Nexus 5, en modo vertical, se muestre en un monitor externo, en modo vertical (conectado a través de SlimPort/HDMI).

En modo horizontal todo está bien:

Modo horizontal, monitor a la izquierda, teléfono a la derecha

Sin embargo, en el modo vertical, la señal aún se emite como si estuviera destinada a mostrarse en una pantalla horizontal, lo que no funciona en absoluto si la pantalla está en modo vertical:

Modo retrato, monitores a la izquierda y al medio, teléfono a la derecha

Puede ver aquí que tanto en el modo horizontal como en el vertical, el teléfono emite la misma señal de 1920x1080, excepto que en el modo vertical, la GPU del teléfono gira el contenido de la pantalla y se muestra como una imagen de 607x1080 en el medio de la pantalla de 1920x1080. (No es, como algunas personas han sugerido, emitir una señal de 1080x1920 de que el monitor está centrado. Puede verificar esto porque al cambiar el teléfono entre paisaje y retrato muestra una buena animación de rotación y el monitor no pierde la sincronización como lo haría si el la resolución cambió.)

Dado que el teléfono, cuando está en modo vertical, está girando la imagen enviada a la pantalla externa, quiero deshabilitar esto, para que solo se emita tal cual, sin rotación. Esto, por supuesto, aparecerá mal en un monitor horizontal, pero cuando gire ese monitor al modo vertical, estará bien:

ingrese la descripción de la imagen aquí

¿Hay alguna forma de deshabilitar esta rotación para que una pantalla externa en modo vertical pueda mostrar el contenido del teléfono cuando también está en modo vertical?


Se han hecho preguntas similares antes, pero ninguna después de la misma solución:

No puedo hacer que esto funcione. ¿La respuesta aceptada todavía funciona para usted con las versiones más nuevas de Android? Si es así, ¿podría ampliar los pasos necesarios? Gracias
Sí, lo probé siguiendo los comandos en la respuesta aceptada con Android 6.0.1 y funciona. Desafortunadamente, la señal que se emite es solo de 1280x1024, por lo que todavía no se muestra correctamente en mi pantalla de 1920x1200 (la pantalla se gira correctamente en modo vertical, pero hay barras negras a la izquierda y a la derecha de la pantalla vertical). Como mencioné en mi comenta esa respuesta, solo funciona si eres root, así que usé la aplicación SSH Droid para conectarme como root, luego corrí setprop persist...allí para poder ver cualquier mensaje de error más claramente y estar seguro de que era el usuario root.

Respuestas (2)

Pruebe estas instrucciones, usando una computadora con adb instalado y su teléfono conectado:

Android Jelly Bean (4.2) bloquea la rotación de HDMI de forma predeterminada. Puede desbloquear siguiendo las instrucciones de este compromiso.

  1. Agregue modos de duplicación especiales para fines de demostración.

  2. Suponga que la rotación de la pantalla HDMI es vertical.

    adb shell setprop persist.demo.hdmirotation portrait
    
  3. No bloquee la rotación mientras el HDMI esté conectado.

    adb shell setprop persist.demo.hdmirotationlock false
    
  4. Oculte las pantallas secundarias de las aplicaciones, pero continúe reflejándolas.

    adb shell setprop persist.demo.singledisplay true
    

Fuente: https://community.freescale.com/docs/DOC-97740 (nota: enlace roto a partir de enero de 2022)

¡Funcionó! El cambio se movió un poco, pero todavía existe en el último código de Marshmallow ( ver aquí ), sin embargo, debe ser root para agregar la persist.demo.hdmirotationpropiedad. Si no es el usuario raíz, obtendrá un error cuando intente establecer la propiedad. El único inconveniente es que la señal de salida es 1280x1024 en lugar de 1920x1200, ¡pero al menos está girada! ¡El siguiente paso es descubrir cómo cambiar la resolución!
No puedo hacer que esto funcione. después de enviar los comandos a través de adb, Android aún asume que el monitor está en orientación horizontal. ¿Podría proporcionar más instrucciones paso a paso por favor (tampoco entendí el paso 1). ¿O esto ya no funciona con Android 6?
Intente ejecutar el comando de shell getprop | grep demopara confirmar que los valores que ha establecido se han almacenado correctamente.
No me funciona en oneplus5 con Android 8.1. Revisé el código, todas las versiones (6.0 ~ 8.1) tienen persist.demo.hdmirotation También intente en LG G3, Nexus, ninguno de estos dispositivos funcionó.

Sé que esta es una publicación anterior, pero estaba lidiando con un problema similar, pero estaba tratando de proyectar la pantalla de un dispositivo Pixel 2 en una pantalla vertical y me encontré con muchos problemas. El problema principal parece ser que los píxeles 2 y 3 no parecen admitir la salida HDMI, por lo que estas propiedades no resuelven el problema.

Sin embargo, pude resolver esto siguiendo el enlace que Malvineous publicó en un comentario anterior. Justo debajo del código relacionado con la configuración, persist.demo.hdmirotationhay otra configuración llamada persist.demo.remoterotationasí como otra llamada persist.demo.rotationlock. Estas fueron la clave para lograr que un teléfono transmitiera en modo vertical a la pantalla. Estas configuraciones parecen existir en las versiones 8.0 y 9.0 de Android, aunque cambié de categoría mi Pixel 2 a 8.0 en el proceso de tratar de resolver esto y aún no he probado en 9.0.

Para llegar a este punto tomó varios pasos que se detallan a continuación.

  1. Debe desbloquear y rootear su teléfono (utilicé MagiskManager para ayudar a rootear y encontré esta guía muy útil ya que explica un poco más en detalle exactamente qué hacer para aquellos como yo que no lo habían hecho antes).
  2. Usando la herramienta adb, inicie el shell adb en su dispositivo conectado y rooteadoadb shell
  3. Active el superusuario ingresando suen shell (para mí, esto tenía el paso adicional de ingresar a MagiskManager y permitir el acceso de SuperUser al shell).
  4. Ingrese las siguientes líneas en el shell para crear y establecer estas propiedades:
    setprop persist.demo.remoterotation portrait
    setprop persist.demo.rotationlock false
    

Una vez que se configuró, transmití la pantalla de mi Pixel 2 a un dispositivo Chromecast y estaba en la orientación vertical deseada. Espero que esto ayude a cualquiera que en el futuro intente resolver esto.

¿Debería funcionar con un Samsung Galaxy S20 rooteado? Configuré estas propiedades con éxito, pero la salida hdmi aún no se muestra correctamente en un televisor vertical.
@ chief7 No estoy seguro de que funcione en una galaxia. Específicamente, solo estaba trabajando en Pixel 2. Es algo no oficial, por lo que fue un poco difícil hacer que funcionara. ¿Quizás combinar las configuraciones que tengo con las de la respuesta anterior? Es posible que deba buscar en el código del sistema operativo y encontrar cualquier configuración relevante que pueda establecer.
@chonigman Oneplus 7T con Android 11 tipo C acoplado a HDMI y estas propiedades lamentablemente no funcionan. Dumpsys display (retrato - pastebin.com/fpx4Phyr ) Dumpsys display (paisaje - pastebin.com/9QpQht05 ) DisplayManager probablemente pueda ayudar con la rotación remota. ¿Alguna pista?