Crie uma sessão tmux na inicialização antes de fazer login como usuário (não root)

Crie uma sessão tmux na inicialização antes de fazer login como usuário (não root)

Estou hospedando um pequeno servidor de minecraft para meus amigos em minha casa, e para facilitar as coisas para mim, queria fazer com que quando eu ligar o pc que é usado como servidor, inicie automaticamente o servidor de minecraft. Acontece que eu uso o tmux para poder gerenciar o servidor caso precise. Para isso, tenho este script:

#!/bin/bash

SESSION="server"
SESSIONEXISTS=$(tmux list-sessions | grep -w "$SESSION")

if [ "$SESSIONEXISTS" = "" ]
then

  tmux new-session -d -s "$SESSION" -d -x "$(tput cols)" -y "$(tput lines)"

  tmux rename-window -t 0 'mc'
  tmux send-keys -t 'mc' 'cd magma-1.18.2-40.2.10 && ./run.sh && sudo shutdown now' C-m
  tmux splitw -v

  tmux send-keys -t 'mc' 'glances' C-m
  tmux select-pane -t 0
  tmux splitw -h

  tmux send-keys -t 'mc' 'ngrok start --all' C-m

  tmux select-pane -t 0

fi

tmux attach-session -t "$SESSION":0

Eu tentei usar o cron sem sucesso:

@reboot bash /home/fpp/startup.sh

Simplesmente não iniciará a sessão do tmux.

Eu também tentei com uma unidade systemd: [Unit]

Description=mcnrelated.service

After=default.target

[Service]

ExecStart=bash /home/fpp/startup.sh

[Install]

WantedBy=default.target

mas ao iniciar, percebi que o serviço não foi iniciado devido a um erro.

Como última opção tentei usar rc.local:

#!/bin/bash
sudo su -c "./home/fpp/startup.sh" -s /bin/sh fpp
exit 0

mas, novamente, nenhuma sessão do tmux foi iniciada.

Esse problema pode estar relacionado ao tmux? ou estou fazendo algo errado?

EDIT: O caminho a percorrer é com o systemd.

Depois de conversar muito com o ChatGPT, consegui descobrir que no meu script estava usando tputpara obter as linhas e colunas do terminal. O problema é que ele não retornará um valor quando for executado como um serviço, porque não é executado em um terminal e faz com que o script falhe. Por conta disso, mudei para o arquivo .tmux.conf, para poder apenas ligar tmux -t .tmux.confe assim evito usar tput.

Além disso, conforme recomendado pelo ChatGPT, agora estou usando uma unidade systemd em nível de usuário:

[Unit]
Description=Launch Minecraft Server and Related Services
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/tmux -u -f /home/fpp/tmux-config/tmux.conf
RemainAfterExit=true

[Install]
WantedBy=default.target

o problema agora é que o tmux está reclamando de não ter terminal para abrir:

fpp@fpp-server:~$ systemctl --user status mcnrelated.service
× mcnrelated.service - Launch Minecraft Server and Related Services
     Loaded: loaded (/home/fpp/.config/systemd/user/mcnrelated.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Thu 2023-09-21 11:42:09 -03; 8min ago
    Process: 1319 ExecStart=/usr/bin/tmux -u -f /home/fpp/.tmux.conf (code=exited, status=1/FAILURE)
   Main PID: 1319 (code=exited, status=1/FAILURE)
        CPU: 37ms

sep 21 11:42:09 fpp-server systemd[550]: Starting mcnrelated.service - Launch Minecraft Server and Related Services...
sep 21 11:42:09 fpp-server tmux[1319]: open terminal failed: not a terminal
sep 21 11:42:09 fpp-server systemd[550]: mcnrelated.service: Main process exited, code=exited, status=1/FAILURE
sep 21 11:42:09 fpp-server systemd[550]: mcnrelated.service: Failed with result 'exit-code'.
sep 21 11:42:09 fpp-server systemd[550]: Failed to start mcnrelated.service - Launch Minecraft Server and Related Services.

e é onde estou agora. Já tentei usar -umas não tive sucesso.

O problema é algo com o tmux, pelo menos por enquanto. Assim que conseguir iniciar o serviço com sucesso, tentarei ver se ele foi iniciado automaticamente na inicialização

informação relacionada