Student linux laboratory - IDE 2.x won't start without internet connection

Hello,

I'm a teacher using Arduino in a Linux-based computer lab (Debian 12.x). For exams, we use a special student account that does not have internet access to ensure academic integrity.

Here’s what I’ve done so far:

  • On the exam account with internet, I installed Arduino IDE 2.3.6.
  • The IDE launches correctly, detects the Arduino Mega, and successfully uploads the Blink sketch.
  • Everything functions normally during setup.

However, when switching to exam mode (same account, but no internet connection), the IDE hangs indefinitely on the pulsing Arduino logo during startup.

Question:
Is there a known workaround or configuration setting to allow Arduino IDE 2.x to launch properly offline?
Is it trying to reach out to a service during startup? Can this be disabled?

Any help would be greatly appreciated!

Thanks!

Hi @el_pablo. I'm going to ask you to provide some additional information that might help us to identify the problem.


:red_exclamation_mark: This procedure is not intended to solve the problem. The purpose is to gather more information.


Please do this:

  1. Close all Arduino IDE windows if the IDE is already running.
  2. Open a command line terminal in the folder that contains the AppImage file.
  3. Type the following command in the terminal window:
    ./arduino-ide_<version>_Linux_64bit.AppImage
    
    (where <version> is the Arduino IDE version number)
  4. Press the Enter key.
    Debug output should now be printed to the terminal window as Arduino IDE starts (or fails to start).
  5. Wait until you are sure the IDE startup has gone into the hang state
    (as indicated by no additional output being printed to the terminal).
  6. Switch back to the terminal window.
  7. Use the mouse to select all the text in the terminal window. Make sure to scroll all the way up to the top.
  8. Press the Ctrl+Shift+C keyboard shortcut.
    This will copy the selected text to the clipboard.
  9. Open a reply here on this forum topic by clicking the "Reply" button.
  10. Click the <CODE/> icon on the post composer toolbar.
    This will add the forum's code block markup (```) to your reply to make sure the error messages are correctly formatted.
  11. Press the Ctrl+V keyboard shortcut.
    This will paste the output into the code block.
  12. Move the cursor outside of the code block markup before you add any additional text to your reply.
  13. Click the "Reply" button to publish the post.

Please let us know if you have any questions or problems while following those instructions.

