Code Monkey home page Code Monkey logo

winegui's Introduction

WineGUI

At last, a user-interface friendly Wine (A compatibility layer capable of running Windows applications under Linux) Manager.

Pipeline Telegram Matrix Release

WineGUI

Download

You can find the latest version on the Releases page of GitLab.

Download the WineGUI package you require for your Linux distribution (we provide .deb, .rpm and .tar.gz files). Typically you should use .deb file for Ubuntu and Linux Mint distros.

Install the package and you are ready to go! WineGUI should be listed in your menu.

Features

  • Graphical user-interface on top of Wine
  • Creating a new machine using an easy step-by-step wizard
  • Application list per machine (with search feature and refresh button)
  • Editing, removing and cloning Windows machines in a breeze
  • Configure window installing additional software with just a single click (like installing DirectX)
  • One-button click to run a program, open the C: drive, simulate a reboot or kill all processes

GitHub Star History

Star History Chart


Development

WineGUI is created by using GTK3 toolkit (Gtkmm C++-interface) and C++ code.

Development has been done in VSCcodium, using the following extensions:

  • C/C++
  • CMake
  • CMake Tools
  • GitLab Workflow

Documentation

See latest WineGUI Developer Docs.

Requirements

Dependencies should be met before build:

  • gcc/g++ (advised: v8 or later)
  • cmake (advised: v3.10 or later)
  • ninja-build
  • libgtkmm-3.0-dev (implicit dependency with libgtk-3-dev)
  • libjson-glib-dev
  • pkg-config

Optionally:

  • Ccache (optional, but much recommended)
  • doxygen
  • graphviz
  • rpm
  • clang-format (v14)
  • cppcheck (v2.10 or higher)

Hint: You could execute ./scripts/deps.sh script for Debian based systems (incl. Ubuntu and Linux Mint) in order to get all the dependencies installed automatically.

Build

Run script: ./scripts/build.sh

Or execute:

# Prepare
cmake -GNinja -B build
# Build WineGUI
cmake --build ./build

Building from source

Building from the source code archive files (eg. tar.gz) is just as easy, however be sure to download the specially prepared WineGUI-Source-*.tar.gz archive file (instead of the GitLab generated source archives).
This WineGUI source archive contains the version.txt meaning the tarball is aware of the project version during the build.

There are various CMake options/variables flags you can set. Use cmake -LAH to see all options. For example (release build with /usr install prefix):

cmake -GNinja -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr

Then execute the build using: cmake --build ./build as shown earlier.

Run

Execute: ninja -C build run

Or execute the binary directly:

./build/bin/winegui

Rebuild

Configuring the ninja build system via CMake is often only needed once (cmake -GNinja -B build), after that just execute:

cmake --build ./build

Or just: ninja within the build directory.
Clean the build via: ninja clean.

Hint: Run ninja help for all available targets.

Debug

You can use the helper script: ./scripts/build_debug.sh

Start debugging in GDB (GNU Debugger):

cd build_debug
gdb -ex=run bin/winegui

Memory check

First build the (Linux) target including debug symbols. Binary should be present in the build/bin directory.

Next, check for memory leaks using valgrind by executing:

./scripts/valgrind.sh

Or to generate a memory usage plot in massif format, execute:

./scripts/valgrind_plot.sh

Production

For production build and DEB file package, you can run: ./scripts/build_prod.sh

Or use:

cmake -GNinja -DCMAKE_INSTALL_PREFIX:PATH=/usr -DPACKAGE -DCMAKE_BUILD_TYPE=Release -B build_prod
cmake --build ./build_prod --config Release
cd build_prod
cpack -C Release -G "DEB"

Build Doxygen

Or build with generated doxygen files locally:

cmake -GNinja -DDOXYGEN=ON -B build_docs
cmake --build ./build_docs --target Doxygen

Releasing

Before you can make a new release, align the version number in WineGUI with the version you want to release. Then create a new tagged version in Gitlab with the same version name.

Note: Only a release tag on the main branch will trigger the publish task.

Automated Clang Format

We use our own Clang LLVM C++ Programming Style Format, using clang-format command.

To automatically comply to our style format execute following script (inplace edits are performed for you):

./scripts/fix_format.sh

Or depend on the docker image instead of your local clang-format:

./scripts/fix_format.sh docker

Check only for errors, run: ./scripts/check_format.sh (same idea with Docker, run: ./scripts/check_format.sh docker to not depend on your local clang-format tool)

