Linux/wine: Difference between revisions

From Omnia
Jump to navigation Jump to search
No edit summary
Line 146: Line 146:
</pre>
</pre>


Probably benign, but if you want, you can add the user to the "video" and "render" group, and that should fix both of these.
Probably benign, but if you want, you can add the user to the "video" and "render" group, and that should fix both of these. (it did for me)
<pre>
<pre>
$ grep steam /etc/group
$ grep steam /etc/group
Line 153: Line 153:
steam:x:1005:
steam:x:1005:
</pre>
</pre>
=== explorer process failed to start ===
Error in wine logs:
<pre>
00f0:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
00f0:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
00f0:err:systray:initialize_systray Could not create tray window
</pre>
I ignored these


== keywords ==
== keywords ==

Revision as of 05:47, 25 September 2026

Wine

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install --install-recommends winehq-staging

Rebuild Wine Prefix (~/.wine)

wineboot -u

Test new wine prefix:

WINEPREFIX=~/my_new_prefix wine your_executable.exe

Test wine with executable:

xvfb-run -a wine your_executable.exe

Reconfig your wine prfix:

rm -rf .wine
winecfg
# or if headless...
xvfg-run wincfg

Debug Wine

If you are still stuck, you can generate a cleaner log file to parse by running your app with standard Wine debugging output:

WINEDEBUG=-all,err+all wine your_application.exe

Clean Prefix

# Remove the broken configuration directory
rm -rf ~/.wine
# Initialize a clean, default 64-bit prefix
wineboot --init

Wine Console Test

winetest.cpp ::

#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>

int main() {
    std::cout << "========================================\n";
    std::cout << "       Wine Windows Console Test        \n";
    std::cout << "========================================\n\n";

    // 1. Test Windows API Version Detection
    std::cout << "[1] Checking Windows API Memory Status...\n";
    MEMORYSTATUSEX memInfo;
    memInfo.dwLength = sizeof(MEMORYSTATUSEX);
    if (GlobalMemoryStatusEx(&memInfo)) {
        std::cout << "    -> Success! Total Physical Memory: " 
                  << memInfo.ullTotalPhys / (1024 * 1024) << " MB\n\n";
    } else {
        std::cout << "    -> Failed to retrieve memory status.\n\n";
    }

    // 2. Test Environment Variables
    std::cout << "[2] Checking Environment Variables...\n";
    char username[256];
    DWORD username_len = sizeof(username);
    if (GetUserNameA(username, &username_len)) {
        std::cout << "    -> Current User: " << username << "\n\n";
    } else {
        std::cout << "    -> Failed to get username.\n\n";
    }

    // 3. Test File System Write/Read under Wine
    std::cout << "[3] Testing File System I/O...\n";
    std::string testFilename = "wine_test_file.txt";
    
    std::ofstream outFile(testFilename);
    if (outFile.is_open()) {
        outFile << "Wine compatibility test successful!";
        outFile.close();
        std::cout << "    -> Successfully wrote to " << testFilename << "\n";
        
        std::ifstream inFile(testFilename);
        std::string fileContent;
        if (std::getline(inFile, fileContent)) {
            std::cout << "    -> Successfully read: \"" << fileContent << "\"\n";
        }
        inFile.close();
        
        // Clean up
        DeleteFileA(testFilename.c_str());
    } else {
        std::cout << "    -> Failed file I/O test.\n";
    }
    std::cout << "\n";

    // 4. Test Registry Read (Optional but good for Wine)
    std::cout << "[4] Testing Registry Access (HKLM)...\n";
    HKEY hKey;
    if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
        char prodName[256];
        DWORD bufferSize = sizeof(prodName);
        if (RegQueryValueExA(hKey, "ProductName", NULL, NULL, (LPBYTE)prodName, &bufferSize) == ERROR_SUCCESS) {
            std::cout << "    -> Reported OS: " << prodName << "\n\n";
        } else {
            std::cout << "    -> Opened key, but failed to read ProductName.\n\n";
        }
        RegCloseKey(hKey);
    } else {
        std::cout << "    -> Failed to open registry key.\n\n";
    }

    std::cout << "Tests completed. Press ENTER to exit.";
    std::cin.get();
    return 0;
}


On Linux cross compile with:

x86_64-w64-mingw32-g++ -o winetest.exe winetest.cpp -static
# apt install g++-mingw-w64-x86-64-posix  # version 13.2.0-6ubuntu1+26.1, or
# apt install g++-mingw-w64-x86-64-win32  # version 13.2.0-6ubuntu1+26.1


On Windows compile with:

cl /EHsc winetest.cpp

Rune in wine:

wine winetest.exe
xvfb-run -a wine winetest.exe

Issues

/dev/dri permission issue

Errors in wine log:

libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/card1: Permission denied
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/card1: Permission denied

Probably benign, but if you want, you can add the user to the "video" and "render" group, and that should fix both of these. (it did for me)

$ grep steam /etc/group
video:x:44:steam
render:x:109:steam
steam:x:1005:

explorer process failed to start

Error in wine logs:

00f0:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
00f0:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
00f0:err:systray:initialize_systray Could not create tray window

I ignored these

keywords