dse1_exam@1133A-MULET:~/Downloads$ ./arduino-ide_2.3.6_Linux_64bit.AppImage 
Arduino IDE 2.3.6
Checking for frontend application configuration customizations. Module path: /tmp/.mount_arduinPXrbn6/resources/app/lib/backend/electron-main.js, destination 'package.json': /tmp/.mount_arduinPXrbn6/resources/app/package.json
Setting 'theia.frontend.config.appVersion' application configuration value to: "2.3.6" (type of string)
Setting 'theia.frontend.config.cliVersion' application configuration value to: "1.2.0" (type of string)
Setting 'theia.frontend.config.buildDate' application configuration value to: "2025-04-09T11:24:04.835Z" (type of string)
Frontend application configuration after modifications: {"applicationName":"Arduino IDE","defaultTheme":{"light":"arduino-theme","dark":"arduino-theme-dark"},"defaultIconTheme":"none","electron":{"windowOptions":{},"showWindowEarly":true,"splashScreenOptions":{},"uriScheme":"arduino-ide"},"defaultLocale":"","validatePreferencesSchema":false,"reloadOnReconnect":true,"uriScheme":"theia","preferences":{"window.title":"${rootName}${activeEditorShort}${appName}","files.autoSave":"afterDelay","editor.minimap.enabled":false,"editor.tabSize":2,"editor.scrollBeyondLastLine":false,"editor.quickSuggestions":{"other":false,"comments":false,"strings":false},"editor.maxTokenizationLineLength":500,"editor.bracketPairColorization.enabled":false,"breadcrumbs.enabled":false,"workbench.tree.renderIndentGuides":"none","explorer.compactFolders":false},"appVersion":"2.3.6","cliVersion":"1.2.0","buildDate":"2025-04-09T11:24:04.835Z"}
Starting backend process. PID: 21670
Showing main window early
Using browser-only version of superagent in non-browser environment
Configuration directory URI: 'file:///home/dse1_exam/.arduinoIDE'
Configuring to accept webviews on '^.+\.webview\..+$' hostname.
2025-06-10T15:37:48.874Z root INFO Backend u.initialize: 28.1 ms [Finished 0.415 s after backend start]
2025-06-10T15:37:48.877Z root INFO Backend Object.initialize: 27.1 ms [Finished 0.415 s after backend start]
2025-06-10T15:37:48.877Z root INFO Backend a.initialize: 1.1 ms [Finished 0.415 s after backend start]
2025-06-10T15:37:48.877Z root INFO Backend a.initialize: 0.9 ms [Finished 0.415 s after backend start]
2025-06-10T15:37:48.877Z root INFO Backend u.initialize: 1.1 ms [Finished 0.415 s after backend start]
2025-06-10T15:37:48.878Z root INFO Backend l.initialize: 28.0 ms [Finished 0.416 s after backend start]
2025-06-10T15:37:48.882Z root INFO configured all backend app contributions
2025-06-10T15:37:48.882Z root INFO Backend l.onStart: 0.8 ms [Finished 0.424 s after backend start]
2025-06-10T15:37:48.883Z root INFO Backend d.onStart: 0.1 ms [Finished 0.424 s after backend start]
2025-06-10T15:37:48.883Z root INFO Backend a.onStart: 0.2 ms [Finished 0.424 s after backend start]
2025-06-10T15:37:48.883Z config INFO >>> Initializing CLI configuration...
2025-06-10T15:37:48.883Z root INFO Backend x.onStart: 0.2 ms [Finished 0.424 s after backend start]
2025-06-10T15:37:48.883Z config INFO Loading CLI configuration from /home/dse1_exam/.arduinoIDE/arduino-cli.yaml...
2025-06-10T15:37:48.883Z daemon INFO Starting daemon from /tmp/.mount_arduinPXrbn6/resources/app/lib/backend/resources/arduino-cli...
2025-06-10T15:37:48.883Z root INFO Backend w.onStart: 0.2 ms [Finished 0.425 s after backend start]
2025-06-10T15:37:48.883Z discovery-log INFO start
2025-06-10T15:37:48.883Z discovery-log INFO start new deferred
2025-06-10T15:37:48.883Z root INFO Backend v.onStart: 0.1 ms [Finished 0.425 s after backend start]
2025-06-10T15:37:48.883Z root INFO Backend a.onStart: 0.0 ms [Finished 0.425 s after backend start]
2025-06-10T15:37:48.885Z root INFO Theia app listening on http://127.0.0.1:45187.
2025-06-10T15:37:48.885Z root INFO Finished starting backend application: 2.1 ms [Finished 0.427 s after backend start]
2025-06-10T15:37:48.886Z root WARN The local plugin referenced by local-dir:/home/dse1_exam/.arduinoIDE/plugins does not exist.
2025-06-10T15:37:48.886Z root WARN The local plugin referenced by local-dir:/home/dse1_exam/.arduinoIDE/deployedPlugins does not exist.
2025-06-10T15:37:48.888Z config INFO Loaded CLI configuration: {"board_manager":{"additional_urls":[]},"directories":{"builtin":{"libraries":"/home/dse1_exam/.arduino15/libraries"},"data":"/home/dse1_exam/.arduino15","user":"/home/dse1_exam/Arduino"},"locale":"en"}
2025-06-10T15:37:48.888Z config INFO 'directories.data' and 'directories.user' are set in the CLI configuration model.
2025-06-10T15:37:48.888Z config INFO Loaded the CLI configuration.
2025-06-10T15:37:48.893Z config INFO Mapped the CLI configuration: {"dataDirUri":"file:///home/dse1_exam/.arduino15","sketchDirUri":"file:///home/dse1_exam/Arduino","additionalUrls":[],"network":"none","locale":"en"}
2025-06-10T15:37:48.893Z config INFO Validating the CLI configuration...
2025-06-10T15:37:48.893Z config INFO The CLI config is valid.
2025-06-10T15:37:48.893Z config INFO <<< Initialized the CLI configuration.
2025-06-10T15:37:48.983Z root INFO Resolve plugins list: 98.7 ms [Finished 0.524 s after backend start]
2025-06-10T15:37:49.116Z daemon INFO time="2025-06-10T11:37:49-04:00" level=info msg="arduino-cli version 1.2.0"
2025-06-10T15:37:49.116Z daemon INFO time="2025-06-10T11:37:49-04:00" level=info msg="Using config file: /home/dse1_exam/.arduinoIDE/arduino-cli.yaml"
time="2025-06-10T11:37:49-04:00" level=info msg="Executing `arduino-cli daemon`"
2025-06-10T15:37:49.125Z daemon INFO Daemon is now listening on 127.0.0.1:37869
{"IP":"127.0.0.1","Port":"37869"}
2025-06-10T15:37:49.125Z daemon INFO Daemon is running.
2025-06-10T15:37:49.133Z root ERROR Uncaught Exception:  Error: 14 UNAVAILABLE: No connection established. Last error: Protocol error (2025-06-10T15:37:49.132Z)
2025-06-10T15:37:49.133Z root ERROR Error: 14 UNAVAILABLE: No connection established. Last error: Protocol error (2025-06-10T15:37:49.132Z)
    at t.callErrorFromStatus (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:987037)
    at Object.onReceiveStatus (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:3783461)
    at Object.onReceiveStatus (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:2216666)
    at Object.onReceiveStatus (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:2216111)
    at /tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:4354680
    at processTicksAndRejections (node:internal/process/task_queues:77:11)
    at runNextTicks (node:internal/process/task_queues:64:3)
    at process.processImmediate (node:internal/timers:449:9)
