Estou escrevendo um aplicativo personalizado em QT5 (para X11), que será usado em uma configuração incorporada. Quando o sistema inicializar, quero que o sistema inicialize em meu aplicativo, com a janela principal do meu aplicativo sendo efetivamente o plano de fundo da área de trabalho, quaisquer outras janelas devem ser abertas em cima dela e devem ter recursos normais de gerenciamento de janelas disponíveis.
O sistema é baseado no Debian buster, como faço para juntar as peças para que isso aconteça?
Existem algumas peças nesse quebra-cabeça, um saudador (usei sddm), um gerenciador de janelas (usei openbox) e o próprio aplicativo.
Primeiro o aplicativo em si, precisamos dizer ao gerenciador de janelas que nossa janela é o plano de fundo da área de trabalho, essa foi a parte mais difícil de encontrar detalhes, mas eventualmente olhando para a fonte do pcmanfm-qt, alguns experimentando e pesquisando uma das constantes em isso me levou a uma pergunta sobre estouro de pilha . Acabei com o seguinte código no construtor da minha janela principal. Coloquei esse código atrás de um parâmetro de linha de comando para que também fosse possível executar o aplicativo da maneira convencional.
Nota: Eu inicialmente tinha "resize" em vez de setFixedSize, que funcionou até que eu tentei usar um gerenciador de layout em que ponto o gerenciador de layout decidiu expandir minha "janela da área de trabalho" para que não cabesse na tela.
Para unir o saudador, o gerenciador de janelas e meu aplicativo exigia a definição de uma "sessão" personalizada, fiz isso em dois arquivos, o primeiro dos quais era um script de shell em /usr/bin/starths
O segundo era um "arquivo de desktop" em /usr/share/xsessions/handheldhyperspec.desktop
Finalmente, eu precisava configurar o saudador para fazer login automático na minha sessão recém-definida. Para isso criei um arquivo /etc/sddm.conf.d/autologin com o seguinte conteúdo.