{"id":35870730,"url":"https://github.com/mariuszkopowski/windows-app-for-linux","last_synced_at":"2026-01-08T15:05:18.102Z","repository":{"id":328822864,"uuid":"1116824000","full_name":"mariuszkopowski/windows-app-for-linux","owner":"mariuszkopowski","description":"This unofficial client wraps the Windows Cloud Devices web interface in an Electron shell, configured to behave like Microsoft Edge browser. It enables full access to Azure Virtual Desktop sessions through Windows App web access, with proper handling of camera, microphone, and other device permissions required for remote desktop connections.","archived":false,"fork":false,"pushed_at":"2025-12-15T16:35:36.000Z","size":1350,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-18T19:26:41.465Z","etag":null,"topics":["avd","azure-virtual-desktop","electron","virtual-desktop"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mariuszkopowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-15T12:38:38.000Z","updated_at":"2025-12-15T16:12:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mariuszkopowski/windows-app-for-linux","commit_stats":null,"previous_names":["mariuszkopowski/windows-app-for-linux"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mariuszkopowski/windows-app-for-linux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariuszkopowski%2Fwindows-app-for-linux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariuszkopowski%2Fwindows-app-for-linux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariuszkopowski%2Fwindows-app-for-linux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariuszkopowski%2Fwindows-app-for-linux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mariuszkopowski","download_url":"https://codeload.github.com/mariuszkopowski/windows-app-for-linux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariuszkopowski%2Fwindows-app-for-linux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28246414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2026-01-08T02:00:06.591Z","response_time":241,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avd","azure-virtual-desktop","electron","virtual-desktop"],"created_at":"2026-01-08T15:04:43.311Z","updated_at":"2026-01-08T15:05:18.070Z","avatar_url":"https://github.com/mariuszkopowski.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Windows App for Linux\n\n**Unofficial Client for Windows App** - A standalone Electron application that provides native Linux access to Azure Virtual Desktops via Windows App web access (https://windows.cloud.microsoft) with proper browser emulation, device permissions, and remote desktop support.\n\n## Overview\n[![windows-app-for-linux](https://snapcraft.io/windows-app-for-linux/badge.svg)](https://snapcraft.io/windows-app-for-linux)\n[![windows-app-for-linux](https://snapcraft.io/windows-app-for-linux/trending.svg?name=0)](https://snapcraft.io/windows-app-for-linux)\n\nThis **unofficial client** wraps the Windows Cloud Devices web interface in an Electron shell, configured to behave like Microsoft Edge browser. It enables full access to Azure Virtual Desktop sessions through Windows App web access, with proper handling of camera, microphone, and other device permissions required for remote desktop connections.\n\n## Features\n\n- ✅ **Browser Emulation**: Custom User-Agent (Edge 143.0.0.0) and browser-like headers\n- ✅ **Remote Desktop Support**: Handles new windows for RDP sessions with proper session management\n- ✅ **Device Access**: Camera, microphone, and other media device permissions\n- ✅ **Fullscreen Mode**: Toggle fullscreen with F11\n- ✅ **Multi-Window Support**: Properly handles popup windows for remote desktop connections\n- ✅ **Session Management**: Shared cookies and authentication across windows\n- ✅ **WebRTC \u0026 WebAssembly**: Enabled for remote desktop functionality\n- ✅ **SharedArrayBuffer**: Enabled for RDP client compatibility\n- ✅ **Error Recovery**: Automatic crash recovery and error handling\n- ✅ **Linux Packaging**: Snap and Flatpak support for easy distribution\n\n## Quick Start\n\n### Installation\n\n\u003ca href=\"https://snapcraft.io/windows-app-for-linux\"\u003e\n    \u003cimg alt=\"Get it from the Snap Store\" src=https://snapcraft.io/en/dark/install.svg /\u003e\n  \u003c/a\u003e\n\n### Run from source code\n#### Prerequisites\n\n- **Node.js**: v16 or higher (v20+ recommended)\n- **npm**: Comes with Node.js\n- **For Snap builds**: `snapcraft` (install via `sudo snap install snapcraft --classic`)\n- **For Flatpak builds**: `flatpak` and `flatpak-builder`\n\n#### Enviroment setup\n\n1. **Clone or download this repository**\n\n2. **Run the setup script** (optional, checks Node.js and installs dependencies):\n   ```bash\n   ./setup.sh\n   ```\n\n   Or manually install dependencies:\n   ```bash\n      cd src\n   npm install\n   ```\n\n#### Running the Application\n\nStart the application:\n```bash\ncd src\nnpm start\n```\n\n## Documentation\n\nFor detailed documentation, see the [docs](docs/) folder:\n\n- **[Build Instructions](docs/build-instructions.md)** - Detailed instructions for building Snap and Flatpak packages\n- **[Compare Flags](docs/compare-flags.md)** - Comparison of Electron command-line flags\n\nThe app will:\n- Launch in windowed mode\n- Load the Windows Cloud Devices page (Azure Virtual Desktops via Windows App web access)\n- Use the configured Edge User-Agent\n- Automatically grant permissions for camera and microphone when needed\n- Handle new windows for Azure Virtual Desktop sessions\n\n## Keyboard Shortcuts\n\n- **F11**: Toggle fullscreen mode\n- **F12**: Toggle Developer Tools\n- **Ctrl+Shift+I**: Alternative DevTools toggle\n- **Ctrl+N**: Open new window\n- **Ctrl+R**: Reload page\n- **Ctrl+Shift+R**: Force reload\n\n## Building for Distribution\n\n### Standard Electron Build\n\nTo build platform-specific installers using electron-builder:\n\n```bash\ncd src\nnpm run build\n```\n\nThis will create installers in the `build/dist` folder for your platform.\n\n### Snap Package\n\nThe application can be packaged as a Snap for easy installation on Linux distributions.\n\n1. **Install snapcraft** (if not already installed):\n   ```bash\n   sudo snap install snapcraft --classic\n   ```\n\n2. **Build the snap**:\n   ```bash\n   cd src\n   npm run build:snap\n   ```\n   The snap file will be created in the `build/` folder.\n\n   Or directly:\n   ```bash\n   snapcraft pack --destructive-mode --output-dir build\n   ```\n\n3. **Install the snap locally** (for testing):\n   ```bash\n   sudo snap install build/windows-app-for-linux_1.0.0_amd64.snap --dangerous\n   ```\n\n4. **Run the application**:\n   ```bash\n   windows-app-for-linux\n   ```\n\n5. **Publish to Snap Store** (optional):\n   ```bash\n   snapcraft login\n   snapcraft push windows-app-for-linux_1.0.0_amd64.snap\n   ```\n\n#### Snap Permissions\n\nThe snap package includes the following permissions (plugs):\n- `camera`: Camera access for video calls\n- `audio-playback`: Audio output\n- `audio-record`: Microphone input\n- `network`: Internet access\n- `desktop`: Desktop integration\n- `wayland` / `x11`: Display server support\n- `opengl`: Hardware acceleration\n- `pulseaudio`: Audio system integration\n- `home`: Home directory access\n- `removable-media`: USB device access\n\n### Flatpak Package\n\nThe application can also be packaged as a Flatpak.\n\n1. **Install Flatpak and Flatpak Builder**:\n   ```bash\n   sudo apt install flatpak flatpak-builder\n   flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\n   ```\n\n2. **Build the Flatpak**:\n   ```bash\n   cd src\n   npm run build:flatpak\n   ```\n   The build directory will be in `build/flatpak-build/`.\n\n   Or directly:\n   ```bash\n   flatpak-builder build/flatpak-build src/windows-app-for-linux.desktop.yml --force-clean\n   ```\n\n3. **Install locally** (for testing):\n   ```bash\n   cd src\n   npm run install:flatpak\n   ```\n   Or directly:\n   ```bash\n   flatpak-builder --user --install --force-clean build/flatpak-build src/windows-app-for-linux.desktop.yml\n   ```\n\n4. **Run the application**:\n   ```bash\n   flatpak run com.microsoft.WindowsAppForLinux\n   ```\n\n## Architecture\n\n### Main Window\n\nThe main window loads the Windows Cloud Devices dashboard at `https://windows.cloud.microsoft/#/devices`, which provides access to Azure Virtual Desktops via Windows App web access. It uses a custom User-Agent and browser-like headers to ensure compatibility with Microsoft's service.\n\n### Remote Desktop Windows\n\nWhen you connect to an Azure Virtual Desktop session, the application automatically creates a new window with:\n- Shared session and cookies (for authentication)\n- Same User-Agent configuration\n- Proper WebRTC and WebAssembly support\n- Error recovery mechanisms\n- Fullscreen toggle support\n\n### Command Line Switches\n\nThe application uses several Electron command-line switches to enable browser-like behavior:\n- `enable-features`: VaapiVideoDecoder, SharedArrayBuffer, CrossOriginOpenerPolicy\n- `enable-blink-features`: SharedArrayBuffer\n- `enable-webrtc`: WebRTC support\n- `enable-webassembly`: WebAssembly support\n- `enable-accelerated-2d-canvas`: Hardware acceleration\n- `enable-gpu-rasterization`: GPU rendering\n- `disable-dev-shm-usage`: Use /tmp for shared memory\n\n## Configuration\n\n### User-Agent\n\nThe User-Agent can be modified in `src/main.js`:\n```javascript\nconst USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0';\n```\n\n### Target URL\n\nChange the target URL in `src/main.js`:\n```javascript\nmainWindow.loadURL('https://windows.cloud.microsoft/#/devices');\n```\n\n### Window Size\n\nDefault window size can be changed in the `createWindow()` function in `src/main.js`:\n```javascript\nwidth: 1920,\nheight: 1080,\n```\n\n## Permissions\n\nThe app automatically grants the following permissions:\n- **Camera**: For video calls and screen sharing\n- **Microphone**: For audio communication\n- **Media**: Combined camera + microphone permission\n- **Notifications**: For system notifications\n- **Geolocation**: If required by the service\n- **Fullscreen**: For immersive remote desktop experience\n- **MIDI**: For MIDI device access\n- **Pointer Lock**: For remote desktop mouse control\n\n## Troubleshooting\n\n### Web Page Doesn't Load\n\n1. **Check internet connection**: Ensure you have access to `windows.cloud.microsoft` (Windows App web access for Azure Virtual Desktops)\n2. **Verify User-Agent**: Check that the User-Agent is correctly set (use F12 DevTools)\n3. **Check console errors**: Enable DevTools (F12) and check for JavaScript errors\n4. **Clear cache**: The app uses Electron's default session storage\n\n### Remote Desktop Window Issues\n\n1. **Blank screen**: The RDP client may take a few seconds to initialize. Wait 5-10 seconds.\n2. **Authentication errors**: Ensure cookies are being shared (check console logs)\n3. **Crashes**: The app includes automatic crash recovery. If it persists, check console logs.\n4. **Performance issues**: Ensure hardware acceleration is enabled (check GPU settings)\n\n### Permission Issues\n\n1. **Camera/Microphone not working**: \n   - Check system permissions (Linux desktop settings)\n   - For Snap: `snap connect windows-app-for-linux:camera`\n   - For Flatpak: Check Flatpak permissions with `flatpak info com.microsoft.WindowsAppForLinux`\n\n2. **Audio issues**:\n   - Ensure PulseAudio is running\n   - Check audio system permissions\n\n### Debug Mode\n\nTo enable more verbose logging, the application already includes extensive console logging. Open DevTools (F12) to see:\n- Navigation events\n- Permission requests\n- Window creation\n- Error messages\n- Network requests\n\n## Development\n\n### Project Structure\n\n```\n.\n├── src/                 # Source code\n│   ├── main.js         # Main Electron process\n│   ├── package.json    # Node.js dependencies and scripts\n│   ├── *.desktop       # Desktop entry file\n│   └── *.png           # Application icon\n├── build/               # Build artifacts (generated)\n│   ├── *.snap          # Snap package output\n│   └── flatpak-build/  # Flatpak build directory\n├── docs/                # Documentation\n│   ├── build-instructions.md\n│   └── compare-flags.md\n├── snapcraft.yaml       # Snap package configuration\n├── setup.sh             # Development environment setup script\n├── .gitignore          # Git ignore rules\n└── README.md           # This file\n```\n\n**Note**: Snapcraft creates temporary build directories (`parts/`, `stage/`, `prime/`, `.snapcraft/`) in the project root during builds. These are automatically ignored by git and can be cleaned with `npm run clean`.\n\n### Dependencies\n\n- **electron**: ^31.0.0 - Electron framework\n- **electron-builder**: ^24.9.1 - Build tool for installers\n\n### Scripts\n\nAll scripts should be run from the `src/` directory:\n\n- `npm start`: Run the application in development mode\n- `npm run build`: Build platform-specific installers\n- `npm run build:snap`: Build Snap package (outputs to `build/`)\n- `npm run build:flatpak`: Build Flatpak package (outputs to `build/flatpak-build/`)\n- `npm run install:flatpak`: Build and install Flatpak locally\n- `npm run clean`: Clean all build artifacts\n- `npm run clean:snap`: Clean only Snap build artifacts\n- `npm run clean:flatpak`: Clean only Flatpak build artifacts\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit issues or pull requests.\n\n## Notes\n\n- **This is an unofficial client** for Windows App and is not affiliated with or endorsed by Microsoft\n- The application requires an active internet connection to access Azure Virtual Desktops via Windows App web access\n- A Microsoft account is required to use Azure Virtual Desktops\n- Remote desktop sessions (Azure Virtual Desktops) open in separate windows for better isolation\n- The app is designed to work on Linux distributions with X11 or Wayland\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariuszkopowski%2Fwindows-app-for-linux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmariuszkopowski%2Fwindows-app-for-linux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariuszkopowski%2Fwindows-app-for-linux/lists"}