[< Back to README](../README.md) # Troubleshooting ## Built-in Diagnostics Run the `--doctor` flag to check your system for common issues: ```bash # Deb install claude-desktop --doctor # AppImage ./claude-desktop-*.AppImage --doctor ``` This runs a series of checks and prints pass/fail results with suggested fixes: | Check | What it verifies | |-------|-----------------| | Installed version | Package version via dpkg | | Display server | Wayland/X11 detection and mode | | Input method | IBus/GTK immodule sanity (ibus-gtk3 installed, cache fresh, XWayland routing note) | | Electron binary | Existence and version | | Chrome sandbox | Correct permissions (4755/root) | | SingletonLock | Stale lock file detection | | MCP config | JSON validity and server count | | Node.js | Version (v20+ recommended for MCP) | | Desktop entry | `.desktop` file presence | | Disk space | Free space on config partition | | Log file | Log file size | Example output: ``` Claude Desktop Diagnostics ================================ [PASS] Installed version: 1.1.4498-1.3.15 [PASS] Display server: Wayland (WAYLAND_DISPLAY=wayland-0) [PASS] Electron: found at /usr/lib/claude-desktop/node_modules/electron/dist/electron [PASS] Chrome sandbox: permissions OK [PASS] SingletonLock: no lock file (OK) [PASS] MCP config: valid JSON [PASS] Node.js: v22.14.0 [PASS] Desktop entry: /usr/share/applications/claude-desktop.desktop [PASS] Disk space: 632284MB free [PASS] Log file: 1352KB All checks passed. ``` When opening an issue, include the output of `--doctor` to help with diagnosis. ## Application Logs Runtime logs are available at: ``` ~/.cache/claude-desktop-debian/launcher.log ``` ## Common Issues ### Window Scaling Issues If the window doesn't scale correctly on first launch: 1. Right-click the Claude Desktop tray icon 2. Select "Quit" (do not force quit) 3. Restart the application This allows the application to save display settings properly. ### Global Hotkey Not Working (Wayland) If the global hotkey (Ctrl+Alt+Space) doesn't work, ensure you're not running in native Wayland mode: 1. Check your logs at `~/.cache/claude-desktop-debian/launcher.log` 2. Look for "Using X11 backend via XWayland" - this means hotkeys should work 3. If you see "Using native Wayland backend", unset `CLAUDE_USE_WAYLAND` or ensure it's not set to `1` **Note:** Native Wayland mode doesn't support global hotkeys due to Electron/Chromium limitations with XDG GlobalShortcuts Portal. See [CONFIGURATION.md](CONFIGURATION.md) for more details on the `CLAUDE_USE_WAYLAND` environment variable. ### Keyboard Input Doesn't Work (IBus / GTK Input Method) If typing into the chat does nothing, characters get swallowed, or dead-key sequences (e.g. ``` `e ``` → `è`) don't compose, your GTK input module integration with the Electron-bundled GTK is broken. Common symptoms: - No characters appear when typing into any text field - The first keystroke after focus is dropped, subsequent ones work - CJK input methods (IBus, Fcitx) not engaging - Compose key / dead-key sequences silently drop **First step: run `claude-desktop --doctor`.** It checks for the common misconfigurations and prints fix commands inline: - `ibus-gtk3` package missing while `GTK_IM_MODULE=ibus` - GTK immodules cache stale (the active module isn't listed by `gtk-query-immodules-3.0`) - XWayland session routing IBus through XIM (lossy for some IMEs — set `CLAUDE_USE_WAYLAND=1` to use native Wayland IME) - Active value of `CLAUDE_GTK_IM_MODULE` if you've set the override If `--doctor` is clean but input still misbehaves, switch the launcher to a different GTK input module. Set `CLAUDE_GTK_IM_MODULE` and Claude Desktop will propagate it as `GTK_IM_MODULE` to Electron at startup: ```bash # Bypass IBus entirely — uses the X Input Method (XIM) protocol CLAUDE_GTK_IM_MODULE=xim claude-desktop # To make it persistent, export it from your shell profile: # echo 'export CLAUDE_GTK_IM_MODULE=xim' >> ~/.profile ``` Valid values: anything your GTK installation supports (`xim`, `ibus`, `fcitx`, `simple`, etc.). When the override is active, the launcher logs a line to `~/.cache/claude-desktop-debian/launcher.log`: ``` GTK_IM_MODULE override: ibus -> xim (via CLAUDE_GTK_IM_MODULE) ``` **Trade-off:** `xim` is the lowest-common-denominator input module and does not support advanced IME features like CJK candidate windows or rich compose-key sequences. Only reach for it if your real input method (IBus/Fcitx) is broken; if you depend on CJK or compose, prefer fixing the IBus/Fcitx integration instead. ### AppImage Sandbox Warning AppImages run with `--no-sandbox` due to electron's chrome-sandbox requiring root privileges for unprivileged namespace creation. This is a known limitation of AppImage format with Electron applications. For enhanced security, consider: - Using the .deb package instead - Running the AppImage within a separate sandbox (e.g., bubblewrap) - Using Gear Lever's integrated AppImage management for better isolation ### Cowork on Ubuntu 24.04+ (AppArmor Blocks User Namespaces) Ubuntu 24.04 ships with `apparmor_restrict_unprivileged_userns=1` by default, which blocks the unprivileged user namespaces that Cowork's bubblewrap sandbox relies on. Symptoms: - `claude-desktop --doctor` reports `bubblewrap: sandbox probe failed` with `Operation not permitted` in stderr. - `~/.config/Claude/logs/cowork_vm_daemon.log` contains `bwrap is installed but cannot create a user namespace`. - Cowork sessions hang at "Starting VM..." or loop on reconnect. Permit user namespaces for `bwrap` via an AppArmor profile (one-time setup, requires sudo): ```bash sudo tee /etc/apparmor.d/bwrap <<'EOF' abi , include profile bwrap /usr/bin/bwrap flags=(unconfined) { userns, include if exists } EOF sudo apparmor_parser -r /etc/apparmor.d/bwrap ``` After applying the profile, run `claude-desktop --doctor` — the bubblewrap probe should pass, and Cowork should start without falling back to host-direct. **Security note:** this grants `/usr/bin/bwrap` the unconfined profile plus the `userns` capability. It matches the behavior bwrap had on Ubuntu 22.04 and earlier, and on most other distros, but is a system-wide change that affects every program invoking `/usr/bin/bwrap` (not just Claude Desktop). Review the profile against your threat model before applying. Credit: this workaround was contributed by [@hfyeh](https://github.com/hfyeh) in [#351](https://github.com/aaddrick/claude-desktop-debian/issues/351). ### Cowork: "VM connection timeout after 60 seconds" If Cowork fails with a VM timeout, the KVM backend is selected but the guest VM cannot connect back to the host via vsock within the timeout window. Common causes: 1. **First-boot initialization** — the guest VM may take longer than 60 seconds on first launch 2. **vsock driver issues** — the host may be missing the `vhost_vsock` module (`sudo modprobe vhost_vsock`), or the guest initrd may lack `vmw_vsock_virtio_transport` **Fix:** Force the bubblewrap backend, which provides namespace-level isolation without a VM: ```bash COWORK_VM_BACKEND=bwrap claude-desktop ``` See [CONFIGURATION.md](CONFIGURATION.md#cowork-backend) for how to make this permanent. ### Cowork: virtiofsd not found (Fedora/RHEL) On Fedora and RHEL, `virtiofsd` installs to `/usr/libexec/virtiofsd` which is outside `$PATH`. The `--doctor` check detects it there automatically and will show `[PASS]`, but the KVM backend spawns `virtiofsd` by name at runtime and resolves it through `$PATH` only. **Fix:** Create a symlink so the KVM backend can find it at runtime: ```bash sudo ln -s /usr/libexec/virtiofsd /usr/local/bin/virtiofsd ``` On Debian/Ubuntu, the same issue can occur with `/usr/lib/qemu/virtiofsd`. ### Cowork: cross-device link error on Fedora tmpfs /tmp On Fedora, `/tmp` is a tmpfs by default. VM bundle downloads may fail with `EXDEV: cross-device link not permitted` when moving files from `/tmp` to `~/.config/Claude/`. **Fix:** Set `TMPDIR` to a directory on the same filesystem: ```bash mkdir -p ~/.config/Claude/tmp TMPDIR=~/.config/Claude/tmp claude-desktop ``` Or add `TMPDIR=%h/.config/Claude/tmp` to the `Exec=` line in your `.desktop` file. ### Authentication Errors (401) If you encounter recurring "API Error: 401" messages after periods of inactivity, the cached OAuth token may need to be cleared. This is an upstream application issue reported in [#156](https://github.com/aaddrick/claude-desktop-debian/issues/156). To fix manually (credit: [MrEdwards007](https://github.com/MrEdwards007)): 1. Close Claude Desktop completely 2. Edit `~/.config/Claude/config.json` 3. Remove the line containing `"oauth:tokenCache"` (and any trailing comma if needed) 4. Save the file and restart Claude Desktop 5. Log in again when prompted A scripted solution is also available at the bottom of [this comment](https://github.com/aaddrick/claude-desktop-debian/issues/156#issuecomment-2682547498). ## Uninstallation ### For APT repository installations (Debian/Ubuntu) ```bash # Remove package sudo apt remove claude-desktop # Remove the repository and GPG key sudo rm /etc/apt/sources.list.d/claude-desktop.list sudo rm /usr/share/keyrings/claude-desktop.gpg ``` ### For DNF repository installations (Fedora/RHEL) ```bash # Remove package sudo dnf remove claude-desktop # Remove the repository sudo rm /etc/yum.repos.d/claude-desktop.repo ``` ### For AUR installations (Arch Linux) ```bash # Using yay yay -R claude-desktop-appimage # Or using paru paru -R claude-desktop-appimage # Or using pacman directly sudo pacman -R claude-desktop-appimage ``` ### For .deb packages (manual install) ```bash # Remove package sudo apt remove claude-desktop # Or: sudo dpkg -r claude-desktop # Remove package and configuration sudo dpkg -P claude-desktop ``` ### For .rpm packages ```bash # Remove package sudo dnf remove claude-desktop # Or: sudo rpm -e claude-desktop ``` ### For AppImages 1. Delete the `.AppImage` file 2. Remove the `.desktop` file from `~/.local/share/applications/` 3. If using Gear Lever, use its uninstall option ### Remove user configuration (all formats) ```bash rm -rf ~/.config/Claude ```