Skip to content

A GUI frontend to sftpman (an application for managing and mounting sshfs (SFTP) filesystems)

License

Notifications You must be signed in to change notification settings

spantaleev/sftpman-iced-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sftpman-iced logo

sftpman-iced

sftpman-iced is a GUI application for Linux systems that makes it easy to setup and mount sshfs/SFTP filesystems.

It's a GUI frontend to the sftpman command line application and library (libsftpman). See the sftpman repository for more information.

📸 Screenshots

  1. sftpman-iced home screen
  2. sftpman-iced record screen

🚀 Installing

Dependencies

💡 Note: Installing the sftpman-iced GUI application will automatically pull the libsftpman library (provided by sftpman) as a dependency, but will not automatically install the sftpman CLI binary.

Installing on ArchLinux

For ArchLinux, there's an sftpman-iced package in the AUR.

Installing on other distributions

For other Linux distributions you can install using cargo:

cargo install sftpman-iced

You also need to:

  • install sshfs yourself

  • make sure the /mnt/sshfs directory exists and is writable (e.g. mkdir /mnt/sshfs && chown root:users /mnt/sshfs && chmod 0775 /mnt/sshfs)

❓ FAQ

Why was sftpman-gtk rewritten to sftpman-iced?

Since the underlying CLI application and library (sftpman) was rewritten from Python to Rust, we found ourselves having to rewrite the GUI application as well.

Also see:

Why was iced chosen as a UI framework instead of Gtk?

Also see: Why was sftpman-gtk rewritten to sftpman-iced?.

GNOME has been becoming more dumbed-down and its Gtk UI framework has been starting to feel more alien on other Desktop Environments (like KDE).

Furthermore, the imperative nature of Gtk makes it an ugly mess to develop for. Choosing a declarative UI framework was deemed a better choice.

The Rust bindings for various UI frameworks (Gtk, Qt, etc.) are all poor and iced ticked all our boxes.

Why was iced chosen as a UI framework instead of Qt?

Also see: Why was sftpman-gtk rewritten to sftpman-iced?.

When working on this rewrite, we gave Qt a try via qmetaobject-rs. It felt like a very fragile and ugly way to write code.

Rust bindings for Qt are all in a poor state and are likely to remain this way.

Why was iced chosen as a UI framework instead of Slint?

Also see: Why was sftpman-gtk rewritten to sftpman-iced?.

When working on this rewrite, we gave Slint a try.

While it seems like a promising UI framework, we weren't sure another commerical Qt clone is an ideal choice.

We also found that Slint yielded very large executables even for simple "Hello world" application. iced executables are not tiny either, but our complete sftpman-iced binary appears to be on par with Slint's "Hello world" (~17 MB).

Why was iced chosen given that it has poor accessibility?

Accessibility support in iced is currently lacking. This is usually an important reason to look past it.

Since we provide a more accessible CLI application (see sftpman) which can serve as a substitute to various handicapped users, we believe the lack of accessibility support is not a deal-breaker for us.

Why does sftpman-iced temporarily freeze during mounting?

Mounting is done by delegating to the sshfs command line application.

If sshfs needs to ask you for an SSH key passphrase or password, it will create a dialog box (via ssh-askpass, etc.) that does it.

We start sshfs on the main thread so that this dialog box can be displayed and interacted with correctly.

Why does sftpman-iced temporarily freeze during unmounting?

Unmounting (running fusermount -u .. commands, etc.) can more easily be accomplished in the background, but we haven't implemented it because:

  • unmounting is usually quick and doing it sequentially does not impact performance too much

  • we don't yet support displaying multiple error alerts at the same time. If multiple filesystems are being unmounted in parallel and they all error out, we would need to notify you properly (something which we can't do yet).

  • not blocking the main thread while unmounting would allow you to (accidentally) trigger a mount operation while unmounting is still in progress. Handling this gracefully will need further work.

Is sftpman-iced compatible with sftpman-gtk?

sftpman v2 (and the sftpman-iced GUI frontend) are still mostly-backward compatible with the old Python-based sftpman software (sftpman-python and the associated sftman-gtk):

  • ✅ The old configuration files can be read and used as-is

  • ✨ You can now use custom local mount endpoints for filesystems, instead of just the default /mnt/sshfs/{id} directory

Also see: Is sftpman v2 compatible with sftpman v1?

Acknowledgements

sftpman-iced is built with iced - a cross-platform GUI library for Rust focused on simplicity and type-safety.

The application includes icons from Bootstrap Icons, licensed under the MIT license. See the assets/bootstrap-icons directory.

About

A GUI frontend to sftpman (an application for managing and mounting sshfs (SFTP) filesystems)

Topics

Resources

License

Stars

Watchers

Forks