Meu problema específico foi causado por tentar iniciar o X diretamente como um serviço usando o SystemD sem registrar um usuário. Refatorizei minha configuração para que o SystemD fizesse login automaticamente com o seguinte script de substituição de getty:
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin {{ username }} %I $TERM
Type=idle
salvo em /etc/systemd/system/[email protected]/override.conf
. Em seguida, iniciei X do usuário bash_profile
executando /usr/bin/startx
.