Estamos usando o Windows Server 2022 como um host de sessão de área de trabalho remota, com conexões remotas baseadas em sessão e temos o problema de que as sessões remotas são desconectadas aleatoriamente para nossos clientes baseados em freerdp.
Ao explorar o protocolo do Windows, notamos uma mensagem de informação específica que parece estar relacionada ao nosso problema:
ID do evento: 39 Mensagem:Session "17" has been disconnected by session "0"
A primeira sessão é a sessão que derrubou a conexão, a segunda é sempre "0". Entendemos a sessão "0" como sendo a sessão root/windows. Mas a questão é, por que a sessão root mata nossa sessão cliente aleatoriamente?
O erro no lado do cliente se parece com:
[15:06:14:485] [469455:000729dc] [INFO][com.freerdp.core] - [rdp_print_errinfo]: ERRINFO_RPC_INITIATED_DISCONNECT (0x00000001):The disconnection was initiated by an administrative tool on the server in another session.
Depois de uma noite de depuração, encontramos a resposta: foi de fato a política de remoção do cartão inteligente que criou o problema. Primeiro, descartamos isso porque as desconexões aconteceram até mesmo em clientes sem cartões inteligentes, mas no final, o serviço de cartão inteligente foi o culpado. O que, em retrospecto, faz todo o sentido, é um serviço que vive na sessão "0" e está desconectando outra sessão quando detecta uma remoção de cartão inteligente.
Não conseguimos explicar por que ele funcionava mal com tanta frequência, matando sessões com o smart card ainda conectado ou sessões sem smart cards, mas desabilitar a política corrigiu o problema. Agora detectamos um smart card removido no lado do cliente e matamos a sessão freerdp de acordo.