Skip to content

Repository files navigation

Minecraft Bedrock on Ubuntu Linux (via WineGDK)

Complete end-to-end guide: from creating a Windows 11 KVM VM to running Minecraft Bedrock on Ubuntu using WineGDK, a Wine fork with native GDK (Game Development Kit) support.

Status: PLAYABLE (2026-06-28) — Bedrock 26.32 runs on WineGDK + DXVK: the menu renders, gamepad works (Xbox / Stadia / PS3), keyboard works, and it connects to remote BDS servers (advertised as LAN games by the included proxy). Menu mouse-clicks may need the ~5s gate wait on 26.3x (keyboard/gamepad always work — see Known Limitations). Confirmed in real use. See PLAYING.md for how to play and ATTEMPTS.md for the full investigation.

Quick start: launch "Minecraft Bedrock" from the GNOME dash (or run scripts/play-bedrock.sh [--windowed]), connect a controller before launching, and join your server from LAN Games. Configure servers in the gitignored scripts/servers.conf (copy scripts/servers.conf.example).

Known Limitations & Caveats

  • Menu mouse-clicks on 26.3x — the custom dwmapi click-hook proxy that drove menu clicks on 1.26.21 page-faults under 26.3x's reworked pointer-input API, so the launcher uses Wine's builtin dwmapi (dwmapi=b). The game renders and plays fine; in the menu, give it the ~5s gate wait before clicking, or use keyboard/gamepad. In-world mouse-look is unaffected.
  • Intermittent "missing required component" error screen on launch — a ~50/50 GDK component-check race. Just relaunch.
  • Silent "no window" on launch — leftover lan-proxy.py / wineserver / game processes from a previous run make the game hang before rendering. scripts/play-bedrock.sh cleans these up automatically before launching.
  • Connect a controller before launching — GameInput enumerates devices at startup. Xbox/Stadia go through XInput; PS3/generic pads through DirectInput.
  • Keep private server IPs out of git — real addresses live in the gitignored scripts/servers.conf; never commit Tailscale IPs or personal server names.
  • No Microsoft account login — Xbox Live sign-in isn't working here, so no Realms, no featured servers, no signed-in online multiplayer. Self-hosted / LAN BDS servers work fine (same version as Windows).
  • File picker crashes the game — import worlds manually by extracting .mcworld files into com.mojang/minecraftWorlds/.
  • Wine prefix can corrupt on crashes — back up your saves regularly.

If you only need Java Edition, it runs natively on Linux — just use Prism Launcher. mcpelauncher (Android-based) is not a viable alternative — it cannot run the latest Bedrock versions, so cross-play with Android/console/Windows players fails due to version mismatch.

Overview

Component Details
Host OS Ubuntu 24.04 LTS
VM Windows 11 on KVM/QEMU with virt-manager
Runner WineGDK (built from source), Wine 11.8
Game Version Bedrock 26.32
GPU Tested NVIDIA GeForce GTX 1650 (TU117), Driver 595.58.03
Forks jphein/WineGDK, jphein/GDK-Proton

Current Status (2026-06-28)

PLAYABLE. Minecraft Bedrock 26.32 runs on Ubuntu Linux via WineGDK + DXVK — menu renders, gamepad + keyboard work (menu mouse-clicks may need the ~5s gate wait on 26.3x — see Known Limitations), connects to self-hosted BDS servers. Played end-to-end. Current build:

Build Install Path Notes
clang-23 ~/Projects/WineGDK/install-clang23/ wine-11.1; the playable build (gameinput.dll = drop-mouse + gamepad XInput/DInput)
clang-20 ~/Projects/WineGDK/install/ wine-11.8 (alt)

Build base: WineGDK source on branch wip/input-xbl (tracks LukasPAH/WineGDK minimal-xbl) plus our input fixes: gamepad GetCurrentReading (XInput + DInput8) and the mouse-device handling. GDK-Proton is current with upstream but dead for 1.26.x (no D3D device) — bare WineGDK is the path.

What works

  • Menu renders (cohtml Ore UI) and is fully navigable by mouse, keyboard, and gamepad.
  • Mouse — in-world mouse-look works; menu clicks may need the ~5s gate wait on 26.3x (the launcher uses builtin dwmapi there — see Known Limitations). Keyboard/gamepad always navigate the menu.
  • Gamepad — Xbox / Stadia / PS3 controllers (XInput + DirectInput paths). Connect before launching.
  • 3D world renders (DXVK d3d11 + vkd3d-proton d3d12), audio, in-world mouse-look.
  • Multiplayer to self-hosted BDS servers — advertised as LAN games via scripts/lan-proxy.py; one-shot launch via scripts/play-bedrock.sh + GNOME dash entry.

