Ever wonder how to use the same app with different profiles/settings on Linux? Of course, one can create a new user profile, then download and install the same app, as suggested by Exodus for example. But there's some downsides to this method:
- We have to download the same app again, and when there's a new update of the said app, we will have to update every instance of the app separately every time (if you haven't installed the app in the root directory).
- We won't be able to use all of the app instances simultaneously.
- Creating and switching to a new user profile just for a few apps is clunky.
On Android, we have Island or Shelter, and we can expect that Android 14 will come with this feature by default. On Linux, we have Distrobox! It lets us run a Linux container using specific Linux distro images, at full speed!
Most of the apps will run inside Distrobox just fine. But some apps might not run inside Distrobox at all, Cloudflare WARP for example. However, from my experience, any Electron app works just fine inside Distrobox.
Install Distrobox in the system by running
sudo zypper install distroboxin the terminal. You can also install Distrobox using YaST Software Management app.
After the installation, we will create an openSUSE Tumbleweed container to run our clone app. In this walkthrough, I will clone Exodus, a multi-cryptocurrency wallet app, as an example. Therefore, I will create a container called
exodus-wallet2. And our home directory for this container will be
homedirectory since we want to separate the app profile inside the container from the one that's already installed in our system:
distrobox create -i registry.opensuse.org/opensuse/tumbleweed:latest -n exodus-wallet2 --home ~/home-exodus-wallet2
distrobox createis the command to create a Distrobox container.
-ioption is for specify the Linux distro image we want to use in the container. The full list of containers distros can be found here.
-noption is there to specify our container name.
--homeoption is very important, as it's where our container app profile/configurations will be saved to. Otherwise, the container will use the same app profile as our original installed app. It won't be a clone without this option.
The full list of Distrobox commands and usage examples can be found here.
Please don't name the container as
exodus. Otherwise, the container will create a desktop file called
exodus.desktopwhich will replace your original app's desktop file (you will have to create a desktop file for your original app again).
After the container creation process, we should be prompted to enter the container by running
distrobox enter exodus-wallet2. It will set things up for a moment.
Here are all the dependencies necessary for Exodus to run inside the container, run this command inside the container:
sudo zypper install glib2-devel mozilla-nss at-spi2-core-devel cups-devel gtk3-devel lunar-calendar-gtk3-module libcanberra-gtk3-module
Unfortunately, there's a 💀 dependency hell issue 💀 when using Distrobox. It's our usual workflow in Distrobox that we run any app the first time, then the app would complain about dependencies missing. We find those missing dependencies on pkgs.org, then install the responsible packages inside the container, since the packages that we have installed in the system are not used together with the packages inside the container. I hope the dependency hell issue will be fixed in the future.
However, all these dependencies will be deduplicated when we create a new container and need to use the same dependencies again. Therefore, even if we clone 10 instances of our app, those dependencies won't take our disk space at all. We can check the container disk space usage by running
docker system df -voutside the container.
Now, we can try running Exodus inside a container. My Exodus app is at
/home/archerallstars/Exodus/Exodus(this has to be an absolute path, i.e. The path you get when you right-click and copy a file), so I run it inside the container by running
/home/archerallstars/Exodus/Exodus, just like that. The app should run without any issue and using a new profile at
For our convenience, we will create a desktop file called
~/home-exodus-wallet2/.local/share/applicationsdirectory. This has to be done on our system outside the container. Here's my desktop file content:
#!/usr/bin/env xdg-open [Desktop Entry] Type=Application Name=Exodus Comment=Secure, manage, and trade blockchain assets. Exec=/home/archerallstars/Exodus/Exodus Terminal=false MimeType=x-scheme-handler/exodus; Categories=Utility;Network;Finance; Encoding=UTF-8
Most apps, including Exodus, will come with their desktop file that's inside the app's installation folder. Just copy and rename it like I do, then change the content of the desktop file easily by using MenuLibre 😂
If the app is packaged in AppImage format, you can extract its contents to get a desktop file by running the app with
--appimage-extractoption, see more here.
After step 6, export our app in the container to be used on outside the container (so, we don't have to
distrobox enterin the terminal every time we want to run the app) by running
distrobox-export --app Exodusinside the container. We should see the app's icon in our system.
We need to add
distrobox enter exodus-wallet2in front of the app's launching command like this:
distrobox enter exodus-wallet2 -- /home/archerallstars/Exodus-linux-x64/Exodus
After all the steps above, we should have the app cloned and ready to use just like other apps in our system.
I hope this helps, bye 💨