Guidelines

First we try to use the Google C++ Style Guide as basis.

Next, we also tend to follow the popular C++ Core Guidelines as much as possible.

CI/CD

For continuous integration & delivery we use our Dockerfile to create a Docker image. This image (danger89/gtk3-docker-cmake-ninja) is hosted on Dockerhub.

A helper script can be used: ./scripts/build_and_upload_image.sh

winegui's People

Contributors

melroy89 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

winegui's Issues

scripts/build_prod.sh requires root permission?

I want to build the deb package with scripts/build_prod.sh and got this

      |         ~~~~~~~~~~~^~~~~~
/home/user/WineGUI/src/helper.cc: In static member function ‘static std::string Helper::exec_error_message(const char*)’:
/home/user/WineGUI/src/helper.cc:1541:95: note: returned from ‘FILE* popen(const char*, const char*)’
 1541 |   std::unique_ptr<FILE, decltype(&close_exec_stream)> pipe(popen(cmd, "r"), &close_exec_stream);
      |                                                                                               ^
[20/20] Linking CXX executable bin/winegui
INFO: Building packages...
CPack: Create package using TGZ
CPack: Install projects
CPack: - Install project: WineGUI []
CMake Error at /home/user/WineGUI/build_prod/cmake_install.cmake:54 (file):
  file INSTALL cannot copy file
  "/home/user/WineGUI/src/schema/org.melroy.winegui.gschema.xml" to
  "/usr/share/glib-2.0/schemas/org.melroy.winegui.gschema.xml": Permission
  denied.


Failed to create file “/usr/share/glib-2.0/schemas/gschemas.compiled.E5ME61”: Permission denied
CPack Error: Error when generating package: WineGUI

(Feature Request) Ability to add programs in the right-side Application panel

First of all I would like to thank everyone who has contributed to this project for all their dedication and hardwork.

WineGUI is a great piece of software, however, the only QoL feature I feel it is missing is the ability to add/remove Wine .desktop entries and have the ability to bookmark/pin/create a shortcut to a .bat or .exe file to the Applications menu on the right side.

As you can see in the picture attached below, i have the original GTA - VC installed, I have copied over reVC (source port)
The reVC.exe executable runs and works flawlessly but everytime I want to use it I need to manually start Wine Explorer and navigate to the install directory.

I am unable to find any user-friendly way to create .desktop entries of the reVC.exe to my Applications menu (I know I can manually create .desktop entries)

Thus, I think It would be a massive QoL addition for WineGUI to include the features mentioned above. (The ability to pin executables to the right-hand side Applications menu would suffice)

Screenshot from 2023-01-29 19-03-15

[suggestion] desktop shortcuts and more

Not sure if this is the right place for suggestion. First, this is a really great app. I struggled to manually install components in so many prefixes, especially if they were 32bit because I could not get winetricks (or figure out how) to install to a 32bit prefix.

A few things that would be nice would be shortcut creation so we have a .desktop that just loads our game to the menu (.local/share/applications) so we don't have to open the app. I know i can create this myself, but its ultimately something anyone using the app would eventually have to do that could be automated.

Other things would be a way of getting specific versions of wine/wine staging like Playonlinux does. That way I can modify them for older software/games and get things running.

It would also be nice to have access to all the settings that playonlinux where you can easily toggle things like CSMT or GLSL etc.

Thanks again.

Provide a flatpak package for Linux

One of the biggest advantages in contrast with snaps, is that flatpaks are sandboxed, and therefore this results in a more secure and private experience since it is harder for some kind of malware to attack the system, or for said application to retrieve user information without them knowing it. Another good point is that everything that's uploaded to Flathub (Flatpak's team centralized repository). Just like snaps, Flatpaks are compatible with every distribution that supports it, so you don't have to be uploading different releases, and also is becoming a more standardized option for non-based and Ubuntu based distributions alike, being adopted already by twenty five flavours of Linux, and some of them come with flatpak preinstalled out of the box (CentOS, ElementaryOS, EndlessOS, Fedora, Linux Mint, PureOS and ZorinOS).

More information:

https://flathub.org/
https://flatpak.org/
https://flatpak.org/setup/
https://docs.flatpak.org/en/latest/

[v2.4.1] [AUR] Build error "ignoring attributes on template argument"

The following line gives an error when building from AUR: https://github.com/winegui/WineGUI/blame/061b5942268271ea5fddeb881ade2bc291441c2a/src/helper.cc#L1623

