existe uma ferramenta que permite:
- lembre-se da configuração atual do RandR (posição, orientação, resolução etc.), por monitor,
- aplicar automaticamente a última configuração válida assim que o monitor for conectado, sem a necessidade de mexer com applets ou xrandr (1)?
As configurações teriam que ser aplicadas por usuário, por exibição.
Se não houver essa ferramenta na natureza, eu gostaria de juntar uma, mas, até onde posso ver, não há como saber se um monitor foi conectado. Preciso pesquisar com xrandr -q de vez em quando para descobrir que uma saída foi conectada ou desconectada, ou existe uma maneira mais eficiente de fazer isso? O udev pode ser ajustado para fazer exatamente isso?
udevadm monitor --property
partir do terminal e conectar o monitor. Com o meu cartão, vejo um evento quando ele está conectado. Você pode usar uma regra + RUN no udev e alguns scripts do bash para obter o que deseja. No entanto, não tenho certeza de como você seria capaz de implementar isso por usuário usando o udev.Respostas:
Estou usando esse script simples (caseiro) que mantém a pesquisa RandR e alterna entre LVDS1 e VGA1 quando o VGA é conectado / desconectado. (Para saídas HDMI , no arquivo de script a seguir, altere todas as opções
VGA1
paraHDMI1
)É uma solução suja, mas está funcionando bem.
Ele é personalizado para a minha configuração: você provavelmente precisará alterar os nomes de saída do RandR (
LVDS1
eVGA1
) e, diferentemente de mim, provavelmente ficará bem com o modo padrão do RandR para VGA.Etapas completas:
Ctrl+Alt+t
Navegue para um bom local para criar e armazenar o script de shell de comutação automática. Exemplo
cd ./Desktop/
Crie e edite o arquivo .sh com o editor de texto desejado (aqui, usei o pluma. Você pode experimentar o nano, vim, etc.). Nomeie-o para sua conveniência. Exemplo
sudo pluma homemadeMonitor.sh
Edite o arquivo e copie e cole tudo do script mencionado acima (aquele com #! / Bin / bash)
Torne o arquivo .sh executável, digitando o seguinte comando no terminal
sudo chmod +x homemadeMonitor.sh
Execute o arquivo .sh
./homemadeMonitor.sh
fonte
Respondendo à parte "[a] para saber se um monitor foi conectado" parte da pergunta:
O suporte ainda varia bastante, mas com os kernels recentes, existe algum suporte para gerar eventos do udev quando ocorre um hotplug de exibição. Com o kernel 2.6.38 e o hardware ATI X1400, recebo um evento na primeira vez em que conecto um monitor VGA, mas não há eventos nas desconexões ou reconexões subsequentes do monitor. O hardware Intel pode ter um suporte melhor. O driver proprietário da NVIDIA atualmente não suporta KMS; Não tentei procurar eventos de hotplug no hardware da NVIDIA, mas duvido que funcionasse.
Se você quiser experimentar o udev, tente as seguintes etapas:
[drm] radeon kernel modesetting enabled
e[drm] initializing kernel modesetting
udevadm monitor --property
e veja se os eventos são relatados quando você (des) conecta os monitoresSe você estiver recebendo eventos do udev no hotplug de exibição, poderá disparar um script com uma regra do udev como:
Nota: Isso não funcionará se você usar uma GPU nVIDIA com o driver binário proprietário, pois ele não usa o KMS. Você não receberá nenhum evento do udev.
fonte
Em relação a uma ferramenta que pode armazenar perfis de configuração de monitor por usuário e por monitor, o autorandr fará exatamente isso. https://github.com/wertarbyte/autorandr .
Meu laptop possui uma placa NVIDIA, então eu uso o disper backend em vez do xrandr: http://willem.engen.nl/projects/disper/ . O Autorandr usará o disper como back-end para gerenciar seus monitores, se você chamá-lo como
autodisper
. Para o restante deste post, porém, vou me referir a ele comoautorandr
consistência.Você pode salvar perfis com
autorandr --save profile_name
. A execuçãoautorandr
por si só fornecerá uma lista de perfis e identificará qual deles é detectado como a configuração atual.Por exemplo:
Você pode pedir para carregar automaticamente o perfil apropriado para a configuração atual
autorandr --change
. Este comando, emparelhado com uma regra do udev para executá-lo quando estiver com hotplug, faria o que você solicitou.Como precaução adicional, acrescentei
--default laptop
esse comando, que o tornará padrão na tela do laptop se não houver um perfil salvo que corresponda à configuração atual. Portanto, o comando completo que eu uso para alternar as telas é:Infelizmente, minha máquina não fornece nenhuma saída udev quando eu conecto meu monitor. Estou usando os drivers proprietários da NVIDIA, o que não é surpreendente. Então, vinculei-o à tecla XF68Display (Fn-F8) por enquanto, o que é quase tão bom.
fonte
udev
autorandr
: github.com/phillipberndt/autorandrEu usei a regra udev sugerida acima, juntamente com um script de shell que se parece com
A parte Xauthority é essencial, assim como a exportação
DISPLAY
. Você pode usar o eco$DISPLAY
para ver qual número é igual. Usexrandr -q
para ver os monitores externos que você possui. A última declaração else é apenas para garantir que você nunca fique preso sem uma exibição.fonte
Um pequeno programa que aguarda o servidor X notificá-lo sobre a configuração alterada do monitor e executa um determinado comando (por exemplo, o
autorandr
mencionado em outra resposta) está disponível em: https://bitbucket.org/portix/srandrd/overviewEsta parece ser uma solução mais limpa que a utilização
udev
(onde você precisa se preocupar em encontrar o servidor X certo etc.)fonte
Se você precisar que ele detecte automaticamente a tela quando estiver conectada, parece que a solução mais limpa é adicionar uma regra UDEV para executar um script contendo seus comandos xrandr. Aqui está um exemplo da solução 1 de um usuário :
Monitore (Udev) os eventos UDEV com
udevadm
Esta etapa será mais importante para cada usuário. Corra
udevadm monitor --environment --udev
. Em seguida, conecte seu cabo HDMI.Regra UDEV
Com base na saída do comando acima, o usuário criou esta regra UDEV em
/etc/udev/rules.d/95-monitor-hotplug.rules
.Observe as variáveis de ambiente usadas para que o xrandr seja executado no perfil do usuário.
Script xrandr hotplug_monitor.sh
Convém ajustar as opções do xrandr para atender às suas necessidades.
fonte
Para quem, por qualquer motivo, não quiser seguir a rota de hotplug, ainda é possível não pesquisar em um script usando o inotifywait:
A pesquisa com o xrandr causou sérios problemas de usabilidade no meu novo laptop (o mouse parava periodicamente).
fonte
Ao usar a solução peoro, obtive uma saída extra do xrandr, então usei a opção -c para grep, que conta o número de correspondências. Eu o adaptei para HDMI e adicionei um interruptor de áudio:
fonte
Acho que as pessoas que olham para essa pergunta não são aquelas que desejam usar o GNOME, e as que usam o GNOME não precisariam olhar para essa pergunta, mas no interesse da integridade:
O GNOME tem essa funcionalidade embutida. Se você alterar a configuração via gnome-control-center, o gnome-settings-daemon se lembra (in
.config/monitors.xml
) e a aplica automaticamente quando um monitor é conectado ou desconectado.Infelizmente, a configuração no arquivo monitors.xml não está bem documentada. Veja a pergunta aqui . As ferramentas de exibição do gnome também não têm como configurar o panorama, a escala por monitor e não diminuem o zoom. Como muitas pessoas estão usando uma tela de laptop HiDPI juntamente com uma tela DPI normal, as ferramentas não são suficientes para obter uma solução viável.
Eu já vi isso mencionado como um item de roteiro para Wayland; portanto, quando finalmente chegar, poderemos ver uma correção para os problemas mencionados. Até então, no Gnome, acabei de executar um script de inicialização após um atraso para configurar o xrandr manualmente.
fonte
Para simplificar no Xfce, por exemplo, instale "arandr", que deve estar disponível nos seus pacotes de distribuição. Configure sua exibição usando "arandr" e salve-a como "displayLayout", por exemplo. O Arandr deve adicionar para você a extensão ".sh" para que possa ser usada diretamente na "função connect ()" conforme escrita no script "hotplug_monitor.sh" mencionado por iyrin acima, por exemplo:
Para usar o mecanismo de desconexão, adicione na parte superior do script logo abaixo "#! / Bin / bash" da seguinte forma:
O xrandr detectará a exibição e passará a saída para o awk, que será filtrada com base na expressão regular "conectado", seguida de um dígito que, em essência, é o que queremos. Na minha opinião, não é necessário corresponder à resolução exata na expressão regular, porque a exibição primária é relatada como "primária conectada", seguida de número, ou seja, resolução. Em seguida, o awk "print $ 1" imprimirá apenas a primeira coluna, que é o nome do monitor externo nesse caso e será armazenada na variável PLUGGED_EXTERNAL. Em seguida, em vez do nome de exibição fixo "HDMI1" no script $ PLUGGED_EXTERNAL, pode ser usado assim:
fonte
Editando minha resposta para facilitar a configuração.
Instale o autorandr para automatizar o layout da tela no xrandr, pegue o .deb mais recente em https://github.com/nalipaz/autorandr/releases e execute:
Configurar autorandr com layouts de tela armazenados
Por exemplo, no meu laptop sem nenhum monitor conectado, eu configuro a maneira que quero e, em seguida, executei:
Em seguida, conectei meu hdmi e o arandr reconfigurado, depois executei:
Depois de configurar cada um dos seus layouts, você pode executar (substituir 'mobile' pelo nome favorito anterior, usei mobile):
Agora que o autorandr está pronto, você pode automatizar o processo instalando um pacote que pesquisará os monitores conectados e executará
autorandr --change
após a detecção. Sim, eu sei sobre o udev e você pode configurá-lo se ele funcionar para você, mas nos meus testes o udev não funcionou para o meu hdmi de forma consistente. Ele funcionou apenas 1 em cada 20 plugues / desconectos, e às vezes parou completamente.Faça o download do mais recente .deb aqui: https://github.com/nalipaz/poll-xrandr/releases/ e instale com
Provavelmente é necessário que você execute mais tarefas após a conclusão do
autorandr --change
, autorandr permite que esses comandos sejam inseridos em um arquivo chamado ~ / .autorandr / postswitch. Faça o seguinte:Agora edite o arquivo postswitch para ter algo semelhante ao seguinte:
Além disso, você provavelmente desejará adicionar autorandr e poll-xrandr às suas startups, algo como os dois comandos a seguir:
Desconecte ou conecte um monitor e observe a mágica!
fonte