Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

2,819 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Internxt Drive Desktop for Linux

DeepWiki

Compatibility

Internxt Drive Desktop for Linux is currently tested and supported on Ubuntu and Debian with the file managers Nautilus, Nemo, and Dolphin.

The application is also available through the .deb and .rpm packages for these distributions.

We cannot guarantee full compatibility on other Linux distributions or with unsupported file managers, although the app may still work in some environments.

Installation

Internxt Drive is available for Linux in two formats:

.deb Package (Recommended)

Download and install the .deb package for full compatibility:

sudo dpkg -i internxt_2.6.0_amd64.deb

Prerequisites for KDE-based distros

KDE Wallet Configuration Guide

Our application requires the KDE key manager to be properly configured. Depending on your security needs, you can choose between two methods:

  • Method 1 (Recommended / Easy): Uses standard symmetric encryption with a master password. It is fast, requires no additional software, and supports automatic unlocking when you log in.
  • Method 2 (Advanced / GPG): Uses an OpenPGP key pair via Kleopatra for higher security, though it requires manual entry of your passphrase or PIN upon logging in.

Why Kleopatra? It is the official KDE key manager, offering native integration with KDE Wallet, fewer permission conflicts, and a user-friendly setup wizard compared to generic GPG tools.

For reference, Electron's secure storage API is documented here: safe-storage.


Method 1: Standard Setup (Easy & Recommended)

This is the simplest way to set up KDE Wallet and allows seamless automatic unlocking upon system login.

Step 1: Open KDE Wallet Settings

  1. Open System Settings.
  2. Navigate to KDE Wallet (or search for Wallet in the search bar).
  3. Ensure Enable the KDE wallet subsystem is checked.

Step 2: Create a New Wallet

  1. Under Automatic Wallet Selection, click Create New Wallet...
  2. Enter a name for your wallet (e.g., kdewallet).
  3. Select Blowfish encryption (standard password) and click Next.
  4. Enter and confirm your Master Password.

    Note: If you set this password to match your Linux user login password, the wallet will unlock automatically when you sign in!

  5. Click Finish.

Method 2: GPG Key Setup (Advanced)

Use this method if you prefer asymmetric GPG encryption managed via external key managers.

Step 1: Install Kleopatra

Install Kleopatra, which will be used to generate your GPG encryption key:

sudo apt update && sudo apt install kleopatra

Step 2: Generate a GPG Key Pair

  1. Open Kleopatra and click New Key Pair (or File > New Key Pair).
  2. Select Create a personal OpenPGP key pair.
  3. Enter your Name and Email Address.
  4. Click Create (or Finish) to complete the setup.

Step 3: Configure KDE Wallet for GPG

  1. Open System Settings and search for KDE Wallet.
  2. Under Automatic Wallet Selection, click Create New Wallet...
  3. Select Use GPG encryption for added security and click Next.
  4. Choose the GPG key you created earlier in Kleopatra and click Finish.

AppImage

Alternatively, you can use the AppImage format:

chmod +x Internxt-2.6.0.AppImage
./Internxt-2.6.0.AppImage

⚠️ Important Note about AppImage and SSO Login:

Due to technical limitations of the AppImage format, the new SSO login flow is only supported when using Chrome. The .deb version does not have this restriction and remains fully compatible with all browsers.

For the best experience with SSO authentication, we recommend using the .deb package installation method.

Development

Prerequisites

  • NVM (Node Version Manager)
  • Node.js 24

If working on the FUSE daemon (Go), see packages/fuse-daemon/README.md for Go and linting tool prerequisites.

Install

Clone the repo and install dependencies:

git clone https://github.com/internxt/drive-desktop-linux.git
cd drive-desktop-linux
npm install

Starting Development

Start the app in the dev environment:

npm start

Packaging for Production

To package apps for the local platform:

npm run package

Building the .rpm package requires rpmbuild. On Ubuntu or Debian, install the rpm package before running the packaging command:

sudo apt-get install rpm

Official Release Build (CI Container)

The official release pipeline builds and publishes artifacts inside a pinned container image (Dockerfile.release) to reduce host drift.

Current release flow:

  1. Build container image from ubuntu:24.04.
  2. Run npm ci and npm run publish inside the container.
  3. Upload generated artifacts (.deb, .rpm, .AppImage) plus build metadata.
  4. Run smoke tests on the generated .deb without rebuilding it.

Smoke Test Strategy

The release workflow includes a smoke test job that:

  1. Downloads the previously built .deb artifact.
  2. Installs runtime dependencies for Linux GUI startup checks.
  3. Installs the package and verifies /opt/Internxt/internxt exists.
  4. Launches the binary in headless mode (xvfb-run) and checks startup.

Login Configuration Using Deeplink

Create a script in the root of the project named enable-sso.sh and add the following content:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
# Load nvm manually
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
cd "/your-project-path/drive-desktop-linux/"
nvm use 24
npm run start:main -- "$@"

Use the following command to give the script execution permissions:

chmod +x /your-project-location/drive-desktop-linux/enable-sso.sh

Create Linux Handler Protocol File

Use the following command to create the file and add the following content:

vim ~/.local/share/applications/internxt-protocol.desktop

[Desktop Entry]
Type=Application
Name=Internxt Desktop (Dev)
Exec=/your-project-location/drive-desktop-linux/enable-sso.sh %u
Icon=internxt
Terminal=false
MimeType=x-scheme-handler/internxt;

Change the permissions of the newly created file:

chmod 644 ~/.local/share/applications/internxt-protocol.desktop

Register the internxt protocol handler:

xdg-mime default internxt-protocol.desktop x-scheme-handler/internxt

Update the application database:

update-desktop-database ~/.local/share/applications

Check that the internxt protocol is correctly registered:

gio mime x-scheme-handler/internxt

Verify by logging into the application.

Troubleshooting SSO in Development

If opening an internxt:// URL launches the development command but Electron exits with an error like this:

The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

Or the dev app does not open at all, it may be that the deeplink registration is working, but Electron is aborting before the main process starts because Chromium's Linux sandbox helper has the wrong owner or permissions.

Confirm the current permissions (in the project root):

ls -l node_modules/electron/dist/chrome-sandbox

Fix them from the project root:

sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

The expected result is that chrome-sandbox is owned by root and has the setuid bit enabled:

-rwsr-xr-x 1 root root ... node_modules/electron/dist/chrome-sandbox

This may need to be repeated after reinstalling dependencies, because node_modules/electron can be recreated with regular user ownership.

Releases

Packages

Used by

Contributors

Languages