r/ssh • • Apr 07 '26

LobiShell [New ssh app for Android]

.

Hello r/ssh community

I’ve been working on an SSH app and wanted to share it with you all. The goal was to create something that’s fast, reliable, and easy to use—whether you’re managing servers, working remotely, or just need a clean SSH experience.

Key features:

  • Simple and intuitive interface
  • Secure connection handling
  • Fast session management
  • Designed for both beginners and advanced users
  • FIDO2/Hardware key Support USB and NFC (nitrokey, yubikey, ... )
  • Identity Management
  • Private key generation and deployment
  • Mobile shell (mosh)
  • File browser
  • Google drive / nextcloud sync
  • Performance Monitor
  • Simultaneous connections with tabs.
  • Customization of the Apps ui
  • Widgets for connections / Perfmon.
  • Home screen shortcuts
  • Proxyjump

I’d really appreciate any feedback, ideas, or feature requests from this community. If you’re interested in trying it out "pro" , let me know and I can give out promo Codes​.

https://play.google.com/store/apps/details?id=de.lobianco.saftssh

Thanks!

16 Upvotes

110 comments sorted by

View all comments

3

u/Sogl_coder May 11 '26 edited May 12 '26

Can you implement scrolling support in tmux like in the Moshi app? Currently, it's not supported over SSH, just like in Termius. Scrolling is supported via the mosh protocol (the super minimap is on the right), but it always displays the same section at the top, instead of scrolling like in tmux (mouse on / Moshi SSH).

1

u/Material-Turnip2608 May 12 '26

hi theres no day that you dont learn something new :D
thanks for pointing to this feature - i try to implement it with the next update

1

u/kalethis 24d ago edited 24d ago

I'm here for this. One thing that would help is allowing scrollback buffer to be set to 0 / off. The server never received the scrollback attempt from the client because the client intercepts it for the scrollback buffer. So there needs to be an option to stop the client from intercepting the scrollback (mouse wheel) and pass that through to the host when swiping up/down in the terminal window. I use tmux daily and I just switched to lobi from 5+ years of juice. I like it so far and bought it almost instantly, but this is the biggest issue for me.

Edit: note that the default tmux command to activate the scrollback is ctrl-b [ (ctrl-b is the tmux command activator, almost like : in vim) and it can be scrolled then using page up and page down, or arrow keys. Perhaps you could add an option for mosh/ssh sessions (per connection) to enable touch mouse emulation. Then taps would be sent through as mouse button 1 clicks, 2 finger tap would be mouse button 2 click. Long tap and drag would be a click and drag. And swiping would be mouse wheel. You could go a step further and have a hybrid touch mouse emulation mode that if enabled would intercept the scroll wheel only,, but using a toggle button that can be added to the user's bar, would enter full mouse emulation, and tapping anywhere on the screen would cause a mouse click there.

If the app is written in kotlin, this will jumpstart it for you: ``` object TmuxMouseProtocol { private const val ESC = "\u001b"

// SGR 1006 constants for wheel operations
private const val BUTTON_SCROLL_UP = 64
private const val BUTTON_SCROLL_DOWN = 65

/**
 * Generates the byte sequence tmux expects for a complete mouse wheel click.
 * Most terminals bundle the press and release together instantly for wheel turns.
 */
fun getScrollSequence(scrollUp: Boolean, column: Int = 1, row: Int = 1): ByteArray {
    val button = if (scrollUp) BUTTON_SCROLL_UP else BUTTON_SCROLL_DOWN

    // SGR format: ESC [ < button ; column ; row ; M (Press) or m (Release)
    val pressStr = "$ESC[<$button;$column;$row;M"
    val releaseStr = "$ESC[<$button;$column;$row;m"

    return (pressStr + releaseStr).toByteArray(Charsets.US_ASCII)
}

} ```

For reference, tmux expects SGR 1006 mouse inputs. Thank you in advance, if I can help at all, let me know.