The error itself:

[19/21] Building CXX object CMakeFiles/winegui.dir/src/helper.cc.o
FAILED: CMakeFiles/winegui.dir/src/helper.cc.o 
/usr/bin/c++  -I/usr/include/gtkmm-3.0 -I/usr/lib/gtkmm-3.0/include -I/usr/include/atkmm-1.6 -I/usr/lib/atkmm-1.6/include -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/gdkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/giomm-2.4/include -I/usr/include/gtk-3.0 -I/usr/include/cairo -I/usr/include/atk-1.0 -I/usr/include/pangomm-1.4 -I/usr/lib/pangomm-1.4/include -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/cairomm-1.0 -I/usr/lib/cairomm-1.0/include -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cloudproviders -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/pixman-1 -I/usr/include/fribidi -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/sysprof-6 -I/home/michiel/.cache/yay/winegui/src/winegui-v2.4.1/include -I/home/michiel/.cache/yay/winegui/src/winegui-v2.4.1/build_prod -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto -Wall -Wextra -Werror -O3 -DNDEBUG -O3 -DNDEBUG -std=c++20 -pthread -MD -MT CMakeFiles/winegui.dir/src/helper.cc.o -MF CMakeFiles/winegui.dir/src/helper.cc.o.d -o CMakeFiles/winegui.dir/src/helper.cc.o -c /home/michiel/.cache/yay/winegui/src/winegui-v2.4.1/src/helper.cc
/home/michiel/.cache/yay/winegui/src/winegui-v2.4.1/src/helper.cc: In static member function ‘static std::string Helper::exec(const char*)’:
/home/michiel/.cache/yay/winegui/src/winegui-v2.4.1/src/helper.cc:1623:42: error: ignoring attributes on template argument ‘int (*)(FILE*)’ [-Werror=ignored-attributes]
 1623 |   std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), &pclose);
      |                                          ^
cc1plus: all warnings being treated as errors

Can't really find a reason why it ran into this as this specific function hasn't been changed in forever it seems. Still, not sure what to do about it to fix it locally. Am I missing a library or package?

I'm currently still running 2.1.0 as I was waiting for a new AUR release.

Config dir location

The WineGUI config dir is hardcoded to ~/.winegui. But according to XDG Base Directory Specification, it should be $XDG_CONFIG_HOME/winegui, i.e. ~/.config/winegui by default.

It would be nice to change WineGUI config location respectively, so that the home dir is bloated less. :)

It seams the change can be as simple as:

