Gostaria de mover para um host Linux para todos os usuários o diretório da unidade de usuário systemd.
Os diretórios de unidades de usuário nativos em
${HOME}/.config/systemd/user
não são acessíveis ao systemd por vários motivos. Portanto, um usuário não pode usar systemd --user
para habilitar nenhuma unidade específica do usuário ou de todo o sistema.
Unidades de usuário em todo o Systemd podem, em princípio, ser implantadas por um administrador em [nome do sistema] /etc/systemd/user
e podem ser iniciadas por um usuário. No entanto, ao habilitar uma unidade de usuário, o Systemd tentará criar um link simbólico para a unidade em [nome do sistema] ${HOME}/.config/systemd/user
, mas isso falha, pois o diretório do usuário não está acessível ao Systemd.
Portanto, gostaria de configurar o systemd para alterar os diretórios base do usuário para algo diferente ${HOME}/.config/systemd/user
, ou seja, para um caminho igualmente acessível pelo systemd e pelos usuários.
Acho que o problema é que o systemd insiste em criar links simbólicos ao
${HOME}/.config/systemd/user
habilitar unidades e, se esse diretório não estiver acessível (comum com NFS homes/permissões restritivas etc.), você ficará preso.Você pode substituir onde o systemd procura por unidades de usuário criando uma configuração drop-in:
Em seguida crie um arquivo
/etc/systemd/system.conf.d/user-units-path.conf
com:O
%U
é substituído pelo nome de usuário. Escolhi/var/lib/systemd/users/
porque é um local sensato que não entra em conflito com outras coisas, mas você pode escolher outra coisa.Depois de criar este arquivo, recarregue o systemd:
Em seguida, crie os diretórios necessários para cada usuário e defina as permissões:
Agora seus usuários podem habilitar e iniciar unidades usando
systemctl --user enable whatever.service
e ele criará os links simbólicos no novo local em vez de falhar no acesso~/.config/systemd/user
.Estou usando essa configuração há meses sem problemas. Espero que ajude!
O caminho é realmente
$XDG_CONFIG_HOME/systemd/user
.No entanto,
systemd --user
ele é executado em um ambiente de "serviço" separado (que provavelmente é o motivo pelo qual ele não consegue acessar o HOME do usuário na sua configuração estranha?), portanto, o XDG_CONFIG_HOME precisa ser definido no ambiente desse serviço –[email protected]
e não apenas no ambiente "shell" do usuário.Em outras palavras, ~/.profile ou ~/.bashrc não funcionam. Você precisa usar o comando e definir XDG_CONFIG_HOME lá.
systemctl edit [email protected]
Lembre-se de que isso também afetará todos os programas de usuário executados em 'systemd --user', ou seja, seus diretórios de configuração também serão movidos para o novo local. Pode ser possível desfazer isso por meio de
DefaultEnvironment=
systemdManagerEnvironment=
-user.conf(5).Eu perguntaria o porquê, já que o systemd usa todo o sistema por padrão e links simbólicos. Como
/etc/systemd/
pode danificar seu sistema operacional se você mexer nele, recomendo assumir que é uma versão mais recente do kernel, como o seguinte:Se necessário, altere SOMENTE os links simbólicos de nível de usuário, deixando o padrão para todo o sistema. Pessoalmente, eu pularia e passaria para o item 2 abaixo para alterações em todo o sistema. Se for baseado no usuário, provavelmente não é aconselhável.
O usuário deve usar o processo de substituição do systemd, sem manipulação direta de arquivos ao alterar, adicionar, etc., arquivos de configuração do systemd
sudo systemctl edit mydaemond
, usando o recurso de substituição. Para ilustrar o processo de edição, no console do VI do arquivo unitário, use a tecla link, comoWantedBy=
na linha abaixoWantedBy=multi-user.target
. Isso usará o arquivo de substituição para implementar as alterações. Reload damons withsudo systemctl daemon-reload
(recarrega o arquivo unitário do daemon com as substituições).Então verifique com
sudo systemctl status mydaemond
.