Проблема заключалась в том, что имя хоста было настроено в /etc/hosts
как принадлежащее 127.0.0.1
.
НЕПРАВИЛЬНО:
127.0.0.1 localhost my-computer-name
192.168.0.123 my-computer-name
Решением было удалить my-computer-name
из 127.0.0.1
.
Но почему это произошло?
Библиотека libxcb
использует getpeername
, чтобы найти адрес сервера X11 и ищет этот адрес в файле .Xauthority. getpeername
возвращает адрес, который был использован для connect
сокета. Немного ранее при выполнении программы этот адрес был получен путем вызова getaddrinfo
с именем хоста из переменной среды DISPLAY
.
getaddrinfo
возвращает связанный список адресов. Если первый адрес - удаленный IP, все работает. Если первый адрес - 127.0.0.1
, он не может найти правильную авторизацию ie и авторизация не выполняется.