diff --git a/src/general_config_file.cc b/src/general_config_file.cc
index 2154c4a..7e55a03 100644
--- a/src/general_config_file.cc
+++ b/src/general_config_file.cc
@@ -46,7 +46,7 @@ bool GeneralConfigFile::write_config_file(const GeneralConfigData& general_confi
 {
   bool success = false;
   Glib::KeyFile keyfile;
-  std::vector<std::string> config_dirs{Glib::get_home_dir(), ".winegui"};
+  std::vector<std::string> config_dirs{Glib::get_user_config_dir(), "winegui"};
   std::string config_location = Glib::build_path(G_DIR_SEPARATOR_S, config_dirs);
   std::string file_path = Glib::build_filename(config_location, "config.ini");
   try
diff --git a/src/helper.cc b/src/helper.cc
index f091c40..2d26c29 100644
--- a/src/helper.cc
+++ b/src/helper.cc
@@ -42,7 +42,7 @@
 #include <tuple>
 #include <unistd.h>
 
-std::vector<std::string> wineGuiDirs{Glib::get_home_dir(), ".winegui"}; /*!< WineGui config/storage directory path */
+std::vector<std::string> wineGuiDirs{Glib::get_user_config_dir(), "winegui"}; /*!< WineGui config/storage directory path */
 static string WineGuiDir = Glib::build_path(G_DIR_SEPARATOR_S, wineGuiDirs);
 
 std::vector<std::string> defaultWineDir{Glib::get_home_dir(), ".wine"}; /*!< Default Wine bottle location */

(Feature Request) Command Line Interface

My header may be completely wrong for what I am thinking so I will describe it here.
What I am looking for is a way to write a shell script that when ran will open up a particular program in a particular 'container' inside winegui.
I set up winegui with a game server application designed for windows and it works perfectly. The problem is that if I attempt to open the server.exe without going through winegui it will attempt to run in regular wine which doesn't work for some reason.

could not determ Windows OS version.

Creating a Windows10 (32 and 64)bit didn't work
rfrf
nnn
rfrfff

mandi@rez-latitude:~$ '/home/mandi/WineGui-master/build/bin/winegui' 
Catched Failed to open file “”: No such file or directory
0034:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
0034:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
0064:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
0064:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
006c:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
006c:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
INTEL-MESA: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

002c:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
002c:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
00f4:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
00f4:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
00fc:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.
00fc:fixme:font:get_name_record_codepage encoding 20 not handled, platform 1.

Platform: Ubuntu 20.04
wine version: 6.0

Registry/windows version errors/bugs

When I try to create a new machine in WineGUI, it gives me 2 errors: 'Could not open registry file!' and 'Something went wrong while setting another Windows version. Could not set Windows OS version'. I'm trying to create a 64-bit Windows 8.1 WINE prefix with a 1366x768 virtual desktop set. Please fix this!

[Bug] winetricks not work

Hi,

When i create a machine, winetricks is not work because no permission executable.

Fix: sudo chmod +x $HOME/.winegui/winetricks

Winegui 1.5.2 on Linux Mint 20.1: Review

Review 11 June 2021
New install LM 20.1, wineHQ install of wine 6.0 (latest debian package).
New (Create new prefix): --- OK
Run Program: Added app = WinEdt 10.3, latest version from WinEdt.org --- OK
WinEdt 10.3 runs. It is known to run as Gold under Linux after some settings changes, which are not minor.
Required: Linux TexLive, Linux xchm , Windows SumatraPDF, Linux shell scripts.

Settings:

Fallback Tools: --- OK
Supporting Tools: --- OK
Additional Packages: --- OK
No DirectX installs.
Installed .NET 4.0 because WinEdt had mono and gecko issues when launching
hh.exe to view help file WinEdt.chm. Floating point overflow in xul.dll killed the app.
After starting WinEdt anew, trying to view WinEdt.chm had the same error. Work-around
is a Linux script to launch Linux xchm instead of hh.exe.

Open C: Drive: FAIL, opened Linux xed
Edit: FAIL, opened an empty window with title "Edit Machine - ..."
Reboot: No message, no change to running app, don't know what it did.
Update Config: Seemed to work. Guess: Mono and Gecko were re-installed. However, no change to .NET settings in winecfg.
Kill Processes: OK. Unexpected was a FAIL when Settings window was open.
Help button: OK. I expected to find here the URL of the GitHub project.

Can't find a way to add selected programs in side panel

I have Wine installed and a game in its Program Files folder.

Today I installed WineGUI and while I can click on "Run a Program" in the menu bar and select the program from the original Wine folder (not the WineGUI prefix), it doesn't save on the side panel like the gif demonstration in here. I have also tried completely copying the game folder from the original Wine folder to the one WineGUI uses, but it's still not there.

So,

  • Can I save a program in the side bar (like the gif showing Age of Empire)?
  • Can I change the default folder from the WineGUI prefix to the original Wine folder (I tried doing so, and I started getting errors like "couldn't find c drive")?

Thank you.

WINE details of a prefix

The main panel of a WineGUI window shows some details on the selected wineprefix. For a 64-bit prefix there seems to be an inconsistency:

Windows: Windows 7 (64-bit)
[...]
Wine Version: 8.9 (32-bit)

I suppose the 'Wine version' should show the WINEARCH, which is '64-bit' in this case.

Create specific bottle for specific exe, extract icon, extract exe product name

Hi WineGui does not keep/remember an program. It would be nice if we can select an exe and create bottle/prefix for that exe using icon from that exe and name too.

I've created one such program using zenity. But yesterday I discovered your app. Yours is indeed good looking.

Please have a look
https://github.com/fastrizwaan/WineZGUI

We can use
icotuils to extract icon from exe file https://github.com/fastrizwaan/WineZGUI/blob/c7f400c70840f5c7f48120a9cbfb70681e1fa9eb/bin/winezgui-create-prefix#L49-L65
exiftool to grep product name, https://github.com/fastrizwaan/WineZGUI/blob/c7f400c70840f5c7f48120a9cbfb70681e1fa9eb/bin/winezgui-create-prefix#L82

You can test this and it uses flathub's flatpak wine 7.0 (more compatible and stable than distro specific staging wine)
fastrizwaan/flatpak-wine#12 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.