What does NOT work

  • Microsoft / Xbox Live login — no sign-in, so no Realms or featured servers.
  • Note: an intermittent GDK component-check race shows the "missing required component" screen on ~half of launches — just relaunch.

Earlier black screen (resolved — different issue)

Before the 3D world rendered, the game showed a black screen across 13 configurations (DXVK, lavapipe, wined3d OpenGL/Vulkan, etc.). That root cause was the wrong game binary: VM extraction had silently left version 1.26.3 in place when 1.26.21 was expected. With the correct 1.26.21 binary built under clang-23, the 3D world renders. That black screen was never bgfx, Wine, or the GPU driver — it was a version mismatch. (This is distinct from the current cohtml UI blocker above.)

Critical file: xgameruntime.dll.threading

The file xgameruntime.dll.threading is a native Microsoft DLL that must be present in the game directory. It is not built by WineGDK -- it comes from the Windows VM game extraction. If this file is missing, the game will fail to launch. Verify it exists after running host-copy-from-vm.sh.

Tracking

Scripts

Script Where Purpose
scripts/host-install-kvm.sh Host Install KVM/QEMU/virt-manager on Ubuntu
scripts/host-create-vm.sh Host Create the Windows 11 VM via CLI
scripts/vm-setup-ssh.ps1 VM Enable OpenSSH, fix admin key auth, configure firewall
scripts/vm-extract-minecraft.ps1 VM Decrypt and copy Minecraft files (robocopy + package context)
scripts/host-copy-from-vm.sh Host SSH into VM, extract game files, SCP to host
scripts/setup.sh Host Set up XCurl, SSL certs, stub DLLs, and Wine prefix
scripts/launch.sh Host Launch Minecraft via WineGDK (wine)
scripts/debug-launch.sh Host Launch with Wine debug output captured to log file
scripts/update-xcurl.sh Host Re-download XCurl.dll after game updates
scripts/update-bedrock.sh katana One-command update orchestrator — VM update → extract → setup → smoke → push to katana → update BDS servers
scripts/game-update.sh game host Game-side sequencer the orchestrator calls: VM update + extract + setup + headless smoke
scripts/update-bds-servers.sh terra Update self-hosted BDS servers to a matching version (worlds/configs preserved)
scripts/vm-update-minecraft.ps1 VM Headless Microsoft Store update inside the Windows 11 VM
scripts/update-targets.conf.example katana Topology config template for update-bedrock.sh (copy to gitignored update-targets.conf)
scripts/update.sh Host Deprecated (old GDK-Proton flow) — prints a notice and exits; use update-bedrock.sh
scripts/collect-logs.sh Host Collect full diagnostic info (system, DLLs, prefix health)
scripts/lan-proxy.py Host UDP broadcast proxy for LAN multiplayer across subnets
scripts/install-addon.sh Host Install .mcaddon/.mcpack into the game's com.mojang directory
scripts/deploy-gameinput.sh Host Copy builtin GameInput DLLs from WineGDK build to prefix
scripts/uninstall.sh Host Remove all Minecraft Bedrock files
stubs/gameconfighelper/ Host MinGW stub DLL: GameConfigHelper.dll (OpenGameConfigForPackage)
stubs/midlproxystub/ Host MinGW stub DLL: ObjectStublessClient3-32 forwarding to rpcrt4

Part 1: Set Up the Windows 11 KVM VM

1.1 Install KVM and Dependencies

./scripts/host-install-kvm.sh

Or manually:

# Verify CPU supports hardware virtualization
egrep -c '(vmx|svm)' /proc/cpuinfo  # Must be > 0

sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
  bridge-utils virt-manager virtinst ovmf swtpm swtpm-tools

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
newgrp libvirt

1.2 Download Windows 11 ISO and VirtIO Drivers

  1. Windows 11 ISO: Download from microsoft.com/software-download/windows11 — select "Download Windows 11 Disk Image (ISO) for x64 devices"

  2. VirtIO drivers ISO:

wget -P ~/Downloads/ https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

1.3 Create the VM

Use virt-manager (GUI) or the CLI script:

./scripts/host-create-vm.sh ~/Downloads/Win11.iso ~/Downloads/virtio-win.iso

virt-manager GUI settings (if doing it manually):

Setting Value
Chipset Q35
Firmware UEFI: /usr/share/OVMF/OVMF_CODE_4M.ms.fd (Secure Boot)
CPU Copy host configuration (host-passthrough), 4+ cores
RAM 4096 MiB minimum (8192 recommended)
Disk 40+ GiB, SATA or VirtIO bus
NIC e1000e or virtio
TPM Emulated, TIS model, version 2.0

Note: VirtIO disk/NIC are faster but require loading drivers during Windows install (browse VirtIO CDROM -> vioscsi\w11\amd64 when no disk is found). SATA + e1000e work out of the box with no extra drivers.

After install, install the virtio-win guest tools inside the VM for best performance (open the ISO in Explorer, run virtio-win-gt-x64.msi).

1.4 File Transfer Method

We use SSH + SCP to copy game files from the VM (see Parts 2 and 3). This is the most reliable method because Xbox App games are encrypted at rest and need special handling.

Alternative: virtiofs shared folder (optional, more setup):

  1. Install virtiofsd on the host: sudo apt install virtiofsd
  2. Shut down the VM, then in virt-manager:
    • Memory -> check "Enable shared memory"
    • Add Hardware -> Filesystem: Driver=virtiofs, Source=/home/<user>/vmshare, Target=vmshare
  3. Inside Windows: install WinFSP, reboot, start "VirtIO-FS Service" in services.msc
  4. The shared folder appears as a new drive letter

Note: Even with virtiofs, you still need Invoke-CommandInDesktopPackage to decrypt the game files — direct copies from the game directory will be encrypted/access-denied.


Part 2: Set Up SSH on Windows 11 VM

SSH is how we extract and copy game files from the VM. Run scripts/vm-setup-ssh.ps1 in an elevated PowerShell inside the VM, or follow these manual steps:

2.1 Enable OpenSSH Server

# Install OpenSSH Server (takes a few minutes to download)
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Start and auto-start
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

# Firewall rule
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server' `
    -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

2.2 Fix SSH Key Auth for Admin Users

By default, Windows OpenSSH uses a separate administrators_authorized_keys file for admin accounts, which breaks normal ~/.ssh/authorized_keys. This must be fixed:

Open C:\ProgramData\ssh\sshd_config in Notepad and comment out these two lines at the bottom:

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Then restart sshd:

Restart-Service sshd

2.3 Set Up SSH Keys

On the Ubuntu host:

# Generate a key (if you don't have one)
ssh-keygen -t ed25519

# Find the VM's IP
virsh domifaddr <vm-name>
# Or: virsh net-dhcp-leases default

The IP is typically 192.168.122.x with the default NAT network.

In the Windows VM (PowerShell):

mkdir C:\Users\<user>\.ssh -Force
# Paste your public key (~/.ssh/id_ed25519.pub contents) into:
notepad C:\Users\<user>\.ssh\authorized_keys

2.4 Test SSH Connection

ssh <windows-user>@192.168.122.xxx "echo connected"

Part 3: Extract Minecraft Files from the VM

3.1 Prerequisites

  • Minecraft Bedrock installed via Xbox App in the Windows 11 VM
  • Game launched at least once
  • SSH working (Part 2)

3.2 Why Extraction is Needed

Xbox App games are encrypted at rest. You cannot simply copy files from C:\XboxGames\ or C:\Program Files\WindowsApps\ — the exe will be unreadable and other files may be access-denied.

The workaround is Invoke-CommandInDesktopPackage, which runs a command inside the app's sandbox where files are transparently decrypted:

  1. robocopy all game files to a user-accessible staging directory
  2. copy the exe separately (robocopy gets the encrypted version; the exe must be copied inside the package context to get the decrypted version)

3.3 Automated Extraction

From the Ubuntu host (does everything via SSH):

./scripts/host-copy-from-vm.sh <windows-user> <vm-ip>

Or run vm-extract-minecraft.ps1 inside the VM (elevated PowerShell), then SCP the files:

# In the VM:
.\vm-extract-minecraft.ps1
# Then from Ubuntu:
scp -r <user>@<vm-ip>:C:/Users/<user>/minecraft/* ~/vmshare/minecraft-bedrock/

3.4 Verify the EXE is Decrypted

file ~/vmshare/minecraft-bedrock/Minecraft.Windows.exe
# Should say: PE32+ executable (GUI) x86-64, for MS Windows

# Or check the MZ header:
xxd -l 2 ~/vmshare/minecraft-bedrock/Minecraft.Windows.exe
# Should output: 00000000: 4d5a  MZ

If it says data instead of PE32+, the exe is still encrypted — re-run the decryption step.


Part 4: Build WineGDK and Launch on Ubuntu

4.1 Build Dependencies

sudo apt install -y build-essential gcc-mingw-w64-x86-64 flex bison \
  libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev \
  libxcomposite-dev libglu1-mesa-dev libfreetype-dev libosmesa6-dev \
  libgnutls28-dev libpulse-dev libudev-dev libdbus-1-dev libfontconfig-dev \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libvulkan-dev \
  libusb-1.0-0-dev libsdl2-dev libcups2-dev libkrb5-dev libsane-dev \
  libpcap-dev libunwind-dev gettext

4.2 Clone and Build WineGDK

git clone https://github.com/Weather-OS/WineGDK.git ~/Projects/WineGDK
cd ~/Projects/WineGDK

# Configure with an install prefix (64-bit only is sufficient for Bedrock)
./configure --prefix=$HOME/Projects/WineGDK/install --enable-win64

# Build (uses all cores)
make -j$(nproc)

# Install to the prefix directory
make install

The build takes 10-30 minutes depending on hardware. The resulting wine binary will be at ~/Projects/WineGDK/install/bin/wine.

Alternative: clang-23 build (matches ChristopherHX's configuration):

cd ~/Projects/WineGDK
CC=clang-23 ./configure --prefix=$HOME/Projects/WineGDK/install-clang23 --enable-win64
make -j$(nproc)
make install

Both clang-20 and clang-23 builds produce a working game. To use the clang-23 build, set WINEGDK_DIR=~/Projects/WineGDK/install-clang23 when running the launch scripts.

4.3 Run the Setup Script

./scripts/setup.sh

This will:

  1. Replace XCurl.dll with the mingw curl build (for network functionality)
  2. Copy XCurl dependency DLLs to the game directory
  3. Download SSL certificates (for HTTPS)
  4. Copy xgameruntime DLLs to the game directory
  5. Create the Wine prefix and install GameInputRedist
  6. Build and install the midlproxystub DLL (ObjectStublessClient fix)
  7. Patch graphics options to avoid deferred renderer crash

Known issue: msiexec hangs on GameInputRedist.msi

Step 5 uses wine msiexec to install GameInputRedist, but msiexec hangs indefinitely under WineGDK. The workaround is to use msiextract (from the msitools package) instead:

sudo apt install msitools
msiextract -C "$PREFIX_DIR/drive_c" "$GAME_DIR/Installers/GameInputRedist.msi"

The setup.sh script does not yet handle this automatically -- if it hangs at the GameInputRedist step, kill it (Ctrl+C), run the msiextract command above, and re-run setup.sh (it will skip already-completed steps or re-do them harmlessly).

4.4 Launch

./scripts/launch.sh

This runs wine from your WineGDK build directly — no Proton, no Steam Runtime, no Lutris.

Environment variables (all have sensible defaults in the script):

Variable Default Purpose
WINEGDK_DIR ~/Projects/WineGDK/install Path to WineGDK install prefix
GAME_DIR ~/Games/minecraft-bedrock/game Path to extracted game files
WINEPREFIX ~/Games/minecraft-bedrock/prefix Wine prefix for the game

Example with custom paths:

WINEGDK_DIR=~/Projects/WineGDK/install GAME_DIR=~/vmshare/minecraft-bedrock ./scripts/launch.sh

4.5 Debug Launch

To capture Wine debug output for troubleshooting:

./scripts/debug-launch.sh           # Standard debug channels
./scripts/debug-launch.sh --verbose # All warnings + SEH + module loading

Logs are saved to ~/minecraft-debug-<timestamp>.log.


Uninstalling

./scripts/uninstall.sh

This removes the game directory, Wine prefix, and related configs. Source game files in ~/vmshare/ are kept as a backup — delete them manually if no longer needed. Your WineGDK build at ~/Projects/WineGDK/ is not touched.


Updating

One command (recommended)

When a new Bedrock version ships, run the orchestrator from katana (your workstation):

./scripts/update-bedrock.sh

It drives the whole update end-to-end and never declares success on a failed smoke check:

  1. VM Store update — triggers and waits for the Microsoft Store to pull the new build inside the Windows 11 VM (headless), then reads the new version.
  2. Extract — decrypts and copies the updated game files out of the VM.
  3. Host setup — re-runs setup.sh (XCurl, certs, stub DLLs, prefix) against the new build.
  4. Headless smoke check — launches the game on the game host for ~60s to confirm it actually starts. A failed smoke halts the run — nothing is pushed and the previous build's game.bak rollback stays intact.
  5. Delta-push to katana — backs up katana's current build, then delta-rsyncs the verified build over (resume-retry on flaky links), and re-verifies the binary (PE32+, size match, manifest version).
  6. Update the BDS servers — updates your self-hosted terra BDS servers to the matching protocol release (Bedrock requires client↔server version match), preserving worlds and configs, and verifies each comes back up.

Then launch and join a server to confirm the protocol match:

./scripts/play-bedrock.sh

Configure topology in scripts/update-targets.conf — copy the template and fill in your real values:

cp scripts/update-targets.conf.example scripts/update-targets.conf

That file is gitignored (it holds private Tailscale IPs, the VM domain name, and your BDS server list), so real addresses are never committed.

Flags:

Flag Effect
--client-only (or --skip-servers) Update only the client (game + katana); skip the terra BDS servers
--skip-vm Re-extract the current VM build; skip the Store update
--dry-run Print the plan and run read-only probes only; touch nothing
--yes Don't pause for interactive confirmation

Under the hood the orchestrator calls the building blocks directly — scripts/game-update.sh (the game-side VM-update → extract → setup → smoke sequencer, which in turn uses host-copy-from-vm.sh and setup.sh), scripts/vm-update-minecraft.ps1 (the in-VM headless Store update), and scripts/update-bds-servers.sh (the worlds-preserving terra BDS updater). You can run any of them standalone.

Deprecated: the old GDK-Proton scripts/update.sh is retired — it targeted dead paths and now just prints a notice pointing here and exits.

To update WineGDK itself, rebuild from source:

cd ~/Projects/WineGDK && git pull && make -j$(nproc) && make install

WineGDK Fixes and Stubs

WineGDK is a Wine fork that includes native support for several Windows APIs that Minecraft Bedrock depends on. The following are handled natively by WineGDK (no patches needed):

  • GameInput — builtin gameinput.dll and gameinputredist.dll stub the GameInput API safely (Microsoft's native redistributable crashes under Wine due to missing HID/winebus.sys support)
  • xgameruntimexgameruntime.dll and related GDK runtime DLLs are built into WineGDK
  • DataTransferManagerDataTransferManager.GetForWindow() returns a stub instead of E_NOTIMPL
  • CoreApplication WinRT activationRoGetActivationFactory("Windows.ApplicationModel.Core.CoreApplication") is supported
  • WNF stubs in ntdll.dllNtQueryWnfStateData, RtlSubscribeWnfStateChangeNotification, and related Windows Notification Facility functions are stubbed
  • NtQueryLicenseValue — returns STATUS_OBJECT_NAME_NOT_FOUND correctly
  • RtlGetDeviceFamilyInfoEnum — form factor value is correct
  • kernelbase.dll package APIsGetCurrentPackagePath2, PackageFamilyNameFromFullName, PackageNameAndPublisherIdFromFamilyName are stubbed

Still Required (applied by setup scripts)

  1. XCurl.dll — Minecraft ships a proprietary XCurl that depends on Xbox Live services. We replace it with a mingw-built libcurl so networking (skin downloads, marketplace, etc.) works. The replacement depends on ~13 DLLs (libbrotlidec, libssl, libcrypto, etc.) that must be in the game directory — setup.sh handles this.

  2. SSL certificates — The mingw curl needs a CA bundle. Downloaded from curl.se/ca by setup.sh.

  3. GameConfigHelper.dll — Minecraft's GameLaunchHelper.exe imports OpenGameConfigForPackage from this DLL, which does not exist in Wine. The MinGW stub in stubs/gameconfighelper/ returns S_OK. Deployed by setup.sh.

  4. midlproxystub DLL — Wine's PE-only mode has a bug resolving combase.dll forwarders to rpcrt4.dll for ObjectStublessClient3 through ObjectStublessClient32. The stub DLL in stubs/midlproxystub/ provides direct implementations. Built and deployed by setup.sh.

Environment Variables (set automatically by launch scripts)

Variable Value Purpose
WINEPREFIX ~/Games/minecraft-bedrock/prefix Wine prefix for the game
WINEDLLOVERRIDES GameInputRedist=b Force Wine's builtin GameInput instead of the native MSI redistributable, which crashes

Known Limitations

  • No Microsoft account login — XUser is not implemented in WineGDK
  • No Realms or featured servers — requires Microsoft auth
  • Menu mouse-clicks on 26.3x — the custom dwmapi click-hook proxy page-faults under 26.3x's reworked pointer-input API, so the launcher uses Wine's builtin dwmapi (dwmapi=b). The game renders and plays normally; menu clicks may need the ~5s gate wait (or use keyboard/gamepad). In-world mouse-look is unaffected
  • Multiplayer — LAN play works natively; for external servers, use ProxyPass to proxy them as LAN
  • File picker crashes — import worlds manually by extracting .mcworld files into com.mojang/minecraftWorlds/
  • Wine prefix corruption — crashes can corrupt the prefix; back up saves regularly
  • Deferred rendering crash — the game's PBR/RTX renderer (graphics_mode:2) has a race condition under Wine; launch scripts force Classic mode (graphics_mode:0) automatically
  • msiexec hangswine msiexec hangs when installing GameInputRedist.msi; use msiextract instead (see setup instructions above)
  • xgameruntime.dll.threading — this native Microsoft DLL must come from the Windows VM extraction; it is not built by WineGDK
  • Work in progress — WineGDK is under active development; some APIs may still be incomplete

Troubleshooting

wine not found

Ensure WineGDK is built and installed:

ls ~/Projects/WineGDK/install/bin/wine

If missing, rebuild: cd ~/Projects/WineGDK && make -j$(nproc) && make install

WineGDK build fails

Common issues:

  • Missing headers: install the build dependencies from 4.1
  • Vulkan not found: sudo apt install libvulkan-dev
  • MinGW not found: sudo apt install gcc-mingw-w64-x86-64 (needed for PE DLL builds and stub DLLs)

Game crashes immediately

  1. Run scripts/debug-launch.sh and check the log for err:module:import_dll lines — these indicate missing DLLs
  2. Ensure XCurl.dll and its dependencies are in the game directory
  3. Check that GameConfigHelper.dll and the midlproxystub DLL are installed

"Missing a required component" error

  1. Verify xgameruntime.dll is in the game directory (copied from the WineGDK build by setup.sh)
  2. Verify xgameruntime.dll.threading is in the game directory -- this is a native Microsoft DLL that must come from the Windows VM game extraction, not from WineGDK. If missing, re-run host-copy-from-vm.sh
  3. Check that WINEPREFIX points to a valid prefix

Black screen (no rendering)

If the game launches but shows only a black screen, the most likely cause is the wrong game binary version. Verify you have the correct version:

strings ~/Games/minecraft-bedrock/game/Minecraft.Windows.exe | grep -i "1\.26\."

Re-extract from the VM with host-copy-from-vm.sh if the version does not match what is installed in the Xbox App. The VM file copy can fail silently, leaving an older binary in place.

setup.sh hangs at GameInputRedist

wine msiexec hangs under WineGDK. Kill the script (Ctrl+C) and install manually:

sudo apt install msitools
msiextract -C ~/Games/minecraft-bedrock/prefix/drive_c ~/Games/minecraft-bedrock/game/Installers/GameInputRedist.msi

Then re-run setup.sh to complete the remaining steps.

Encrypted EXE

Re-run Invoke-CommandInDesktopPackage on the Windows VM — see Part 3

VM IP address not found

virsh domifaddr <vm-name>
# Or check DHCP leases:
virsh net-dhcp-leases default

Debug tools

  • Run scripts/debug-launch.sh to capture Wine debug output
  • Run scripts/collect-logs.sh for a full diagnostic report

References

Legal

This project is licensed under the GNU General Public License v3.0.

Minecraft is a registered trademark of Mojang Studios / Microsoft Corporation. This project is not affiliated with, endorsed by, or associated with Mojang or Microsoft. You must own a legitimate copy of Minecraft Bedrock Edition to use this guide.

Third-party components downloaded at runtime by the setup scripts:

About

Run Minecraft Bedrock Edition on Ubuntu Linux via Lutris + GDK-Proton

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages