O comando que você está procurando é ddccontrol
, disponível no repositório regular do Ubuntu.
AVISO! ddccontrol
envia dados pelo barramento i2c, o que é inerentemente perigoso fazer. A maioria dos dispositivos i2c são de nível muito baixo e muito burros, um comando fora de lugar pode ser suficiente para bloqueá-los ou pelo menos congelar o computador. Dito isto, o DDC / CI é uma tecnologia um pouco padronizada, bastante estabelecida e bastante antiga, portanto os riscos não são muito altos.
Por esse motivo, por padrão, os dispositivos i2c são acessíveis apenas para o root. Você provavelmente precisará prefixar todos os comandos abaixo com sudo
. (Eu não fiz isso voluntariamente para garantir que você leia as instruções e não as copie / cole cegamente).
Pesquisando seu monitor
A primeira coisa a fazer é investigar os vários barramentos i2c em seu computador (o meu tem 11 barramentos ...), procurando pelo que está realmente na placa gráfica, conectado à tela.
O comando ddccontrol -p
faz isso e mostra o que encontrou. Exemplo de saída do meu computador:
Detected monitors :
- Device: dev:/dev/i2c-4
DDC/CI supported: Yes
Monitor Name: VESA standard monitor
Input type: Digital
(Automatically selected)
Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-4...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELD070.xml"
Document not parsed successfully.
EDID readings:
Plug and Play ID: DELD070 [VESA standard monitor]
Input type: Digital
Observe o aviso de E / S: significa apenas que seu monitor é desconhecido para ddccontrol
, portanto, ele não sabe a descrição de todos os comandos e valores não padrão que ele pode suportar. Isso não impede que você emita os comandos, mas isso pode ser um processo de avaliações e erros.
Observe também o nome do barramento detectado: dev:/dev/i2c-4
no meu exemplo.
Listando todos os comandos
O comando ddccontrol -d dev:/dev/i2c-4
lê todos os controles possíveis (de 0x00 a 0xff) e mostra os valores encontrados. Claro, você deve usar o ônibus encontrado quando sondar.
ddccontrol
também mostra uma descrição para os controles e valores que são conhecidos; padrões ou aqueles descritos em arquivos XML. No meu exemplo, não há arquivo XML para o meu monitor (veja o aviso de I / O acima).
Consultando um valor
O ddccontrol -r 0x10 dev:/dev/i2c-4
consulta o valor atual do controle 0x10. Exemplo de saída:
Reading 0x10...
Control 0x10: +/21/100 C [Brightness]
O valor atual é o número no meio, 21 no meu exemplo. O valor depois disso é suposto ser o máximo, mas isso parece funcionar apenas para valores de intervalo (como brilho e contraste), não tanto para itens de lista.
Definindo um valor
O ddccontrol -r 0x10 -w 25 dev:/dev/i2c-4
define o valor do controle 0x10. Exemplo de saída:
Writing 0x10, 0x19(25)...
Control 0x10: +/25/100 C [Brightness]
Observe que você pode definir valores em formatos hexadecimais ou decimais. No meu exemplo, usei decimal.
Alterando a fonte de entrada do monitor
Eu encontrei o comando e os valores para usar para alternar minhas entradas de monitor. Funciona bem, você precisará, é claro, experimentar para encontrar os valores para o seu monitor. O meu é um Dell UltraSharp U2515H.
Controle 0x60 [Seleção da Fonte de Entrada]
- Valor 15: DP
- Valor 16: mDP
- Valor 17: HDMI (MHL) 1
- Valor 18: HDMI (MHL) 2
Os valores estão na mesma ordem que o menu Fonte de entrada no monitor.
Por exemplo, alternando para DP: ddccontrol -r 0x60 -w 15 dev:/dev/i2c-4