{"id":15400524,"url":"https://github.com/whisperity/monomux","last_synced_at":"2025-07-15T15:41:13.122Z","repository":{"id":45406884,"uuid":"454390754","full_name":"whisperity/monomux","owner":"whisperity","description":"Monophone Terminal Multiplexer - Less intrusive than tmux, smarter than screen","archived":false,"fork":false,"pushed_at":"2023-10-23T14:27:48.000Z","size":710,"stargazers_count":20,"open_issues_count":21,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-16T01:53:18.496Z","etag":null,"topics":["console","detach","linux","posix","screen","ssh","terminal","terminal-application","tmux","unix"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whisperity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-01T13:06:18.000Z","updated_at":"2024-11-20T05:22:21.000Z","dependencies_parsed_at":"2023-02-19T13:01:00.614Z","dependency_job_id":"312adb45-b266-487d-aa70-8c9b957cf939","html_url":"https://github.com/whisperity/monomux","commit_stats":{"total_commits":106,"total_committers":1,"mean_commits":106.0,"dds":0.0,"last_synced_commit":"e1d40438477ef520de871ffa8956e44b7d998ee8"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/whisperity/monomux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whisperity%2Fmonomux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whisperity%2Fmonomux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whisperity%2Fmonomux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whisperity%2Fmonomux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whisperity","download_url":"https://codeload.github.com/whisperity/monomux/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whisperity%2Fmonomux/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265443553,"owners_count":23766413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","detach","linux","posix","screen","ssh","terminal","terminal-application","tmux","unix"],"created_at":"2024-10-01T15:54:05.810Z","updated_at":"2025-07-15T15:41:13.057Z","avatar_url":"https://github.com/whisperity.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"MonoMux\n=======\n\nMonoMux (for _Monophone Terminal Multiplexer_ \u0026mdash; pun intended) is a system tool that allows executing terminal sessions in the background with on-demand attaching to them.\n\n\u003e **📢 Important!** MonoMux is in active incremental development!\n\u003e You are welcome using it as your daily driver, but for long-term production systems, use the proven alternatives instead!\n\nMonoMux is a tool similar to [`screen`](http://gnu.org/software/screen/) and [`tmux`](https://github.com/tmux/tmux/wiki).\nIt allows most of the core features of _screen_ or _tmux_, with being less intrusive about its behaviour when it comes to using these tools with modern _terminal emulators_.\n\n\u003e **⚠️ Warning!** Currently, _MonoMux_ is designed with only supporting Linux operating systems in mind.\n\u003e Most of the project is written with POSIX system calls in mind, but there are *some* GNU extensions used.\n\n\u003e **ℹ️ Note:** _MonoMux_ is **NOT** a terminal emulator by itself!\n\u003e To use it, you may use any of your favourite terminal emulators.\n\nDependencies\n------------\n\nMonoMux uses modern C++ features, and as such, a C++17-capable compiler and associated standard library is needed to compile and execute the tool.\nThere are no other dependencies.\n\nInstallation\n------------\n\n### Ubuntu (18.04, 20.04, 22.04)\n\nDownload the `.deb` (and optionally the `.ddeb`) file for the release, and install the standard way:\n\n~~~{.bash}\nsudo dpkg --install monomux-*.*deb\n~~~\n\nAlternatively, a `.tar.gz` archive might be used.\nThe application consists of a single self-contained binary.\n\nUsage\n-----\n\nThe easiest use of MonoMux is simply starting it: `monomux`.\nBy default, a server starts in the background, and a default session is created with the default shell of the current user, and the client automatically attaches to this session.\nExecuting the client with a server already running will attach to the only session on the server, or if multiple sessions exist, an interactive menu will start with which a session can be selected.\n(The interactive menu can be explicitly requested, even if only at most one session exists, with the `-i` or `--interactive` parameter.)\n\n\u003e **ℹ️ Note:** Please always refer to the output of `monomux -h` for up-to-date information about what flags the installed tool supports.\n\nTo run multiple independent servers, specify the `-s`/`--socket` option with a path on the file system.\nCommunication between the server and the client takes place on this socket.\n\n### Fine-tuning Client options\n\nThe client can be fine-tuned during its start-up with several flags:\n\n * `monomux /bin/myshell` will start the specified program without passing any arguments to it.\n * `monomux -- /bin/myshell -a -b --arg-to-shell` will start the specified program with command-line arguments, if a new session is created.\n   (If the started program takes `-` or `--` arguments, an _explicit_ separator `--` must be given **BEFORE** the program's name!)\n * `monomux -n SESSION_NAME` will attach or start the session `SESSION_NAME`, bypassing the interactive menu.\n * Environment variables can be specified or removed via `-e VARIABLE=Value -u UNSET_VARIABLE`.\n\nA server can be started explicitly via `monomux --server`, in which case no client creation and attachment will be done.\n\nWhy?\n----\n\nOne of the most important contexts where _screen_ or _tmux_ comes to mind is over remote sessions.\nIf a remote connection breaks \u0026mdash; or the local graphical terminal closes or crashes \u0026mdash;, the terminal session behind the connection is sent a **`SIGHUP`** signal, for which most programs exit.\nThis results in the loss of shell history, and the interrupt of running programs.\n\nThe most crucial problem from an interactive work's point-of-view with existing tools is that both _screen_ and _tmux_ **act as terminal emulators** themselves.\nTheir behaviour is to _parse_ the [VT sequences](http://vt100.net/docs/vt100-ug/chapter3.html) of the output received from the \"remote\" terminal and emit them to the attached client(s).\nPrograms using extensive modern, or terminal specific features will have to fall back to the older and more restrictive set of what _screen_ or _tmux_ understands.\n\nA fork of _screen_, [`dtach`](http://github.com/crigler/dtach) was created which emulates **only** the attach/detach features of _screen_.\nHowever, _dtach_ has a straightforward and non-trivial interface, e.g. the user must specify the connection socket file manually.\n\n(Moreover, all of the aforementioned tools are written in C.)\n\nMonoMux aims to combine the good aspects of all of these tools but remove almost all of the possible hurdles in the way of tools running in the background session.\n\n * Attach/detach features are supported without the need of parsing control sequences.\n * Every I/O operation to and from the client to the attached session is passed **verbatim**, without understanding the contents.\n   * This allows using all the features of a modern _terminal emulator_ as-is.\n   * However, this also means that features found in _tmux_ such as splits or keybinds _can not_ and **will not** be implemented in this tool.\n * Better defaults than _dtach_: no need to specify an exit escape sequence or modern resize events.\n * Like _tmux_, there is meaningful session management by default, giving an interactive attach menu if multiple sessions exist.\n\nWritten in C++17, with object-oriented design in mind.\nThis might result in a larger binary than for other tools, however, _MonoMux_ is intended for user systems, not embedded contexts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhisperity%2Fmonomux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhisperity%2Fmonomux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhisperity%2Fmonomux/lists"}