weekly

GitHub C Trending

The latest build: 2024-07-19Source of data: GitHubTrendingRSS

Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64 Linux devices


Official logo

Linux Userspace x86_64 Emulator with a twist

View changelog | | | Report an error

buildstarsforkscontributorsprsissues


Box64 lets you run x86_64 Linux programs (such as games) on non-x86_64 Linux systems, like ARM (host system needs to be 64-bit little-endian).

You can find many Box64 videos on the MicroLinux, Pi Labs or The Byteman YouTube channels.

Since Box64 uses the native versions of some "system" libraries, like libc, libm, SDL, and OpenGL, it's easy to integrate and use with most applications, and performance can be surprisingly high in many cases. Take a look at thoses bench analysis for an example here.

Box64 integrates with DynaRec (dynamic recompiler) for the ARM64 and RV64 platform, providing a speed boost between 5 to 10 times faster than using only the interpreter. Some high level information on how DynaRec works can be found here.

Some x64 internal opcodes use parts of "Realmode X86 Emulator Library", see x64primop.c for copyright details

Logo and Icon made by @grayduck, thanks!


Usage

There are a few environment variables to control the behaviour of Box64.

See here for all the environment variables and what they do.

Note: Box64's Dynarec uses a mechanism with Memory Protection and a SegFault signal handler to handle JIT code. In simpler terms, if you want to use GDB to debug a running program that use JIT'd code (like mono/Unity3D), you will still have many "normal" segfaults triggering. It is suggested to use something like handle SIGSEGV nostop in GDB to not stop at each segfault, and maybe put a breakpoint inside my_memprotectionhandler in signals.c if you want to trap SegFaults.


Compiling/Installation

Compilation instructions can be found here
Instructions for installing Wine for Box64 can be found here


Version history/Change log

The change log is available here.


Notes about 32-bit platforms

Because Box64 works by directly translating function calls from x86_64 to host system, the host system (the one Box64 is running on) needs to have 64-bit libraries. Box64 doesn't include any 64-bit <-> 32-bit translation.

So understand that box64 will only run 64-bit linux binaries. For 32-bit binaries, you need box86 (with all the multiarch or proot trickery it implies on a 64-bit OS). Note that many installer (mojo setup based) will fall back to "x86" when detecting ARM64 OS, and so will try to use box86 for the setup, even if an x86_64 version exist. You can hack your way around with a fake "uname" that return "x86_64" when the argument is "-m"

An alternative solution is to use Wine with new WoW64, but you will be limited to 32bits windows apps and games.


Notes about Box64 configuration

Box64 now have configurations files. There are 2 files loaded. /etc/box64.box64rc and ~/.box64rc. Both files have the same syntax, and is basicaly an ini files. Section in square brakets define the process name, and the rest is the env. var. to set. Looke at Usage for detail on what parameters can be put. Box64 comes with a default file that should be installed for better stability. The file in in system/box64.box64rc and should be installed to /etc/box64.box64rc If, for some reason, you don't want to install that file here, at least copy it to ~/.box64rc or some game may not function correctly. Note that the priority is: ~/.box64rc > /etc/box64.box64rc > command line So, your settings in ~/.box64rc may override the setting from your command line...


Notes about Unity game emulation

Running Unity games should just work, but you should also note that many Unity3D games require OpenGL 3+ which can be tricky to provide on ARM SBC (single-board computers). Also many newer Unity3D (like KSP) games use the BC7 compressed textures, which is not supported on many ARM integrated GPU. Hint: on Pi4 and Pi5 use MESA_GL_VERSION_OVERRIDE=3.2, with BOX64_DYNAREC_STRONGMEM=1 to prevent freezes and enable strong memory mode, and use Panfrost PAN_MESA_DEBUG=gl3 to use higher profile if the game starts then quits before showing anything.


Notes about GTK programs

GTK libraries are now wrapped on box64, both gtk2 and gtk3.


Notes about Steam

Note that Steam is a hybrid 32-bit / 64-bit. You NEED box86 to run Steam, as the client app is a 32-bit binary. It also uses a 64-bit local server binaries, and that steamwebhelper process is now mandatory, even on the "small mode". And that process will eat lots of memory. So machine with less the 6Gb of RAM will need a swapfile to use Steam.


Notes about Wine

Wine64 is supported on box64. Proton too. Be aware that 64-bit Wine also includes 32-bit components, to be able to run 32-bit Windows programs. The 32-bit apps will need box86 and will not run without it. On a system where both box64 and box86 are present and working, a wine 64-bit setup can run both 32-bit and 64-bit Windows programs (just use wine and wine64 respectively). Note that the new 32-bit PE in 64-bit processes that the Wine team is currently implementing in Wine 7.+ is now supported. It's called "new WoW64" and it's working fine on box64, allowing the use of 32bits windows program on 64bits only system.


Notes about Vulkan

Box64 wraps Vulkan libraries, but note that it as mostly been tested with an AMD RX550 card and on the Freedreno driver, so some extensions may be missing depending on your graphics card.


Final word