for call at
    at s.makeUnaryRequest (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:3782992)
    at s.create (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:3311624)
    at instance (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:102990)
    at new Promise (<anonymous>)
    at y.createClient (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:102967)
    at y.create (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:101875)
    at /tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:100771
    at /tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:6419737
    at s.invoke (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:6419827)
    at a.fire (/tmp/.mount_arduinPXrbn6/resources/app/lib/backend/main.js:2:6421630)
2025-06-10T15:37:49.616Z root INFO Deploy plugins list: 732.5 ms [Finished 1.158 s after backend start]
2025-06-10T15:37:49.764Z root INFO creating connection for 1
2025-06-10T15:37:50.281Z root WARN A command editor.action.toggleStickyScroll is already registered.
Opening channel for service path '/services/electron-window'.
Opening channel for service path '/services/ide-updater'.
2025-06-10T15:37:50.345Z root INFO Start frontend contributions: 163.9 ms [Finished 1.445 s after frontend start]
2025-06-10T15:37:50.345Z root INFO Changed application state from 'init' to 'started_contributions'.
2025-06-10T15:37:50.359Z root INFO Changed application state from 'started_contributions' to 'attached_shell'.
2025-06-10T15:37:50.359Z root INFO >>> Restoring the layout state...
2025-06-10T15:37:50.374Z root INFO [6ecd7691-397f-4b9e-a4ee-5c7ea858db30] Waiting for backend deployment: 35.7 ms [Finished 1.478 s after frontend start]
2025-06-10T15:37:50.657Z root INFO [hosted-plugin: 21770] PLUGIN_HOST(21770) starting instance
[Object: null prototype] {}
2025-06-10T15:37:50.988Z root INFO [6ecd7691-397f-4b9e-a4ee-5c7ea858db30] Sync of 23 plugins: 617.2 ms [Finished 2.095 s after frontend start]



As long as the essential components that Arduino IDE normally downloads from the Internet on the first run after a fresh installation are already present, there is no need for Internet access to use Arduino IDE.

However, Arduino IDE does use the network for communication between its components. This is purely internal to the machine, not using the external network interface in any way. So it would not really be accurate to describe it as "reaching out". However, it is still possible for the network configuration to interfere with its ability to make these essential communications. The error message shown in the logs you provided is a bit vague, but it might indicate that the inability to communicate via the network is the cause of the problem.

Please provide details about exactly how the user account has been configured to block Internet access. Are you using a proxy? Have you made any modifications, or is there anything notable about your "hosts file", especially in regards to the definition of localhost?

From my colleague who takes care of the lab setup

  • The network comm are redirected to a proxy.
  • Nothing has been modified in the hosts file
  • localhost still acts as normal
  • nftables is used to filter the packets

We'll try something out tomorrow and come back after our testing.

You might be encountering this problem:

If so, you should be able to work around the problem by define an environment variable named no_proxy with the value localhost in the environment in which Arduino IDE is invoked.

You can try it by the following instructions:

  1. Close any Arduino IDE windows that are open.
  2. Open a terminal.
  3. Run the following command in the terminal:
    export no_proxy="localhost"
    
  4. Invoke Arduino IDE from that terminal.

The no_proxy did the job. Thanks!

You are welcome. I'm glad it is working now.

Regards, Per

Hi there,

Sorry to revive this aging thread, but we’re setting up the lab again and running into the same issue with the Flatpak distribution.

We tried setting no_proxy="localhost", but unfortunately it doesn’t seem to work anymore.

We also attempted to reset the setup by deleting the .arduino* folders in the home directory, but that didn’t help either.

Any ideas?

When you use the Flatpak package of Arduino IDE, the application runs in a "sandbox", isolated from your normal system environment. I suspect this means that the environment variable you export into that normal system environment has no effect on the application running in the sandbox.

Unfortunately I'm not knowledgeable on the subject of Flatpak. It looks like the flatpak run command might be useful, something like this:

flatpak run --env=no_proxy="localhost" arduino-ide

Documentation here:

https://docs.flatpak.org/en/latest/flatpak-command-reference.html#flatpak-run

Maybe other forum helpers who are more knowledgeable in this area will be able to provide a better suggestion.