Jak uruchomić Tmux / Screen z Systemd> 230?

19

Uruchamiam 16.04 i systemdteraz zabija, tmuxgdy użytkownik się rozłącza ( podsumowanie zmiany ).

Czy istnieje sposób na uruchomienie tmuxlub screen(lub podobny program) z systemd230? Czytałem wszystkie gorące dyskusje na temat zalet i wad behawioralnych, ale nie zaproponowano żadnego rozwiązania.

(Widzę też zachowanie w 229)

WoJ
źródło
1
To dziwne - mam systemd-229-4ubuntu7(z aktualizacji xenial) i nie widzę tego zachowania. W każdym razie to zachowanie zostało już przywrócone w Debianiesystemd-230-2 , więc prawdopodobnie wkrótce zostanie również przywrócone w Ubuntu.
MvanGeest,
mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support ma pakiety zapobiegające-systemd- *, które pozwalają na instalację i używanie sysvinit jak wcześniej
mirabilos

Odpowiedzi:

1

Używając Ubuntu 18.04 z wersją systemową 237 , żadne z sugerowanych rozwiązań nie działało dla mnie.

Rozwiązaniem, które zadziałało dla mnie było

  • edytuj /etc/systemd/logind.conf
  • brak komentarza KillExlcudeUsers
  • dodaj listę użytkowników oddzieloną spacjami (np. KillExlcudeUsers=root user1 user2)
strach
źródło
19

Właściwym rozwiązaniem jest wyłączenie przestępczych zachowań systemowych w całym systemie.

Edytuj /etc/systemd/logind.conf( musisz sudo , oczywiście) i ustaw

KillUserProcesses=no

Możesz również umieścić to ustawienie w osobnym pliku, np /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Następnie uruchom ponownie systemd-logind.service.

sudo systemctl restart systemd-logind
Michael Hampton
źródło
4
W jaki sposób właściwe rozwiązanie problemu specyficznego dla jednego urządzenia umożliwia ustawienie niektórych ustawień całego systemu?
jpath
Ponieważ, jak widać nawet z samego czytania pytania, nie mówiąc już o całej innej dyskusji na ten temat, do której pytanie pośrednio się odwołuje, nie jest to specyficzne dla jednej aplikacji. To pytanie jest nawet pogrubione w pytaniu.
JdeBP
Musisz tylko włączyć przeciąganie się dla użytkownika przez loginctl enable-linger <user>. Od man loginctl: „Jeśli ta opcja jest włączona dla określonego użytkownika, menedżer użytkownika jest odradzany dla użytkownika podczas rozruchu i utrzymywany po wylogowaniu. Dzięki temu użytkownicy, którzy nie są zalogowani, mogą uruchamiać usługi długo działające”.
Adrian Günter,
Ubuntu 18.04 tutaj. To nie działa, nawet po ponownym uruchomieniu. Włączenie trwałości również nie.
Pa_
11

W oparciu o odpowiedź @ Rinzwind i zainspirowany opisem jednostki, najlepsze, co mogłem znaleźć, to użycie TaaS (Tmux jako usługa) - ogólnej, odłączonej instancji, do której tmuxponownie się przyłącza.

# cat /etc/systemd/system/[email protected]

[Unit]
Description=tmux default session (detached)
Documentation=man:tmux(1)

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/tmux new-session -d -s %I
ExecStop=/usr/bin/tmux kill-server
KillMode=none

[Install]
WantedBy=multiplexer.target

# systemctl start [email protected]
# systemctl start [email protected]
# tmux list-sessions

instanceone: 1 windows (created Sun Jul 24 00:52:15 2016) [193x49]
instancetwo: 1 windows (created Sun Jul 24 00:52:19 2016) [193x49]

# tmux attach-session -t instanceone

(instanceone)#
WoJ
źródło
To jest fajne, ale nie mogę przez całe życie dowiedzieć się, dlaczego go użyjesz! :)
sarnold,
5
@sarnold: aby móc kontrolować aplikacje, które zaczynają się od konsoli, ale które mają działać w czasie uruchamiania. Minecraft jest jednym z przykładów.
WoJ,
5

RemainAfterExit =

Pobiera wartość logiczną, która określa, czy usługę należy uznać za aktywną, nawet po zakończeniu wszystkich jej procesów. Domyślnie nie.

Rinzwind
źródło
Dzięki. Zaakceptowałem i dałem +1 twojej odpowiedzi, ponieważ stanowi ona rdzeń rozwiązania. Czy wiesz, czy można go używać w trybie interaktywnym (uruchamiając tmuxinteraktywnie, w przeciwieństwie do mojej odpowiedzi)?
WoJ
wątpię. systemd prawdopodobnie nie będzie troszczył się o twój tmux, chyba że powiesz systemd, że powinien :-P (ich podejście do tego jest raczej jednoznaczne ... wygląda na to, że jest to po ich myśli lub nie ma mowy.) Potrzebujesz opisu jednostki takiego jak ty opublikowane. Zapraszam do zaakceptowania twojego i / lub rozszerzenia twojego ;-) Nie potrzebuję rep>: - D
Rinzwind
3
Ta odpowiedź wymaga bardziej szczegółowych informacji, takich jak miejsce zastosowania tego ustawienia.
kasperd
1
Pewnie, ale odpowiedzią będzie skopiowanie / wklejenie strony podręcznika ;-)
Rinzwind
1
@WoJ Możesz utworzyć alias, tmuxaby zacząć jako systemd-run --remain-after-exit tmux(a może nawet z --scope --userflagami).
Debilski,
2

Musisz ustawić Typeusługę na forking, jak wyjaśniono tutaj .

Załóżmy, że screennazywa się usługa, w której chcesz uruchomić minecraft. Następnie otworzysz minecraft.servicew edytorze tekstu i dodasz lub edytujesz wpis Type=forkingw sekcji [Service].

Robin Hartmann
źródło
0

Według /unix//a/287282/117599 przywoływanie tmuxza pomocą

systemd-run --user --scope tmux

powinien również załatwić sprawę.

phk
źródło
Niestety wydaje się, że nie działa już w kosmicznej wersji 18.10.
taneli