I want to thank everyone who has contributed to box64 development. There are many ways to contribute: code contribution, financial, hardware and advertisement! So, in no particular order, I want to thank:

And I also thank the many other people who participated even once in this project.

(If you use Box64 in your project, please don't forget to mention it!)

Klipper is a 3d-printer firmware


Welcome to the Klipper project!

Klipper

https://www.klipper3d.org/

Klipper is a 3d-Printer firmware. It combines the power of a general purpose computer with one or more micro-controllers. See the features document for more information on why you should use Klipper.

To begin using Klipper start by installing it.

Klipper is Free Software. See the license or read the documentation. We depend on the generous support from our sponsors.

display manager with console UI


Ly - a TUI display manager

Ly screenshot

Ly is a lightweight TUI (ncurses-like) display manager for Linux and BSD.

Dependencies

  • Compile-time:
    • zig 0.12.0
    • a C standard library
    • pam
    • xcb
  • Runtime (with default config):
    • xorg
    • xorg-xauth
    • mcookie
    • tput
    • shutdown

Debian

# apt install build-essential libpam0g-dev libxcb-xkb-dev

Fedora

Warning: You may encounter issues with SELinux on Fedora. It is recommended to add a rule for Ly as it currently does not ship one.

# dnf install kernel-devel pam-devel libxcb-devel

Support

The following desktop environments were tested with success:

  • awesome
  • bspwm
  • budgie
  • cinnamon
  • deepin
  • dwl
  • dwm
  • enlightenment
  • gnome
  • i3
  • kde
  • labwc
  • lxde
  • lxqt
  • mate
  • maxx
  • pantheon
  • qtile
  • spectrwm
  • sway
  • windowmaker
  • xfce
  • xmonad

Ly should work with any X desktop environment, and provides basic wayland support (sway works very well, for example).

systemd?

Unlike what you may have heard, Ly does not require systemd, and was even specifically designed not to depend on logind. You should be able to make it work easily with a better init, changing the source code won't be necessary :)

Cloning and Compiling

Clone the repository

$ git clone https://github.com/fairyglade/ly

Change the directory to ly

$ cd ly

Compile

$ zig build

Test in the configured tty (tty2 by default) or a terminal emulator (but desktop environments won't start)

# zig build run

Install Ly and the provided systemd service file

# zig build installsystemd

Enable the service

# systemctl enable ly.service

If you need to switch between ttys after Ly's start you also have to disable getty on Ly's tty to prevent "login" from spawning on top of it

# systemctl disable [email protected]

OpenRC

NOTE: On Gentoo, Ly will disable the display-manager-init service in order to run.

Clone, compile and test.

Install Ly and the provided OpenRC service

# zig build installopenrc

Enable the service

# rc-update add ly

You can edit which tty Ly will start on by editing the tty option in the configuration file.

If you choose a tty that already has a login/getty running (has a basic login prompt), then you have to disable getty, so it doesn't respawn on top of ly

# rc-update del agetty.tty2

runit

# zig build installrunit# ln -s /etc/sv/ly /var/service/

By default, ly will run on tty2. To change the tty it must be set in /etc/ly/config.ini

You should as well disable your existing display manager service if needed, e.g.:

# rm /var/service/lxdm

The agetty service for the tty console where you are running ly should be disabled. For instance, if you are running ly on tty2 (that's the default, check your /etc/ly/config.ini) you should disable the agetty-tty2 service like this:

# rm /var/service/agetty-tty2

Updating

You can also install Ly without copying the system service and the configuration file. That's called updating. To update, simply run:

# zig build installnoconf

If you want to also copy the default config file (but still not the system service), run:

# zig build installexe

Arch Linux Installation

You can install ly from the [extra] repos:

$ sudo pacman -S ly

Configuration

You can find all the configuration in /etc/ly/config.ini. The file is commented, and includes the default values.

Controls

Use the up and down arrow keys to change the current field, and the left and right arrow keys to change the target desktop environment while on the desktop field (above the login field).

.xinitrc

If your .xinitrc doesn't work make sure it is executable and includes a shebang. This file is supposed to be a shell script! Quoting from xinit's man page:

If no specific client program is given on the command line, xinit will look for a file in the user's home directory called .xinitrc to run as a shell script to start up client programs.

On Arch Linux, the example .xinitrc (/etc/X11/xinit/xinitrc) starts like this:

#!/bin/sh

Tips

The numlock and capslock state is printed in the top-right corner. Use the F1 and F2 keys to respectively shutdown and reboot. Take a look at your .xsession if X doesn't start, as it can interfere (this file is launched with X to configure the display properly).

PSX DOOM fire animation

To enable the famous PSX DOOM fire described by Fabien Sanglard, just set animation = doom in /etc/ly/config.ini. You may also disable the main box borders with hide_borders = true.

Additional Information

The name "Ly" is a tribute to the fairy from the game Rayman. Ly was tested by oxodao, who is some seriously awesome dude.

Gentoo (OpenRC) installation tip

To avoid a console spawning on top on Ly, comment out the appropriate line from /etc/inittab (default is 2).