Problemas com X e xrandr no Debian

1

Estou tendo um problema que acho associado a X, xrandr e talvez WM que estou usando. Estou em

  • Debian 8 estável, atualizado;
  • gráficos da Intel,
  • i3wm, não DE
  • lightDM (não tenho certeza se isso é relevante, mas em algum momento achei que poderia ser). Eu usei o GDM no momento da falha e tentei instalar o lightdm. Eu não sei as complexidades da autenticação de X pelo DM.

Aqui está o cenário. Eu chego em casa e conecto meu laptop a dois monitores (VGA1 e HDMI1) e desligo o LVDS1. Para isso eu tenho uma função em .bashrc

function duo {
    xrandr --output HDMI1 --right-of LVDS1
    xrandr --output LVDS1 --off # this is probably bad, but it still works thanks to xrandr
    xrandr --output HDMI1 --mode 1280x1024
    xrandr --output HDMI1 --right-of VGA1
    xrandr --output HDMI1 --rotate left
    xrandr --output VGA1 --mode 1280x1024
}

A função é confusa porque eu estava experimentando e tentando dividir como o xrandr deveria mudar o layout. Isso funciona 100% do tempo sem problemas. Quando eu quero desconectar e voltar ao modo "laptop" eu retiro os dois cabos e pressiono Super + Shift + F8, que no meu i3wm está ligado a xrandr --auto , que deve desconectar VGA1 e HDMI1, já que eles não estão mais conectados e O i3wm irá mover todos os espaços de trabalho para uma única tela. Às vezes isso funciona, mas quase sempre o servidor X trava e cai no DM solicitando login. Então eu perco todos os aplicativos abertos e possivelmente arquivos (embora eu seja OCD quando se trata de salvar).

Aqui está um syslog. Começa com uma linha impressa pelo meu script que está vinculado a Super + Shift + F8 no meu arquivo de configuração do i3wm. O motivo desse atalho é que não tenho uma regra do udev para VGA ou HDMI. Eu tinha uma regra que executava um script, mas o removia. Eu posso postar, mas o post já é muito grande - não quero desordenar. Então, quando eu desconectar HDMI ou VGA, meu LVDS fica preto e esse script deve ligá-lo. Eu também posso postar o Xorg.log, de / var / log, mas não parece ter nada de útil (eu vou postar, mas novamente - eles são longos - por favor me avise).

Agora uma complicação: eu tenho o Gnome 3 instalado que veio com a instalação do Debian 8. Quando eu uso e não há i3wm - tudo funciona e X não falha! Assim, posso conectar 2 monitores, desligar o LVDS e desconectar a energia quente e com segurança. Não é que eu não goste do Gnome, mas estou muito acostumado com o i3wm e o mínimo de iluminação (use o mesmo no meu desktop do Arch). O laptop também é antigo para o Gnome3. Eu prefiro não tentar outras DE's.

#!/bin/bash
# Super+Shift+F8 is bound to this script in WM
function laptop() {
  xrandr --auto
  xrandr --output VGA1 --off
  xrandr --output HDMI1 --off
}
echo "running laptop script"
laptop


