Cher journal, c'est derniers temps j'ai travaillé sur un petit projet en rust, diss.
Diss est un programme (ainsi qu'une crate rust) qui permet de détacher une session d'un terminal, comme dtach et abduco
(un peu comme screen ou tmux mais sans le multiplexing de terminal).
L'idée, tout comme abduco, est d'avoir un programme simple pour détacher d'autres programmes,
et de les combiner avec d'autres outils pour faire du multiplexing.
Ici on est en rust donc plus safe d'un point de vue mémoire que le C d'abduco
(3 unsafe
utilisés que j'espère enlever petit à petit).
utilisation
en terme d'interface, diss est très proche d'abduco:
Pour lancer une nouvelle session (par exemple la commande vim hello
ici):
$ diss -e g -a session-name vim hello
-
-e g
indique que pour détache la session il faut faireCTRL+G
-
-a session-name
indique le nom de session
on peut connecter plusieurs terminaux à la même session en faisant
$ diss -e g -a session-name
On peut aussi tout à fait utiliser diss comme une crate (lib)
let command = vec![
"nvim".to_string(),
"hello".to_string(),
];
diss::run("session-name".to_string(), &command, env_vars, Some("g".into()))?;
Fonctionnement
Lorsque l'on démarre une nouvelle session, diss fork et lance un server, qui va:
- créer et écouter une socket unix (dans
~/.config/diss/<session-name>
) - daemonizer le server (e.g. changer le parent du process pour que ne soit plus le terminal mais à la place init)
- forker:
- le process enfant lance le programme que l'on veut utiliser
- le parent lance un thread pour écouter la sortie de l'enfant
Ensuite, diss lance le client qui se:
- connecte au server via la socket unix
- envoie la taille du terminal
- envoie une demande de flush du terminal
- lance un thread ou il capture les événements (touche, redimensionnement, clear) et les envoie aux server
- reçoit les octets du server et les affiche
Quand un client se connecte, le server:
- ajoute le stream unix au thread d'écoute des événements du process forké
- crée un nouveau thread pour transférer les événements du client au process forké.
futur
J'utilise cette crate au quotidien, ce qui me permet de réparer les bugs petit à petit.
Je suis en train de l'intégrer à mon plugin vim (vmux), (c'est d'ailleurs pour ce projet que j'ai créé diss), mais c'est une histoire pour un autre journal.
# joli projet
Posté par palm123 (site web personnel) . Évalué à 10. Dernière modification le 28 octobre 2022 à 08:30.
tu cites screen et tmux, il y a aussi zellij en Rust
https://github.com/zellij-org/zellij
ウィズコロナ
[^] # Re: joli projet
Posté par yazgoo (site web personnel) . Évalué à 2.
effectivement, je suis tombé sur ce projet en faisant mes recherches, ça a l'air très cool :)
# nohup
Posté par barmic 🦦 . Évalué à 4.
Je n'ai jamais vraiment utilisé ce genre de logiciel. Quand je veux qu'un processus soit persistant à ma déconnexion j'utilise nohup.
nohup me permet au passage de garder la sortie standard du processus et c'est important pour moi.
De ce que je comprends de ton schéma, il n'y a rien pour ça dans diss ? À moins qu'une socket unix ai un buffer illimité on ne retrouve que les dernières lignes de la sortie standard ?
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: nohup
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4.
nohup
garde la sortie standard si c'est un terminal ; sinon la commande redirige versnohup.out
Les utilitaires pour détacher une session sont arrivés après NoHUp dont le but initial est d'ignorer le signal SigHUp mais pas les autres. Ces utilitaires permettent d'avoir : autant de sessions non-interactives que l'on veut, de les nommer (plus facile pour s'y retrouver), de les partager selon ses besoins/désirs (comparativement, toutes les commandes lancées avec
nohup
vont utiliser le mêmenohup.out
qui va rapidement être confus du coup), et les rattacher quand on veut.“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: nohup
Posté par barmic 🦦 . Évalué à 2.
Je sais très bien tout ça.
Ma question c'est est-ce que diss a un mécanisme pour garder la sortie des processus qu'il gère ?
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: nohup
Posté par Micromy (site web personnel) . Évalué à 2. Dernière modification le 30 octobre 2022 à 11:32.
Je ne peux pas répondre à la place de Yazgoo pour
diss
, mais tu peux toi faire une redirection de stdout et stderr vers des fichiers selon tes besoins.Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.