Aral Balkan

Mastodon icon RSS feed icon P2P network icon

How to enable the Browse Files setting in GSConnect

The GSConnect settings panel showing the error condition for the Browse Files setting that is described in this post.

Browse Files? Not so fast…

GSConnect is a beautiful shell extension for Gnome Shell that integrates mobile devices that can run KDE Connect (like phones and tablets that run LineageOS) with desktop computers that run Gnome on GNU/Linux (like my notebook running Pop!_OS).

One of the features that you might have trouble with is Browse Files as it is broken by default. It fails unless you have a separate app installed.

When you flip the relevant switch in the Mobile Settings for your device to turn it on, you are greeted with an exclamation mark icon and the setting stays off. So you have a good idea that something went wrong but you don’t know what, exactly1. By turning on the debugging option2, I was able to see the actual error messages in one of the developer consoles and realised that it had to do with a missing dependency; a package called SSHFS that mounts a remote filesystem locally using SFTP.

To fix this error, you have to install SSHFS separately:

sudo apt install sshfs

Once that’s installed, you can successfully flip the switch and start browsing the file system of your phone on your desktop.

My computer desktop, showing the Gnome system menu with the Browse Files options expanded for my mobile phone. The relevant options are All Files, Camera Pictures, and Unmount.

Press the third button from left (highlighted) to see the Browse Files options.

Needless to say, and quite strikingly so given how polished the rest of the extension is, this is not a great experience.

As I mentioned in my bug report, GSConnect should ideally seamlessly install and use SSHFS or, if there is some reason for which that is impossible, detect whether it is installed, disable the setting for turning the Browse Files on if the dependency is missing, and provide instructions3 for how to install it.

Thumbnails of the photos on my phone being displayed in Gnome Files on my desktop. The location bar reads (a hash code)/storage/emulated/0/DCIM/Camera.

Photos from my phone on my desktop, courtesy of GSConnect.

While developers may understand that many apps in Linux make use of specialised commandline packages behind the scenes4, that’s an implementation detail as far as the people using these tools are concerned.

If a feature in an app doesn’t work, it’s because the app is broken, not because I haven’t installed a dependency. Installing an app should install everything that the app needs to work. No ifs, no buts5.

This is not the first time I’ve encountered apps that are broken by default since switching my main development machine to GNU/Linux. A principle such as the following should be included in the design principles section of the Gnome Human Interface Guidelines to avoid this antipattern:

Your application should work by default

Installing an application should install all dependencies necessary for running the application. If this is not possible (for example, for legal reasons), then the application should detect missing dependencies and both inform and guide people on how to install them. It should not be possible to access or attempt to use features that depend on missing dependencies.

  1. If you hover over the icon you do get a tooltip with the error message informing you that SSHFS has not been installed but, of course, that is a hidden gesture and we cannot expect people to intuit it. [return]
  2. Mobile Devices → (My device name) → Mobile SettingsAboutDebug Mode [return]
  3. Or a link to instructions. [return]
  4. Unix philosophy [return]
  5. And if it cannot for reasons beyond its control (e.g., for legal reasons), it should be very humble and ashamed about this and do whatever it can to make the person aware of this limitation, apologise for it (even if it’s not its fault) and help the person to fix the problem that it created for them (even if it was for reasons outside of its control). [return]