Oct 21 20:13:12 debianone /etc/gdm3/Xsession[8574]: running laptop script
Oct 21 20:13:12 debianone /etc/gdm3/Xsession[8574]: xrandr: cannot find crtc for output LVDS1
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) intel(0): Allocated new frame buffer 1024x1280 stride 4096, tiled
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: X Error of failed request:  BadMatch (invalid parameter attributes)
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Major opcode of failed request:  140 (RANDR)
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Minor opcode of failed request:  21 (RRSetCrtcConfig)
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Serial number of failed request:  35
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Current serial number in output stream:  35
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: i3: No usable outputs available.
Oct 21 20:13:13 debianone org.gtk.vfs.Daemon[8621]: A connection to the bus can't be made
Oct 21 20:13:13 debianone org.gtk.vfs.Daemon[8621]: g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting.
Oct 21 20:13:13 debianone org.a11y.Bus[8621]: g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting.
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [9400:9400:1021/201313:ERROR:chrome_browser_main_extra_parts_x11.cc(57)] X IO error received (X server probably went away)
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [libi3] libi3/font.c Using Pango font DejaVu Sans Mono, size 8
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [libi3] libi3/font.c X11 root window dictates 98.223565 DPI
Oct 21 20:13:13 debianone org.a11y.atspi.Registry[8648]: XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
Oct 21 20:13:13 debianone org.a11y.atspi.Registry[8648]: after 1608 requests (1608 known processed) with 0 events remaining.
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: drracket: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [9434:9434:1021/201313:ERROR:x11_util.cc(82)] X IO error received (X server probably went away)
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Can't open display :0
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Exiting due to signal.
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: after 2716 requests (2716 known processed) with 0 events remaining.
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[4989]: Process 8664 dead!
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[4989]: Warning: no target process found. Waiting for it...
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Process 8664 dead!
Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Warning: no target process found. Waiting for it...
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "synaptics"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: AT Translated Set 2 keyboard: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Asus WMI hotkeys: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: USB Camera: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Microsoft Microsoft® Nano Transceiver v1.0: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Microsoft Microsoft® Nano Transceiver v1.0: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Microsoft Microsoft® Nano Transceiver v1.0: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Logitech USB Keyboard: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Logitech USB Keyboard: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Sleep Button: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Video Bus: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Power Button: Close
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev"
Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (EE) Server terminated successfully (0). Closing log file.

Eu tenho visto relatórios de erros em problemas semelhantes no X, KDE, Debian e Ubuntu e eles são corrigidos. Eu definitivamente estou atualizado para o mais recente e ainda falhando. Preciso backport X mais recente? Ou algo mais?

    
por Serge Poele 22.10.2015 / 20:24

1 resposta

3

É provável que a rápida sucessão de xrandr messages esteja acionando um bug no servidor X. Eu sugiro que você faça duas coisas:

  • Arquive um bug no servidor X. Ele não deve falhar, não importa o que você faça (na pior das hipóteses, deve produzir uma mensagem de erro)
  • Altere seu script para que ele chame xrandr apenas uma vez:

    xrandr --output LVDS --off --output VGA1 --mode 1280x1024 --output HDMI1 --mode 1280x1024 --rotate left --right-of VGA1
    

    O ponto aqui é que você pode passar vários comandos por saída para xrandr , bem como várias saídas. Eu pessoalmente também configuraria uma das saídas como a saída principal (com --primary ), mas isso não é crítico.

EDITAR : Olhando o log um pouco mais detalhadamente, vemos isto:

Oct 21 20:13:12 debianone /etc/gdm3/Xsession[8574]: xrandr: cannot find crtc for output LVDS1

Um CRTC é um chip controlador de exibição; o componente real que transforma o buffer de quadros gerado pela GPU em linhas de varredura que são então enviadas para qualquer saída selecionada (VGA, DVI, HDMI, DisplayPort, yada yada); a abreviatura significa Controlador de Tubo de Raios Catódicos , embora essa terminologia esteja obviamente um pouco desatualizada. A maioria das GPUs tem menos do que as saídas, e o número de CRTCs geralmente é o fator limitante que decide quantos monitores uma placa de GPU pode orientar ao mesmo tempo. Até alguns anos atrás, para a maioria das GPUs móveis da Intel, esse número era de dois, embora com a aparência de telas 4K (que exigem dois CRTCs por monitor) as GPUs móveis mais modernas agora têm três.

Como o sistema também fala sobre o LVDS (que é um padrão mais antigo sendo substituído agora pela porta de exibição incorporada ou eDP), é bastante seguro assumir que você tem dois CRTCs.

O que a mensagem de erro citada acima significa é que quando você solicita ao servidor X para ativar o painel LVDS, ele procura um CRTC disponível e não o encontra. As coisas parecem dar errado. A solução para o seu problema seria, portanto, garantir que seja um CRTC disponível quando você tenta habilitar o monitor externo, desabilitando as saídas externas antes para habilitar as internas, em vez depois, como você está tentando fazer agora.

    
por 23.10.2015 / 08:57