Como posso fazer o arranjo de exibição do Unity manter as configurações?

0

Eu movo meu laptop (ThinkPad T570, Ubuntu Xenial, Unity / Compiz) entre diferentes ambientes de trabalho, e acho que usar o applet "Display" do Unity Control Center não mantém de forma confiável (nunca?) os arranjos que eu especificar.

Para contornar isso, eu escrevi um script bash / xrandr que organiza as coisas como eu quero. (Disponível aqui como uma essência , mas os detalhes não são realmente essenciais para minha pergunta, então não incluo na íntegra). Se as telas não aparecerem corretamente, eu executo esse script para organizá-las.

O que eu gostaria de fazer é ativar esse script na conexão do monitor. Unity / Compiz faz isso para as configurações armazenadas em Display prefs, então eu gostaria de saber a maneira correta de ter minhas configurações preferidas, conforme expresso em bash / xrandr, e que devem ser entregues pelo Ubuntu como parte da experiência "nativa" .

UPDATE: achei ~/.config/monitors.xml , que parece ser o local onde o Unity armazena as configurações. Aqui está o meu, com novas revisões quando eu trocar de lugar.

Eu pensei em acionar o rearranjo via /etc/udev/rules.d , mas isso exigiria permitir que scripts executados pelo root falassem com meu WM, o que presumivelmente significa abrir permissões de xhost. Como o sistema operacional padrão parece organizar displays sem isso (não apenas para um arranjo que eu queira), prefiro encontrar a solução "nativa" possível.

    
por Chris Burgess 11.12.2017 / 22:25

1 resposta

0

Acabei lidando com isso em um script bash que testa a saída de xrandr para dispositivos conectados e define os layouts apropriados por ambiente.

Abaixo está uma versão simplificada que demonstra como fazê-lo.

#!/bin/bash

# Unity doesn't remember my screen layouts, so I made this to do it for me.
# GPLv3+, (c) Chris Burgess @xurizaemon

CONNECTED=$( xrandr | grep ' connected' )

LAYOUT=unknown
if [[ $CONNECTED = *"DP-1 connected"* ]] ; then
  LAYOUT=thunderbolt
elif [[ $CONNECTED = *"HDMI-2 connected"* ]] ; then
  LAYOUT=hdmi-2
fi

case "$LAYOUT" in
  "thunderbolt")
    # Thunderbolt, laptop
    xrandr --output DP-1 --auto --left-of eDP-1 --primary
    echo "Configured for $LAYOUT"
    ;;
  "hdmi-2")
    # Set to 57Hz for monitor support
    xrandr --newmode "1920x1080_57.00"  163.00  1920 2040 2240 2560  1080 1083 1088 1119 -hsync +vsync
    xrandr --addmode HDMI-2 "1920x1080_57.00"
    # HDMI, laptop
    xrandr --output HDMI-2 --mode "1920x1080_57.00" --left-of eDP-1 --primary
    echo "Configured for $LAYOUT"
    ;;
  *)
    echo "Layout $LAYOUT not known."
esac

Meu script atual está disponível no link

    
por Chris Burgess 01.05.2018 / 00:39