https://wiki.archlinux.org/api.php?action=feedcontributions&user=Nodiscc&feedformat=atomArchWiki - User contributions [en]2024-03-19T03:36:30ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Gaming&diff=501054Gaming2017-12-04T20:36:54Z<p>Nodiscc: /* See also */ remove osgameclones.com link, link directly to List of games</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of games}}<br />
{{Related|Xorg}}<br />
{{Related articles end}}<br />
<br />
This page only contains information about running games and related system configuration tips. For lists of popular games for GNU/Linux see [[List of games]].<br />
<br />
== Game environments ==<br />
<br />
Different environments exist to play games in Linux:<br />
<br />
* Native &ndash; Games written for Linux.<br />
* Browser &ndash; you need only browser and Internet connection to play these types of games.<br />
** HTML5 games use canvas and WebGL technologies and work in all modern browsers but can be slow on weak machines.<br />
** Plugin-based &ndash; you need to install plugin to play.<br />
*** [[Java]] Webstart &ndash; used to install cross-platform games very easily.<br />
*** [[Flash]] games are very common on the Web.<br />
* Specialized environments (software emulators) &ndash; &ndash; Required for running software designed for other architectures or systems, (Heed the copyright laws of your country!). Check the [[List of applications/Other#Emulators|list of emulators]] for more details.<br />
** [[Wine]] &ndash; allows running of some Windows games, as well as a large amount of Windows software. Performance in Wine varies, the additional CPU overhead will cause slowdown in some games while in some cases games may run faster. Consult [http://appdb.winehq.org/ Wine AppDB] for game-specific compatibility information.<br />
** [http://www.codeweavers.com/ Crossover Games] &ndash; members of the Codeweavers team are prime supporters of Wine. Using Crossover Games makes the installation & setting up of some games easier, more reliable & even possible, when compared to using other methods. Crossover is a paid commercial product, which also provides a [http://www.codeweavers.com/support/forums/ forum] where the developers are very much involved in the community. <br />
** [[DOSBox]] is a minimal virtual machine which runs a full DOS-compatible environment. It can be used to run classic DOS titles.<br />
** {{Pkg|scummvm}} is an all-in-one engine reimplementation of many classic point-and-click adventure games. A full list of compatible titles can be found on the [http://scummvm.org ScummVM website].<br />
** Similar to ScummVM, engine reimplementations exist for specific titles, such as Doom.<br />
* Virtual machines can be used to install compatible operating systems (such as Windows). [[VirtualBox]] has good 3D support. As an extension of this, if you have compatible hardware you can consider VGA passthrough to a Windows KVM guest, keyword is [https://www.kernel.org/doc/Documentation/vfio.txt "virtual function I/O" (VFIO)], or [[PCI passthrough via OVMF]].<br />
<br />
== Getting games ==<br />
<br />
=== Native ===<br />
<br />
A good number are available in the [[official repositories]] or in the [[AUR]]. [http://liflg.org/ Loki] provides installers for several games.<br />
<br />
=== Digital distribution ===<br />
<br />
* {{App|[[Wikipedia:Desura|Desura]]|Digital distribution platform featuring indie games. It can be considered good source of games (if you do not care about security and bugs too much).<br />
|http://www.desura.com/|{{AUR|desura}}}}<br />
<br />
* {{App|[[Steam]]|Famous digital distribution and communications platform developed by Valve. It has a large library with over 1000 Linux games. These include popular titles like Dota 2, Counter Strike: Global Offensive, Team Fortress 2, several AAA games, and lots of indie titles.<br />
|http://store.steampowered.com|{{Pkg|steam}}}}<br />
::*[http://developer.valvesoftware.com/wiki/Steam_under_Linux Steam under Linux.]<br />
::*[http://store.steampowered.com/browse/linux/ See linux-games catalog.]<br />
::*Not all Steam titles are native, some are packaged to run using Wine.<br />
<br />
* The [https://www.humblebundle.com/store Humble Store]<br />
<br />
* {{App|[[Wikipedia:itch.io|itch.io]]|Indie game store.|https://itch.io/|{{AUR|itch}}}}<br />
<br />
* [http://www.gog.com/games/linux GOG.com]<br />
::*The {{AUR|lgogdownloader}} package can be used to download GOG titles from the command line.<br />
::*GOG.com only officially supports Ubuntu and Linux Mint. Bear this in mind if requesting support from them; you will not get a refund if you are having trouble running games on Arch.<br />
::*Many GOG.com titles come pre-packaged with DOSBox, ScummVM or Wine.<br />
<br />
=== Flash ===<br />
<br />
Several huge Flash games portals exists, among them are:<br />
* https://armorgames.com/<br />
* https://www.kongregate.com/<br />
* https://www.newgrounds.com/<br />
<br />
=== Java ===<br />
<br />
* Lots of games smaller than 4kb (some are real masterpieces of game design) can be found at http://www.java4k.com.<br />
* https://www.pogo.com/ &ndash; biggest casual Java gaming portal<br />
* [http://www.javagametome.com/ The Java Game Tome] - huge database of primarily casual games<br />
<br />
=== Wine ===<br />
<br />
* Centralized source of information about running games (and other applications) in [[Wine]] is [http://appdb.winehq.org/ Wine AppDB].<br />
* See also [[:Category:Wine]].<br />
<br />
It is recommended (especially for beginners) to use {{Pkg|playonlinux}}, which pulls all necessary dependencies during installation, automatically downloads Windows tools at first start-up to configure and set-up native windows applications to launch properly. For more information, see [https://www.playonlinux.com/en/ Official Website].<br />
<br />
=== Emulators ===<br />
<br />
An emulator is a program which serves to replicate the functions of another platform or system so as to allow applications and games to be run in environments they were not programmed for.<br />
<br />
See also [[:Category:Emulators]] and the [http://emulation.gametechwiki.com/index.php/Main_Page Emulation General wiki].<br />
<br />
{{Note|1=For possibly more up to date selection of emulators, try checking the [https://aur.archlinux.org/packages.php?O=0&K=&do_Search=Go&detail=1&L=0&C=5&SeB=nd&SB=n&SO=a&PP=25 AUR 'emulators' category]}}<br />
<br />
{{Warning|Owning a high-level emulator is not illegal, but distribution of any type of copyrighted ROMs and unauthorized emulation (without written permission of the copyright holder allowing the user to do so) are '''illegal'''. Consequently, Arch Linux does not distribute this copyrighted content, including game ROMs and ripped console BIOSs. You are fully responsible for whatever usage of the emulators obtained from the [[official repositories]] or the [[Arch User Repository]] you make, as well as any legal repercussion that result. Arch Linux bears no responsibility at all.}}<br />
<br />
==== Consoles ====<br />
<br />
See also [[Wikipedia:List of video game console emulators]].<br />
<br />
* {{App|Citra|Nintendo 3DS emulator.|http://citra-emu.org/|{{AUR|citra-git}}}}<br />
* {{App|DeSmuME|Nintendo DS emulator.|http://desmume.org/|{{Pkg|desmume}}}}<br />
* {{App|[[Dolphin emulator|Dolphin]]|Very capable GameCube and Wii emulator.|http://dolphin-emu.org/|{{Pkg|dolphin-emu}}}}<br />
* {{App|epsxe|Emulator for the PlayStation video game console for x86-based PC hardware.|http://www.epsxe.com/|{{AUR|epsxe}}}}<br />
* {{App|FCEUX|NTSC and PAL 8 bit Nintendo/Famicom emulator that is an evolution of the original FCE Ultra emulator. It is accurate, compatible and actively maintained.|http://fceux.com/|{{Pkg|fceux}}}}<br />
* {{App|Gambatte|Accurate Game Boy Color emulator|https://github.com/sinamas/gambatte|Qt GUI frontend ({{Pkg|gambatte-qt}}), SDL CLI frontend ({{Pkg|gambatte-sdl}}).}}<br />
* {{App|Gens2|Emulator for Sega Genesis, Sega CD and 32X that is written in assembly language and no longer actively developed.<br />
:* activate OpenGL, set video resolution per custom to 1024x600 for streched full-screen or 800x600 for non-streched;<br />
:* use "Normal" renderer, I couldn't find a visible advantage with the other ones.<br />
|http://www.gens.me/|{{Pkg|gens}}}}<br />
<br />
* {{App|Gens-GS|Gens2, rewritten in C++, combining features from various Gens forks.|http://segaretro.org/Gens/GS|{{Pkg|gens-gs}}}}<br />
* {{App|gngeo|Command-line NeoGeo emulator.|http://gngeo.googlecode.com|{{AUR|gngeo}}}}<br />
* {{App|higan|Multisystem emulator focusing on accuracy, supporting SNES, NES, GB, GBC, GBA.|https://byuu.org/emulation/higan/|{{Pkg|higan}}}}<br />
* {{App|mednafen|Command line driven multi system emulator.|http://mednafen.sourceforge.net/|{{Pkg|mednafen}}}}<br />
* {{App|Mupen64Plus|Highly compatible Nintendo 64 emulator with plugin system.<br />
|http://www.mupen64plus.org/|{{Pkg|mupen64plus}} or a graphical front-end, such as {{AUR|m64py}} or {{AUR|cutemupen}}.}}<br />
* {{App|pSX|A not plugin-based PlayStation emulator with fairly high compatibility.|http://psxemulator.gazaxian.com/|{{AUR|psx}}}}<br />
* {{App|[[PCSX-Reloaded|PCSXR]] | PlayStation emulator; Debian fork of the abandoned original PCSX|http://pcsxr.codeplex.com/|{{Pkg|pcsxr}}}}<br />
* {{App|PCSX2|PlayStation 2 emulator. It is still being maintained and developed. It requires BIOS files.|http://www.pcsx2.net/|{{Pkg|pcsx2}}}}<br />
* {{App|PPSSPP|PlayStation Portable emulator.|http://ppsspp.org/|{{Pkg|ppsspp}}}}<br />
* {{App|Snes9x|Portable, freeware Super Nintendo Entertainment System (SNES) emulator.|http://www.snes9x.com/|{{Pkg|snes9x}}}}<br />
* {{App|[[Visual Boy Advance]]|Game Boy emulator with Game Boy Advance, Game Boy Color, and Super Game Boy support.<br />
|http://vba.ngemu.com/|{{Pkg|vbam-gtk}}}}<br />
* {{App|ZSNES|Highly compatible Super Nintendo emulator.<br />
|http://www.zsnes.com/|{{Pkg|zsnes}}}}<br />
<br />
==== Other ====<br />
<br />
* {{App|DOSBox|Open-source DOS emulator which primarily focuses on running DOS Games.|http://www.dosbox.com/|{{Pkg|dosbox}}}}<br />
* {{App|DOSEmu|Open-source DOS emulator.|http://www.dosemu.org/|{{Pkg|dosemu}}}}<br />
* {{App|MAME|Multiple Arcade Machine Emulator.|http://mamedev.org/|{{Pkg|sdlmame}}}}<br />
* {{App|ResidualVM|Cross-platform 3D game interpreter which allows you to play LucasArts' Lua-based 3D adventures.|http://residualvm.org/|{{AUR|residualvm}}}}<br />
* {{App|[[RetroArch]]|Frontend to libretro (emulation library, using modified versions of existing emulators as plugins).|http://www.libretro.com/|{{Pkg|retroarch}}}}<br />
* {{App|ScummVM|Virtual machine for old school adventures.|http://www.scummvm.org/|{{Pkg|scummvm}}}}<br />
* {{App|X Neko Project II|PC-9801 emulator.|http://www.asahi-net.or.jp/~aw9k-nnk/np2/|{{AUR|xnp2}}}}<br />
<br />
== Running games ==<br />
<br />
Certain games or game types may need special configuration to run or to run as expected.<br />
For the most part, games will work right out of the box in Arch Linux with possibly better performance than on other distributions due to compile time optimizations. However, some special setups may require a bit of configuration or scripting to make games run as smoothly as desired.<br />
<br />
=== Multi-screen setups ===<br />
<br />
Running a multi-screen setup may lead to problems with fullscreen games. In such a case, [[#Starting games in a separate X server|running a second X server]] is one possible solution. Another solution may be found in the [[NVIDIA#Gaming using TwinView|NVIDIA article]] (may also apply to non-NVIDIA users).<br />
<br />
=== Keyboard grabbing ===<br />
<br />
Many games grab the keyboard, noticeably preventing you from switching windows (also known as alt-tabbing).<br />
<br />
Some SDL games (e.g. Guacamelee) let you disable grabbing by pressing {{ic|Ctrl-g}}.<br />
<br />
You can also download {{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} to gain the ability to use keyboard commands while in SDL games. If you wish to turn it up to 11, you can disable keyboard grabbing at X11 level using {{AUR|libx11-nokeyboardgrab}}, or with more fine-grained control with {{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} using the {{ic|LD_PRELOAD}} environment variable to run applications with particular grab prevention. Wine/lib32 users should also look at the respective lib32 libraries.<br />
<br />
{{Note|SDL is known to sometimes not be able to grab the input system. In such a case, it may succeed in grabbing it after a few seconds of waiting.}}<br />
<br />
=== Starting games in a separate X server ===<br />
<br />
In some cases like those mentioned above, it may be necessary or desired to run a second X server. Running a second X server has multiple advantages such as better performance, the ability to "tab" out of your game by using {{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}}, no crashing your primary X session (which may have open work on) in case a game conflicts with the graphics driver. The new X server will be akin a remote access login for the ALSA, so your user need to be part of the {{ic|audio}} group to be able to hear any sound.<br />
<br />
To start a second X server (using the free first person shooter game [http://www.xonotic.org/ Xonotic] as an example) you can simply do: <br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
This can further be spiced up by using a separate X configuration file:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
A good reason to provide an alternative ''xorg.conf'' here may be that your primary configuration makes use of NVIDIA's Twinview which would render your 3D games like Xonotic in the middle of your multiscreen setup, spanned across all screens. This is undesirable, thus starting a second X with an alternative config where the second screen is disabled is advised.<br />
<br />
A game starting script making use of Openbox for your home directory or {{ic|/usr/local/bin}} may look like this:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
So after a {{ic|chmod +x}} you would be able to use this script like:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== Adjusting mouse detections ===<br />
<br />
For games that require exceptional amount of mouse skill, adjusting the [[mouse polling rate]] can help improve accuracy.<br />
<br />
=== Mouse focus in GNOME ===<br />
<br />
{{Merge|GNOME}}<br />
<br />
The 'sloppy' and 'mouse' window-focusing modes in [[GNOME]] are known to cause issues with a variety of games, causing a 'click-through' effect. Users can remedy this problem by switching the focus mode to 'click' (with a tool such as {{Pkg|gnome-tweak-tool}}), playing in a different desktop environment, or spawing their game in a separate X-session.<br />
<br />
=== Binaural Audio with OpenAL ===<br />
<br />
For games using [[Wikipedia:OpenAL|OpenAL]], if you use headphones you may get much better positional audio using OpenAL's [[Wikipedia:Head-related transfer function|HRTF]] filters. To enable, run the following command:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
Alternatively, install {{AUR|openal-hrtf}} from the AUR, and edit the options in /etc/openal/alsoftrc.conf<br />
<br />
For Source games, the ingame setting `dsp_slow_cpu` must be set to `1` to enable HRTF, otherwise the game will enable its own processing instead. You will also either need to set up Steam to use native runtime, or link its copy of openal.so to your own local copy. For completeness, also use the following options:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Tuning Pulseaudio ===<br />
<br />
If you are using [[PulseAudio]], you may wish to tweak some default settings to make sure it is running optimally.<br />
<br />
==== Enabling realtime priority and negative nice level ====<br />
<br />
Pulseaudio is built to be run with realtime priority, being an audio daemon. However, because of security risks of it locking up the system, it is scheduled as a regular thread by default. To adjust this, first make sure you are in the {{ic|audio}} group. Then, uncomment and edit the following lines in {{ic|/etc/pulse/daemon.conf}}:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
and restart pulseaudio.<br />
<br />
==== Using higher quality remixing for better sound ====<br />
<br />
Pulseaudio on Arch uses speex-float-0 by default to remix channels, which is considered a 'medium-low' quality remixing. If your system can handle the extra load, you may benefit from setting it to one of the following instead:<br />
resample-method = speex-float-10<br />
<br />
==== Matching hardware buffers to Pulse's buffering ====<br />
<br />
Matching the buffers can reduce stuttering and increase performance marginally. See [http://forums.linuxmint.com/viewtopic.php?f=42&t=44862 here] for more details.<br />
<br />
=== Double check your CPU frequency scaling settings ===<br />
<br />
If your system is currently configured to properly insert its own cpu frequency scaling driver, the system sets the default governor to Ondemand. By default, this governor only adjusts the clock if the system is utilizing 95% of its CPU, and then only for a very short period of time. This saves power and reduces heat, but has a noticeable impact on performance. You can instead only have the system downclock when it is idle, by tuning the system governor. To do so, see [[Cpufrequtils#Improving on-demand performance]]{{Broken section link}}.<br />
<br />
== Improving framerates and responsiveness with scheduling policies ==<br />
Most every game can benefit if given the correct scheduling policies for the kernel to prioritize the task. However, without the help of a daemon, this rescheduling would have to be carried out manually or through the use of several daemons for each policy. These policies should ideally be set per-thread by the application itself, but not all developers implement these policies. There are several methods for getting them to work anyway:<br />
<br />
=== For Wine programs ===<br />
<br />
{{AUR|wine-rt}} is a patched version of Wine that implements scheduling policies on a per-thread basis, using the equivalent of what the Windows developers had intended the threads to be run at. The default patch is more oriented towards professional audio users, and tends to be too heavy-handed of an approach for gaming. You may instead wish to use [http://pastebin.com/D9GBzBBv this patch], which also includes nice levels and uses more than one policy decision. Be warned that it uses {{ic|SCHED_ISO}}, which is only properly implemented on [[Linux-ck]], and will simply renice {{ic|THREAD_PRIORITY_ABOVE_NORMAL}} threads if your system does not support it.<br />
<br />
{{Pkg|wine-staging}} versions 1.9.5 and before incorporate the CSMT patchset which provides better performance for 3D accelerated games. The patchset has been disabled as of 1.9.6 pending an upstream update to the patch and incorporation into the main Wine source tree, so you will need to compile version 1.9.5 of wine-staging yourself if you wish to take advantage of this.<br />
<br />
=== For everything else ===<br />
<br />
For programs which do not implement scheduling policies on their own, one tool known as '''schedtool''', and its associated daemon {{AUR|schedtoold}} can handle many of these tasks automatically.<br />
To edit what programs relieve what policies, simply edit {{ic|/etc/schedtoold.conf}} and add the program followed by the ''schedtool'' arguments desired.<br />
<br />
==== Policies ====<br />
<br />
First and foremost, setting the scheduling policy to {{ic|SCHED_ISO}} will not only allow the process to use a maximum of 80 percent of the CPU, but will attempt to reduce latency and stuttering wherever possible. <br />
{{ic|SCHED_ISO}} requires [[Linux-ck]] to operate, as it has only been implemented in that kernel. [[Linux-ck]] itself provides a hefty latency reduction, and should ideally be installed <br />
Most if not all games will benefit from this:<br />
bit.trip.runner -I<br />
For users not using [[Linux-ck]], {{ic|SCHED_FIFO}} provides an alternative, that can even work better. You should test to see if your applications run more smoothly with {{ic|SCHED_FIFO}}, in which case by all means use it instead. Be warned though, as {{ic|SCHED_FIFO}} runs the risk of starving the system! Use this in cases where -I is used below:<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice levels ====<br />
<br />
Secondly, the nice level sets which tasks are processed first, in ascending order. A nice level of -4 is reccommended for most multimedia tasks, including games:<br />
bit.trip.runner -n -4<br />
<br />
==== Core affinity ====<br />
<br />
There is some confusion in development as to whether the driver should be multithreading, or the program. In any case where they both attempt it, it causes drops in framerate and crashes. Examples of this include a number of modern games, and any Wine program which is running without [[Wikipedia:OpenGL Shading Language|GLSL]] disabled. To select a single core and allow only the driver to handle this process, simply use the {{ic|-a 0x''#''}} flag, where ''#'' is the core number, e.g.: <br />
bit.trip.runner -a 0x1<br />
uses first core.<br />
Some CPUs are hyperthreaded and have only 2 or 4 cores but show up as 4 or 8, and are best accounted for:<br />
bit.trip.runner -a 0x5<br />
which use virtual cores 0101, or 1 and 3.<br />
<br />
==== General case ====<br />
<br />
For most games which require high framerates and low latency, usage of all of these flags seems to work best. Affinity should be checked per-program, however, as most native games can understand the correct usage.<br />
For a general case:<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #Wine with GLSL enabled<br />
etc.<br />
<br />
==== Optimus, and other helping programs ====<br />
<br />
As a general rule, any other process which the game requires to operate should be reniced to a level above that of the game itself. Strangely, Wine has a problem known as ''reverse scheduling'', it can often have benefits when the more important processes are set to a higher nice level. Wineserver also seems unconditionally to benefit from {{ic|SCHED_FIFO}}, since rarely consumes the whole CPU and needs higher prioritization when possible.<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== Using alternate kernels ==<br />
<br />
{{Note|Many users report inconsistant framerate and other performance hits when using [[Linux-ck]], even if the overall framerate is sometimes higher. You may wish to try using {{Pkg|linux-zen}} if you just want BFQ.}}<br />
<br />
The stock Arch kernel provides a very good baseline for general usage. However, if your system has less than 16 cores and is intended for use primarily as a workstation, you can sacrifice a small amount of throughput on batch workloads and gain a significant boost to interactivity by using [[Linux-ck]]. If you prefer not to compile your own kernel, you can instead add [[Repo-ck]] and use one of their kernels. Using a pre-optimized kernel will most definitely offset any loss of throughput that may have occurred as a result, so be sure to select the appropriate kernel for your architecture. <br />
<br />
=== Using BFQ ===<br />
<br />
BFQ is an io-scheduler that comes as a feature of {{Pkg|linux-zen}} and [[Linux-ck]], and is optimized to be much more simplistic, but provides better interactivity and throughput for non-server workloads. To enable, simply add the kernel parameter ''elevator=bfq'' to your [[bootloader]]. It is important to note that although most guides recommend using either ''noop'' or ''deadline'' for SSDs for their raw throughput, they are actually detrimental to interactivity when more than one thread is attempting to access the device. It is best to use ''bfq'' unless you desperately need the throughput advantage.<br />
<br />
== See also ==<br />
* [[List of games]]<br />
* [http://freegamer.blogspot.com/ Free Gamer] - Open source games blog<br />
* [http://forum.freegamedev.net/ FreeGameDev] - Free/open source game development community<br />
* [https://fedoraproject.org/wiki/SIGs/Games#Gaming_News_sites SIG/Games] - OS/Linux gaming news sites and lists at Fedora's wiki<br />
* [http://live.linux-gamers.net live.linux-gamers] - Arch-based live gaming distro<br />
* [http://www.gamingonlinux.com/ Gaming on Linux] - Active Linux gaming news and editorial source and community<br />
* [https://www.reddit.com/r/linux_gaming/wiki/index /r/linux_gaming wiki] on Reddit</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501053List of games2017-12-04T20:35:19Z<p>Nodiscc: /* See also */ add https://itch.io/games/platform-linux</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]<br />
* [[Wikipedia:Category:Linux_games]]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port|Source ports]]: [https://osgameclones.com/ Open Source Game Clones], [http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations Engine Reimplementations]<br />
* [https://itch.io/games/platform-linux itch.io Linux games]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store], [https://steamdb.info/linux/ List of Linux Steam games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501052List of games2017-12-04T20:34:11Z<p>Nodiscc: /* See also */ add https://osgameclones.com, move all source ports links on same line</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]<br />
* [[Wikipedia:Category:Linux_games]]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port|Source ports]]: [https://osgameclones.com/ Open Source Game Clones], [http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations Engine Reimplementations]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store], [https://steamdb.info/linux/ List of Linux Steam games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501051List of games2017-12-04T20:32:05Z<p>Nodiscc: /* See also */ move wikipedia links and non-free game links to bottom, make link syntax consistent</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]<br />
* [[Wikipedia:Category:Linux_games]]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port]]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store], [https://steamdb.info/linux/ List of Linux Steam games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501050List of games2017-12-04T20:30:06Z<p>Nodiscc: /* See also */ remove humblebundle.com link (wikipedia page already linked)</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store], [https://steamdb.info/linux/ List of Linux Steam games]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port]]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [[Wikipedia:Category:Linux_games|Lists of Linux games on Wikipedia]]<br />
* http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501049List of games2017-12-04T20:29:22Z<p>Nodiscc: /* See also */ move steam games lists on same line</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://www.humblebundle.com/ The Humble Bundle]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store], [https://steamdb.info/linux/ List of Linux Steam games]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port]]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [[Wikipedia:Category:Linux_games|Lists of Linux games on Wikipedia]]<br />
* http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501048List of games2017-12-04T20:28:20Z<p>Nodiscc: /* See also */ remove Wikipedia:List of games developed by Valve (unrelated)</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://www.humblebundle.com/ The Humble Bundle]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store]<br />
* [https://steamdb.info/linux/ List of Linux Steam games]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port]]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [[Wikipedia:Category:Linux_games|Lists of Linux games on Wikipedia]]<br />
* http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501047List of games2017-12-04T20:27:50Z<p>Nodiscc: /* See also */ add link to * https://libregamewiki.org/List_of_games</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://www.humblebundle.com/ The Humble Bundle]<br />
* [https://libregamewiki.org/List_of_games Libre Game Wiki]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store]<br />
* [https://steamdb.info/linux/ List of Linux Steam games]<br />
* [[Wikipedia:List of games developed by Valve]]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port]]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [[Wikipedia:Category:Linux_games|Lists of Linux games on Wikipedia]]<br />
* http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=List_of_games&diff=501046List of games2017-12-04T20:26:18Z<p>Nodiscc: /* See also */ add link to https://wiki.dotslashplay.it/en/start</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム一覧]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of applications}}<br />
{{Related|Gaming#Emulators}}<br />
{{Related articles end}}<br />
<br />
This page strives to list all games which have a package available in the [[official repositories]] or the [[AUR]]. There are many more Linux games available, which are not packaged. See [[Gaming#Getting games]] for ways to obtain them.<br />
<br />
For more about running games, related system configuration tips, see [[Gaming]]. For an up to date selection of games available in the AUR, try checking the [https://aur.archlinux.org/packages/?SeB=k&K=game AUR 'game' keyword].<br />
<br />
== Action and adventure ==<br />
<br />
* {{App|Abuse|Side-scroller action game that pits you against ruthless alien killers.|http://abuse.zoy.org/|{{Pkg|abuse}}}}<br />
* {{App|[[Wikipedia:Aquaria (video game)|Aquaria]]|2D sidescrolling action-adventure game, heavily focused on exploration and puzzle-solving, with non-linear gameplay. The game engine is open source.|http://www.bit-blot.com/aquaria|{{AUR|aquaria-ose}}, {{AUR|aquaria-hib}}}}<br />
* {{App|Astromenace|Modern 3D scrolling space shooter with ship upgrade possibilities.|https://sourceforge.net/projects/openastromenace/|{{Pkg|astromenace}}}}.<br />
* {{App|1=Barrage|2=Violent ''point-and-click'' shooting game with nice effects|3=http://lgames.sourceforge.net/Barrage/|4={{Pkg|barrage}}}}<br />
* {{App|[[Wikipedia:Blob Wars|Blob Wars: Metal Blob Solid]]|2D Action-adventure game with various weapons and missions.|https://sourceforge.net/projects/blobwars/|{{Pkg|blobwars}}}}<br />
* {{App|[[Wikipedia:BZFlag|BZFlag]]|Multiperson, first-person tank shooter.|http://bzflag.org/|{{Pkg|bzflag}}}}<br />
* {{App|[[Wikipedia:Commander_Keen|Commander_Keen]]| side-scrolling platform action video game|http://clonekeen.sourceforge.net/|{{AUR|clonekeen}}}}<br />
<br />
* {{App|[[Wikipedia:Dink Smallwood|Freedink]]|Free and enhanced version of the action-adventure "Dink Smallwood".|https://www.freedink.org/|{{AUR|freedink}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Gish (video game)|Gish]]|2D physics platformer about adventures of ball of tar.|https://github.com/freegish/freegish|{{AUR|freegish-git}}}}<br />
* {{App|[[Wikipedia:Hammerfight|Hammerfight]]|2-dimensional physics-based combat game.|http://www.koshutin.com/|{{AUR|hammerfight}}}}<br />
:* The open-source Unix port of the Haaf's Game Engine is available at [https://icculus.org/hge-unix/ icculus.org].<br />
* {{App|kobodeluxe|An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up|http://www.olofson.net/kobodl/|{{Pkg|kobodeluxe}}}}<br />
* {{App|Kollision|Moving a ball to avoid other balls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kollision/|{{Pkg|kollision}}}}<br />
* {{App|KSpaceDuel|Player attempts to destroy opponent’s satellite and controll their own one to keep it orbiting. Part of {{Grp|kdegames}}|https://kde.org/applications/games/kspaceduel/|{{Pkg|kdegames-kspaceduel}}{{Broken package link|replaced by {{Pkg|kspaceduel}}}}}}<br />
* {{App|[[Wikipedia:Liquid_War|Liquid War]] | 2D multiplayer game with a simple and unique game mechanic. It could be classified as a fast-paced strategy. | http://www.ufoot.org/liquidwar/ | {{AUR|liquidwar}}}}<br />
:* A rewrite of the game program, now adopted as a GNU project: {{AUR|liquidwar6}}, homepage: [http://www.gnu.org/software/liquidwar6/ | Liquid War 6]<br />
* {{App|[[Minecraft]]|Java based sandbox game.<br />
|https://minecraft.net/|{{AUR|minecraft}}}}<br />
* {{App|[[Wikipedia:Neverball|Neverball]]|3D game to guide a ball through a maze.|http://neverball.org/|{{Pkg|neverball}}}}<br />
* {{App|[[Wikipedia:Rune (video game)|Rune]]|3rd person Adventure / Hack'n Slay using Unreal Engine. Runs great from box installation.|http://www.rune-world.com|{{AUR|rune}}}}<br />
* {{App|1=Paintball Party 2|2=Paintball Party 2 is the sequel to Paintball Party, a multiplayer action platformer for all ages.|3=http://www.t3-i.com/pages/project.php?id=paintball_party_2|4={{AUR|paintball-party-2}}}}<br />
* {{App|XBill|Kill all instances of a virus before it infects all computers with a malware resembling Microsoft® Windows®.|http://www.xbill.org/|{{Pkg|xbill}}}}<br />
<br />
== Arcade ==<br />
* {{App|Bomber|A 2D game with a goal by hitting targets with bombs before their plane crashes into them. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bomber/|{{Pkg|bomber}}}}<br />
* {{App|Bomberclone|Free Bomberman-like game for Linux and Windows. The rules of the game are simple: run though a level and bomb other players.|http://www.bomberclone.de/core.html|{{Pkg|bomberclone}}}}<br />
* {{App|[[Wikipedia:Cave Story|Cave Story/Doukutsu]]|Addictive 1-man-made metroid-vania-esque platformer. If there happens to be a noticible lag when there are lots of enemies on screen or in larger levels, try running the Windows version through Wine. This should fix the problem.|http://cavestory.org|{{AUR|doukutsu}}}}<br />
* {{App|Chromium|Fast paced, arcade-style, top-scrolling space shooter.|http://chromium-bsu.sourceforge.net/|{{Pkg|chromium-bsu}}}}<br />
* {{App|Counter-Strike 2D|2D clone (+additional features) of the popular Counter-Strike Mod|http://cs2d.com|{{AUR|counter-strike-2d}}}}<br />
* {{App|Crack-attack|Free OpenGL game, based on the Super Nintendo classic Tetris Attack.|http://www.nongnu.org/crack-attack/|{{AUR|crack-attack}}}}<br />
* {{App|DDNet|DDraceNetwork, a mod of Teeworlds|https://ddnet.tw/|{{AUR|ddnet}}}}<br />
<br />
* {{App|[[Wikipedia:Frozen Bubble|Frozen Bubble]]|Arcade game with colorful animated penguin eyecandy|http://frozen-bubble.org|{{Pkg|frozen-bubble}}}}<br />
* {{App|Granatier|A clone of ''Bomberman''. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/granatier/|{{Pkg|granatier}}}}<br />
* {{App|[[Wikipedia:Hedgewars|Hedgewars]]|Yet another Worms clone, considered to be better than its predecessor by many. Take turns to blast your opponents into oblivion with comedic results! Best in Multiplayer.|https://hedgewars.org/|{{Pkg|hedgewars}}}}<br />
* {{App|kapman|A clone of ''PacMan''. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kapman/|{{Pkg|kapman}}}}<br />
* {{App|kbreakout|''Breakout''-style game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbreakout/|{{Pkg|kbreakout}}}}<br />
* {{App|1=lbreakout2|2=Breakout-style arcade game in the manner of Arkanoid|3=http://lgames.sourceforge.net/LBreakout2/|4={{Pkg|lbreakout2}}}}<br />
* {{App|kbounce|Building walls to limit amount of space occupied by two balls bouncing off the walls. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kbounce/|{{Pkg|kbounce}}}}<br />
* {{App|ksnakeduel|''Snake''-like game for 2 players which compete to survive longer than the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksnakeduel/|{{Pkg|kdegames-ksnakeduel}}{{Broken package link|replaced by {{Pkg|ksnakeduel}}}}}}<br />
* {{App|1=LTris|2=Arcade version of Tetris|3=http://lgames.sourceforge.net/LTris/|4={{Pkg|ltris}}}}<br />
* {{App|[[Wikipedia:Mari0|Mari0]]|The Mario game with Portal gun mechanics.|http://stabyourself.net/mari0/|{{Pkg|mari0}}}}<br />
* {{App|Nikki and the Robots|Cute physics platformer|https://github.com/nikki-and-the-robots/nikki|{{AUR|nikki}}}}<br />
* {{App|Penguin Command|Clone of the classic game "Missile Command" with improved graphics and sound.|http://www.linux-games.com/penguin-command/|{{AUR|penguin-command}}}}<br />
* {{App|Pinball|Open source pinball simulator for Linux and other Unix systems.|http://pinball.sourceforge.net/|{{AUR|pinball}}}}<br />
* {{App|PowerManga|Arcade 2D shoot-em-up game with 41 levels and more than 200 sprites.|http://linux.tlk.fr/games/Powermanga/|{{AUR|powermanga}}}}<br />
* {{App|Quadrapassel|A ''Tetris'' remake for GNOME.|https://wiki.gnome.org/Apps/Quadrapassel|{{Pkg|quadrapassel}}}}<br />
* {{App|Streets of Rage Remake|A remake of the classic Streets of Rage 1, 2 and 3 by Sega.|http://sorr.forumotion.net/|{{AUR|streetsofrageremake}}}}<br />
* {{App|opsu!|An open source Java client for the rhythm game osu!.|https://itdelatrisu.github.io/opsu/|{{AUR|opsu}}}}<br />
* {{App|[[Wikipedia:Teeworlds|Teeworlds]]|Fast-paced 2D multiplayer shooter|https://www.teeworlds.com/|{{Pkg|teeworlds}}}}<br />
* {{App|Tetrinet|Multiplayer online Tetris game for up to six people.|http://www.tetrinet.info/|{{AUR|gtetrinet}}}}<br />
* {{App|Trackballs|A 3D marble game inspired by the classic Marble Madness.|https://trackballs.github.io/|{{AUR|trackballs}}}}<br />
* {{App|Ultrastar-ng|Clone of SingStar, a music video game.|http://performous.org/|{{AUR|ultrastardx-git}}}}<br />
* {{App|[[Wikipedia:Warmux|Warmux]] (previously ''Wormux'')|Somewhat similar to Worms 2/Worms Armageddon|https://gna.org/projects/warmux/|{{AUR|warmux}}}}<br />
<br />
== Casual games ==<br />
* {{App|Aisleriot|A collection of solitaire card games.|https://wiki.gnome.org/Apps/Aisleriot|{{Pkg|aisleriot}}}}<br />
* {{App|Atanks|A multi-platform Scorched Earth clone similar to the Worms series of games|http://atanks.sourceforge.net/|{{Pkg|atanks}}}}<br />
* {{App|bs|Battleships based shooter for the console|http://www.catb.org/~esr/bs/|{{AUR|bs}}}}<br />
* {{App|BSD Games|Collection of classic text games distributed with *BSD|http://wiki.linuxquestions.org/wiki/BSD_games|{{Pkg|bsd-games}}}}<br />
* {{App|Kajongg|An implementation of [[wikipedia:Mahjong|Mahjong]] for 4 players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kajongg/|{{Pkg|kdegames-kajongg}}{{Broken package link|replaced by {{Pkg|kajongg}}}}}}<br />
* {{App|KHangMan|[[wikipedia:Hangman_(game)|Hangman]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/education/khangman/|{{Pkg|khangman}}}}<br />
* {{App|KPatience|A set of solitarire card games. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kpatience/|{{Pkg|kpatience}}}}<br />
* {{App|KSquares|A [[wikipedia:Dots_and_Boxes|dots-and-boxes]] game for two players. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksquares/|{{Pkg|ksquares}}}}<br />
* {{App|Lskat|A variation of [[wikipedia:Skat|Skat]] card game for two players. Part of {{Grp|kdegames}}|https://www.kde.org/applications/games/lskat/|{{Pkg|kdegames-lskat}}{{Broken package link|replaced by {{Pkg|lskat}}}}}}<br />
* {{App|Mah-Jong|Chinese Classical mahjong (not solitaire) with network support|http://mahjong.julianbradfield.org/|{{Pkg|mahjong}}}}<br />
* {{App|nInvaders|Ncurses based space invaders clone|http://ninvaders.sourceforge.net/|{{AUR|ninvaders}}}}<br />
* {{App|xroach|cockroaches hide under your windows||{{AUR|xroach}}}}<br />
<br />
== Chess simulators ==<br />
* {{App|[[Wikipedia:GNU Chess|GNU Chess]]|One of the oldest computer chess programs for Unix-based computers, lets most modern computers play a full game of chess|https://gnu.org/s/chess|{{Pkg|gnuchess}}}}<br />
* {{App|chessx|Chess Database and PGN viewer|http://chessx.sourceforge.net|{{AUR|chessx}}}}<br />
* {{App|cutechess|A graphical user interface, command-line interface and a library for playing chess|https://github.com/cutechess/cutechess|{{AUR|cutechess}}}}<br />
* {{App|Eboard|Chess interface to ICS and chess engines|http://bergo.eng.br/eboard|{{AUR|eboard}}}}<br />
* {{App|1=Knights|2=Simple chess board for KDE 4. It is a rewrite of the KDE3 Knights.|3=https://www.linux-apps.com/content/show.php/Knights?content=122046|4={{Pkg|knights}}}}<br />
* {{App|PyChess|An advanced chess client for linux following the GNOME Human Interface Guidelines.|http://pychess.org/|{{Pkg|pychess}}}}<br />
* {{App|[[Wikipedia:GNOME Chess|GNOME Chess]]|A 2D chess game which can use third party chess engines.|https://wiki.gnome.org/Apps/Chess|{{Pkg|gnome-chess}}}}<br />
* {{App|glChess|3D Chess Frontend.|https://wiki.gnome.org/Apps/Chess|{{AUR|glchess}}}}<br />
<br />
== Education ==<br />
<br />
* {{App|Blinken|A sequence-remembering game for training memory. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/blinken/|{{Pkg|blinken}}}}<br />
* {{App|GCompris|Educational software suite comprising of numerous activities for children aged 2 to 10.|https://gcompris.net/|{{Pkg|gcompris}}{{Broken package link|replaced by {{Pkg|gcompris-qt}}}}}}<br />
* {{App|katomic|Slide elements so they resemble a chemical molecule. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/katomic/|{{Pkg|katomic}}}}<br />
* {{App|Tux Paint|Free drawing program designed for young children.|http://tuxpaint.org/|{{Pkg|tuxpaint}}}}<br />
* {{App|Tux Type|Educational typing tutor for kids starring Tux.|https://tux4kids.alioth.debian.org/tuxtype/|{{AUR|tuxtype}}}}<br />
* {{App|TuxMath|Arcade game that helps kids practice their math facts.|https://tux4kids.alioth.debian.org/tuxmath/|{{AUR|tuxmath}}}}<br />
<br />
== Interactive fiction ==<br />
<br />
See also [[Wikipedia:Interactive fiction#Development systems]].<br />
<br />
* {{App|[[Wikipedia:Inform|Inform]]|Design system for interactive fiction based on natural language|http://inform7.com/|{{AUR|inform7}}}}<br />
* {{App|INSTEAD|Quest interpreter using Lua macros as game writing language|https://instead.syscall.ru/|{{Pkg|instead-launcher}} {{Pkg|instead}}}}<br />
* {{App|[[Wikipedia:TADS|TADS]]|Prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games|http://tads.org|{{AUR|frobtads}}}}<br />
<br />
== Massively multiplayer online games (MMO) ==<br />
<br />
See also [[Wikipedia:List of massively multiplayer online games]] and [[Wikipedia:Comparison of massively multiplayer online role-playing games]].<br />
<br />
* {{App|[[Dofus]]|Free, manga inspired, Massively Multiplayer Online Role-playing Game (MMORPG) for Adobe AIR|http://www.dofus.com|{{AUR|dofus}}}}<br />
* {{App|[[Wikipedia:Eternal Lands|Eternal Lands]]|3D fantasy online role playing game|http://www.eternal-lands.com|{{AUR|eternallands}}}}<br />
* {{App|[[Wikipedia:PlaneShift (video game)|Planeshift]]|Role Playing Game immersed into a 3D virtual fantasy world which is FULLY FREE to play. Fully free means you will have no surprises of premium content which will limit your gameplay or unbalance the game. There are no limitations in skills, ranks, abilities, items you can gain with your free account|http://www.planeshift.it|{{AUR|planeshift}}}}<br />
* {{App|[[RuneScape]]|Massive online adventure game by Jagex|http://www.runescape.com|{{AUR|unix-runescape-client}} (old Java client), {{AUR|runescape-launcher}} (new NXT client)}}<br />
* {{App|[[Wikipedia:Ryzom|Ryzom]]|3D Fantasy MMORPG|http://www.ryzom.com|{{AUR|ryzom-client}}}}<br />
* {{App|[[Wikipedia:Savage: The Battle for Newerth|Savage: The Battle for Newerth]]|Online multiplayer team-based FPS/RTS hybrid. Open-sourced in September 2006. Savage XR, the most improved continuation (including SFE patches), is completely free (no purchasing/ads whatsoever) however closed-source to reduce cheating.|http://www.newerth.com/|{{AUR|savage}}}}<br />
* {{App|[[Wikipedia:Savage 2: A Tortured Soul|Savage 2: A Tortured Soul]]|Fantasy themed online multiplayer team-based FPS/RTS/RPG hybrid. Free-to-play as of December 2008. Pay for premium accounts providing crucial game elements such as extra inventory slots, access to clans and removal of the Hellbourne unit restrictions (per-account), as well as access to replays and stats.|http://savage2.com|{{AUR|savage2}}}}<br />
* {{App|The Mana World|Serious effort to create an innovative free and open source MMORPG|https://www.themanaworld.org|{{Pkg|manaplus}}}}<br />
<br />
== Platformer ==<br />
<br />
* {{App|[[Wikipedia:Frogatto|Frogatto]]|Platformer with adventure elements.|https://frogatto.com|{{Pkg|frogatto}}}}<br />
* {{App|KGoldrunner|A platform game with the goal of collecting gold. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kgoldrunner/|{{Pkg|kdegames-kgoldrunner}}{{Broken package link|replaced by {{Pkg|kgoldrunner}}}}}}<br />
* {{App|1=Knyttstories|2=Platformer with adventure elements, heavy exploration and downloadable levels.|3=http://nifflas.ni2.se/?page=Knytt+Stories|4={{AUR|knyttstories}}}}<br />
* {{App|Secret Maryo Chronicles|Mario-style game.|http://www.secretmaryo.org/|{{AUR|smc}}}}<br />
* {{App|SuperTux|Mario-style game featuring Tux.|http://supertux.lethargik.org/|{{Pkg|supertux}}}}<br />
* {{App|Toppler|Reimplementation of the classic jump & run game "Nebulus".|http://toppler.sourceforge.net/|{{AUR|toppler}}}}<br />
* {{App|The Secret Chronicles of Dr. M.|A fork of Secret Maryo Chronicles.|https://github.com/secretchronicles/TSC|{{AUR|tsc}}}}<br />
<br />
== Puzzle ==<br />
<br />
* {{App|Blockout II|3D tetris, free adaptation of the original BlockOut DOS game edited by California Dreams in 1989|http://www.blockout.net/blockout2/|{{AUR|blockout2}}}}<br />
* {{App|Bovo|[[wikipedia:Gomoku|Gomoku]]-like game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/bovo/|{{Pkg|bovo}}}}<br />
* {{App|Cgoban3|Kiseido Go and SGF client.|http://www.igoweb.org/~wms/comp/cgoban/|{{Pkg|cgoban}}}}<br />
* {{App|Chroma|Puzzle game like Sokoban with ncurses and graphics mode|http://www.level7.org.uk/chroma/|{{AUR|chroma}}}}<br />
* {{App|Crack Attack!|Free OpenGL game based on the Super Nintendo classic Tetris Attack.|http://www.aluminumangel.org/attack/|{{AUR|crack-attack}}}}<br />
* {{App|Gnu Go|A terminal-based implementation of Go from GNU.|https://www.gnu.org/software/gnugo/|{{Pkg|gnugo}}}}<br />
* {{App|Gopanda|Client for the Pandanet-IGS go Server.|http://pandanet-igs.com/communities/gopanda2|{{AUR|Gopanda}}}}<br />
* {{App|gweled|Eliminating tiles by joining them in groups of three.|https://launchpad.net/gweled/|{{Pkg|gweled}}}}<br />
* {{App|Hitori|Small application written to allow one to play the eponymous puzzle game, which is similar in theme to more popular puzzles such as Sudoku.|https://wiki.gnome.org/Apps/Hitori|{{Pkg|hitori}}}}<br />
* {{App|kblackbox|Finding positions of hidden balls by using hints. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblackbox/|{{Pkg|kblackbox}}}}<br />
* {{App|kblocks|''Tetris'' clone. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kblocks/|{{Pkg|kblocks}}}}<br />
* {{App|KDiamond|Eliminating tiles by joining them in groups of three. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kdiamond/|{{Pkg|kdiamond}}}}<br />
* {{App|KFourInLine|Competition between two players to put a line of four pieces before the opponent. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kfourinline/|{{Pkg|kfourinline}}}}<br />
* {{App|Kigo|''Go'' for KDE. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kigo/|{{Pkg|kdegames-kigo}}{{Broken package link|replaced by {{Pkg|kigo}}}}}}<br />
* {{App|Killbots|A turn-based game with an objective of avoiding robots that are trying to kill the player. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/killbots/|{{Pkg|killbots}}}}<br />
* {{App|KJumpingCube|Take-all-tiles game in which one gains fields by increasing value of one’s own nearby fields. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kjumpingcube/|{{Pkg|kjumpingcube}}}}<br />
* {{App|1=Klickety|2=Clearing the board by removing aligned tiles. Part of {{Grp|kdegames}}.|3=https://games.kde.org/game.php?game=klickety|4={{Pkg|klickety}}}}<br />
* {{App|KLines|Moving balls around the board to form a line of 5 of the same color. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/klines/|{{Pkg|klines}}}}<br />
* {{App|KMines|[[wikipedia:Minesweeper_(video_game)|Minesweeper]], part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kmines/|{{Pkg|kmines}}}}<br />
* {{App|KNetwalk|Rotating tiles with wires to connect all computers to internet. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/knetwalk/|{{Pkg|knetwalk}}}}<br />
* {{App|Kolf|A minigolf game with 2D overhead view. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kolf/|{{Pkg|kdegames-kolf}}}}<br />
* {{App|KShisen|[[wikipedia:Shisen-Sho|Shisen-Sho]]. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kshisen/|{{Pkg|kshisen}}}}<br />
* {{App|Ksudoku|Sudoku game and more for KDE. Part of {{Grp|kdegames}}.|http://ksudoku.sourceforge.net/|{{Pkg|kdegames-ksudoku}}{{Broken package link|replaced by {{Pkg|ksudoku}}}}}}<br />
* {{App|Kubrick|A Rubik’s cube solving game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kubrick/|{{Pkg|kdegames-kubrick}}{{Broken package link|replaced by {{Pkg|kubrick}}}}}}<br />
* {{App|Palapeli|Jigsaw puzzle game. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/palapeli/|{{Pkg|kdegames-palapeli}}}}<br />
* {{App|Pathological|Complete all wheels on the board by collecting marbles of the same color in each of them.|http://pathological.sourceforge.net/howtoplay.php|{{Pkg|pathological}}}}<br />
* {{App|Picmi|Nonogram puzzle game|https://games.kde.org/picmi|{{Pkg|picmi}}}}<br />
* {{App|Pingus|Lemmings clone, i.e. a level-based puzzle game.|http://pingus.seul.org/|{{Pkg|pingus}}}}<br />
* {{App|Ri-li|Toy wood engine GPL game|http://ri-li.sourceforge.net/|{{AUR|ri-li}}}}<br />
* {{App|qgo|A Go client and full featured SGF editor |https://github.com/pzorin/qgo|{{Pkg|qgo}}}}<br />
* {{App|Simon Tatham's Portable Puzzle Collection|30+ "quick" puzzle games with simplistic but polished GTK GUI |http://www.chiark.greenend.org.uk/~sgtatham/puzzles/|{{Pkg|puzzles}}}}<br />
* {{App|[[Wikipedia:VVVVVV|VVVVVV]]|Highly praised 2D puzzle platform indie game with a C64 retro theme, with a great chiptune soundtrack. You can buy the full version for £1.67, or play the [http://www.kongregate.com/games/TerryCavanagh/vvvvvv-demo/ demo] in a browser.<br />
:{{Tip|You may want to backup your save file, which is found at {{Ic|~/.macromedia/Flash_Player/#SharedObjects/''string''/localhost...}}.}}<br />
|http://thelettervsixtim.es/|{{AUR|vvvvvv}}}}<br />
* {{App|XMahjongg|Mahjong solitaire for X.|https://www.lcdf.org/xmahjongg/|{{Pkg|xmahjongg}}}}<br />
* {{App|Xscorch|Clone of the classic DOS game Scorched Earth.|http://www.xscorch.org/|{{AUR|xscorch}}}}<br />
* {{App|[[Wikipedia:World of Goo|World of Goo]]|Great 2D puzzle game.|https://www.2dboy.com|{{AUR|worldofgoo}}}}<br />
<br />
== Racing ==<br />
<br />
* {{App|Armagetron Advanced|Tron Clone in 3D.|http://armagetronad.net/|{{Pkg|armagetronad}}}}<br />
* {{App|Extreme Tux Racer|3D game where you guide Tux the penguin down a course of snow and ice collecting herring.|https://sourceforge.net/projects/extremetuxracer|{{Pkg|extremetuxracer}}}}<br />
* {{App|Maniadrive|Arcade car game on acrobatic tracks with quick and nervous gameplay.|http://maniadrive.raydium.org/|{{AUR|maniadrive}}}}<br />
* {{App|Moon Buggy|Simple game for the text mode.|http://seehuhn.de/pages/moon-buggy/|{{AUR|moon-buggy}}}}<br />
* {{App|Speed Dreams|Fork of Torcs, aiming to implement exciting new features as well as improving realism.|http://speed-dreams.org/|{{Pkg|speed-dreams}}}}<br />
* {{App|Stunt Rally|Racing game with rally style of driving, mostly on gravel.|http://stuntrally.tuxfamily.org/|{{AUR|stuntrally}}}}<br />
* {{App|Supertux Kart|Kart racing game featuring Tux and his friends.|http://supertuxkart.sourceforge.net/|{{Pkg|supertuxkart}}}}<br />
* {{App|Torcs|3D racing cars simulator using OpenGL.|http://torcs.sourceforge.net/|{{Pkg|torcs}}}}<br />
* {{App|Trigger Rally|Free OpenGL rally car racing game.|https://sourceforge.net/projects/trigger-rally/|{{AUR|trigger}}}}<br />
* {{App|Ultimate Stunts|Remake of the famous DOS-game 'stunts'.|http://www.ultimatestunts.nl/|{{AUR|ultimatestunts}}}}<br />
* {{App|VDrift|Open source driving simulation made with drift racing in mind.|http://vdrift.net/|{{AUR|vdrift}}}}<br />
* {{App|[[Wikipedia:X-Moto|XMoto]]|Challenging 2D motocross platform game, where physics play an important role.|https://xmoto.tuxfamily.org/|{{Pkg|xmoto}}}}<br />
<br />
== Rogue-like ==<br />
<br />
See also [[Wikipedia:Chronology of roguelike video games]].<br />
<br />
* {{App|[[Wikipedia:ADOM|ADOM]]|Ancient Domains Of Mystery.|http://adom.de|{{AUR|adom}}}}<br />
* {{App|[[Wikipedia:Angband (video game)|Angband]]|Roguelike dungeon exploration game based on the writings of JRR Tolkien.|http://rephial.org/|{{Pkg|angband}}}}<br />
* {{App|ASCIIpOrtal|Sidescrolling game with ANSI text graphics in which you are a person holding a device which creates portals, or links to other parts of the level.|https://github.com/cymonsgames/ASCIIpOrtal|{{Pkg|asciiportal}}}}<br />
* {{App|[[Wikipedia:Brogue (video game)|Brogue]]|A beginner-friendly Rogue-like.|https://sites.google.com/site/broguegame/|{{AUR|brogue}}}}<br />
* {{App|[[Wikipedia:Cataclysm: Dark Days Ahead|Cataclysm: Dark Days Ahead]]|Post-apocalyptic roguelike.|http://en.cataclysmdda.com/|{{Pkg|cataclysm-dda}}}}<br />
* {{App|[[Wikipedia:Linley's Dungeon Crawl|Linley's Dungeon Crawl]]||http://www.dungeoncrawl.org/|{{AUR|crawl}}}}<br />
* {{App|[[Wikipedia:DoomRL|DoomRL]]|Simple roguelike game, based on Doom. Perfect for starters.|http://doom.chaosforge.org/|{{AUR|doomrl}}}}<br />
* {{App|[[Wikipedia:Dwarf_Fortress|Dwarf Fortress]]|Single-player fantasy game. You control a dwarven outpost or an adventurer in a randomly generated persistent world.|http://www.bay12games.com/dwarves/|{{Pkg|dwarffortress}}}}<br />
* {{App|glHack|An OpenGL-based clone of NetHack.|http://glhack.sourceforge.net/|{{Pkg|glhack}}}}<br />
* {{App|Infra-Arcana|A game inspired by the writings of H.P. Lovecraft.|https://sites.google.com/site/infraarcana/|{{AUR|infra-arcana}}, {{AUR|infra-arcana-git}}}}<br />
* {{App|[[Wikipedia:NetHack|Nethack]]|Single player dungeon exploration game.|http://www.nethack.org/|{{Pkg|nethack}}}}<br />
* {{App|[[Wikipedia:Rogue (video game)|Rogue]]|Original dungeon crawl game.|http://rogue.rogueforge.net/rogue-5-4/|{{Pkg|rogue}}}}<br />
* {{App|[[Wikipedia:Dungeon Crawl Stone Soup|Stone Soup]]|Dungeon Crawl Stone Soup.|https://crawl.develz.org/wordpress/|{{Pkg|stone-soup}}}}<br />
* {{App|[[Wikipedia:Tales of Maj'Eyal|Tales of Maj'Eyal]] (previously ''Troubles of Middle Earth'')|A dungeon crawler similar to Angband, based on the works of Tolkien.|https://te4.org/|{{AUR|tome2}}, {{AUR|tome4}}}}<br />
* {{App|wanderer|Wanderer is a game similar to Boulderdash, Repton, XOR and others.|http://e271.net/~marina/wanderer.html|{{AUR|wanderer}} {{AUR|wanderer-git}}}}<br />
<br />
== Role-playing games (RPG) ==<br />
<br />
* {{App|Arx Libertatis|This project is a fully working, open source port of Arx Fatalis, a 2002 first-person role-playing game developed by Arkane Studios. It features some improvements over the original engine like bug fixes and wide screen support.|https://arx-libertatis.org/|{{AUR|arxlibertatis}}}}<br />
* {{App|Egoboo|Open-source action RPG/dungeon crawling adventure with OpenGL 3D graphics.|http://egoboo.sourceforge.net/|{{AUR|egoboo}}}}<br />
* {{App|fheores2|Attempt to reimplement the [[Wikipedia:Heroes of Might and Magic II|Heroes of Might and Magic II]] engine using SDL.|https://sourceforge.net/projects/fheroes2/|{{AUR|fheroes2-svn}}}}<br />
* {{App|Flare|Action game similar to Diablo.|http://www.flarerpg.org/|{{AUR|flare-game-git}}}}<br />
* {{App|FreedroidRPG|Mature science fiction role playing game set in the future|http://freedroid.org/|{{Pkg|freedroidrpg}}}}<br />
* {{App|GemRB|Attempt to reimplement the [[Wikipedia:Infinity Engine|Bioware's Infinity Engine]] under GNU GPL.|http://www.gemrb.org/|{{Pkg|gemrb}}}}<br />
* {{App|OpenMW|Attempt to reimplement the popular role-playing game [[Wikipedia:Morrowind|Morrowind]]. OpenMW aims to be a fully playable, open source implementation of the game's engine.|https://openmw.org/|{{Pkg|openmw}}}}<br />
* {{App|VCMI|Attempt to reimplement [[Wikipedia:Heroes of Might and Magic III|Heroes of Might and Magic III]].|http://forum.vcmi.eu/portal.php|{{AUR|vcmi}} {{AUR|vcmi-git}}}}<br />
<br />
== Shooters (FPS, third person) ==<br />
<br />
* {{App|[[Wikipedia:CodeRED: Alien Arena|Alien Arena]]|Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.|http://red.planetarena.org/|{{Pkg|alienarena}}}}<br />
* {{App|[[Wikipedia:AssaultCube|AssaultCube]]|Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.|https://assault.cubers.net/|{{Pkg|assaultcube}}}}<br />
* {{App|AssaultCube Reloaded|AssaultCube improved.|http://acr.victorz.ca|{{AUR|assaultcube-reloaded}}}}<br />
* {{App|[[Wikipedia:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]|Improved version of the Cube engine.|http://sauerbraten.org/|{{Pkg|sauerbraten}}}}<br />
* [[Wikipedia:Doom (1993 video game)|Doom]]: the famous shooter from ID Software has several ports for Linux. None of the id-engine games have copyleft game resources, only the game engine code was open sourced. See [http://doom.wikia.com/wiki/Source_port] for details.<br />
:* Doom 1 Demo data &ndash; {{AUR|doom1-wad}}<br />
:* {{App|Freedoom|Project aimed at creation of free Doom data files.|http://www.nongnu.org/freedoom/|{{AUR|freedoom1}}, {{AUR|freedoom2}}}}<br />
:* {{App|Chocolate Doom|Doom port reproducing the behavior of the original DOS version.|https://www.chocolate-doom.org/|{{AUR|chocolate-doom}}}}<br />
:* {{App|Doomsday|Advanced port of the Doom game engine, capable also of running Heretic, and Hexen games.|http://www.dengine.net/|{{AUR|doomsday}}}}<br />
:* {{App|GZDoom|Doom source port based on ZDoom with an OpenGL renderer.|https://github.com/coelckers/gzdoom|{{AUR|gzdoom}}}}<br />
:* {{App|PrBoom Plus|Enhanced version of the PrBoom Doom engine port.|http://prboom-plus.sourceforge.net/|{{AUR|prboom-plus}}}}<br />
:* {{App|ZDoom|Enhanced Doom port with additional support for Heretic, Hexen and Strife.|https://www.zdoom.org/|{{AUR|zdoom}}}}<br />
:* {{App|Doom Retro|DOOM Retro is the classic, refined DOOM source port. Based on Chocolate DOOM with enhancements from other source ports.|http://doomretro.com/|{{AUR|doom-retro-git}}{{Broken package link|package not found}}}}<br />
* [[Wikipedia:Doom 3|Doom 3]]<br />
:* {{App|Doom 3|Stock Doom 3 binaries|http://www.idsoftware.com|{{AUR|doom3-bin}}}}<br />
:* {{App|Doom 3 Engine|Source-based Doom 3 engine|http://www.idsoftware.com|{{AUR|doom3}}}}<br />
:* {{App|dhemw3|Fork of iodoom3|https://github.com/dhewm/dhewm3|{{AUR|dhewm3}}}}<br />
:* {{App|RBDOOM-3-BFG|Fork of Doom 3 BFG Edition|https://github.com/RobertBeckebans/RBDOOM-3-BFG|{{AUR|rbdoom-3-bfg}}}}<br />
* {{App|ezQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. The popular, modern and maintained Quake/QuakeWorld client. Can play on-line for free |http://ezquake.sourceforge.net/|{{AUR|ezquake}}}}<br />
* [[Wikipedia:Duke Nukem 3D|Duke Nukem 3D]]<br />
:* {{App|eduke32|Advanced source port.|http://eduke32.com/|{{AUR|eduke32}}}}<br />
* {{App|[[Wikipedia:Enemy Territory: Quake Wars|Enemy Territory: Quake Wars]]|Commercial team and class-based multiplayer game. Full version requires retail DVD to play.|http://zerowing.idsoftware.com/linux/etqw/ETQWFrontPage/|{{AUR|etqw}}}}<br />
* {{App|HHeretic|Linux port of Raven Game's old shooter, Heretic.|http://hhexen.sourceforge.net/hheretic.html|{{AUR|hheretic}}}}<br />
:* Heretic Demo game data &ndash; {{AUR|heretic1-wad}}<br />
* {{App|HHexen|Linux port of Raven Game's old shooter, Hexen.|http://hhexen.sourceforge.net/hhexen.html|{{AUR|hhexen}}}}<br />
:* Hexen 1 Demo game data &ndash; {{AUR|hexen1-wad}}<br />
* {{App|[[Wikipedia:Nexuiz|Nexuiz]]|Free, open-source first person shooter. Development ceased, most of the developers moved to project [http://xonotic.org/ Xonotic].|http://alientrap.org/nexuiz|{{AUR|nexuiz}}}}<br />
* {{App|nQuake|Fast paced multiplayer FPS focusing on movement and trick jumps. This is the popular Quake / QuakeWorld package, including ezQuake client, 24bit textures, maps, bots and more. Can play on-line for free.|http://nquake.sourceforge.net/|{{AUR|nquake}}}}<br />
* {{App|[[Wikipedia:OpenArena|OpenArena]]|Fast multiplayer shooter based on the quake3-engine.|http://openarena.ws|{{AUR|openarena}}}}<br />
* {{App|[[Wikipedia:Prey (video game)|Prey]]|First Person Shooter released in 2006 (with a GNU/Linux port in 2008), published by 3D Realms.|https://www.3drealms.com/prey/index.html|{{AUR|prey}}}}<br />
* [[Red Crucible]]<br />
:* Red Crucible®: Firestorm - Free to play online FPS &ndash; {{AUR|rcf}}<br />
:* Red Crucible®: Reloaded - Free to play online FPS &ndash; {{AUR|rcr}}<br />
* [[Wikipedia:Quake (video game)|Quake]]<br />
:* Advanced Quake 1 game engine &ndash; {{AUR|darkplaces}}<br />
:* High quality textures for Quake from the Quake Revitalization Project &ndash; {{AUR|quake-qrp-textures}}<br />
* [[Wikipedia:Quake II|Quake II]]<br />
:* {{App|Quake 2|Built by Icculus|https://www.icculus.org/quake2/|{{AUR|quake2}}}}<br />
:* A true color retexture pak for Quetoo and other Quake2 engines supporting 32bpp tga textures &ndash; {{AUR|quake2-retexture}}<br />
:* Quake 2 engine focused on single player and 64bits. {{AUR|yamagi-quake2}}<br />
* [[Wikipedia:Quake III Arena|Quake III Arena]]<br />
:* Quake III Arena binaries &ndash; {{AUR|quake3}}<br />
:* {{App|ioquake3|De-facto FOSS Quake 3 distribution.|https://ioquake3.org/|{{AUR|ioquake3}}}}<br />
* [[Wikipedia:Quake 4|Quake 4]]<br />
:* Demo version &ndash; {{AUR|quake4-demo}}<br />
:* Quake 4 engine &ndash; {{AUR|quake4}}<br />
* {{App|[[Wikipedia:Red Eclipse|Red Eclipse]]|Single-player and multi-player first-person ego-shooter, built as a total conversion of Cube Engine 2.|http://redeclipse.net|{{AUR|redeclipse}}}}<br />
* {{App|Tesseract|Smooth FPS with map editing, instagib, DM and CTF.|http://tesseract.gg/|{{AUR|tesseract-game}}}}<br />
* {{App|[[Wikipedia:Tremulous|Tremulous]]|FPS with elements of real time strategy, featuring humans and aliens.|http://tremulous.net/|{{AUR|tremulous}}}}<br />
* {{App|[[Wikipedia:Unreal Tournament (upcoming video game)|Unreal Tournament (upcoming)]]|Free and open-source remake of the original using Unreal Engine 4|https://www.unrealtournament.com/|{{AUR|unrealtournament4}}}}<br />
* {{App|[[Wikipedia:Unvanquished (video game)|Unvanquished]]|Team-based fps/rts hybrid game which pits aliens against humans. Monthly release that can be played on official servers.|https://unvanquished.net/|{{AUR|unvanquished}}}}<br />
* {{App|[[Urban Terror]]|Modern multiplayer FPS based on the ioquake3 engine.|http://urbanterror.info|{{AUR|urbanterror}}}}<br />
* {{App|[[Wikipedia:Warsow (game)|Warsow]]|Fast paced multiplayer FPS focusing on movement and trick jumps.|https://warsow.net|{{Pkg|warsow}}}}<br />
* [[Wolfenstein: Enemy Territory]]<br />
:* Completely free, standalone, team-based, multiplayer FPS &ndash; {{AUR|enemy-territory}}<br />
:* Advanced open source project and fully compatible client and server &ndash; {{AUR|etlegacy32}}<br />
* {{App|[[Wikipedia:World of Padman|World of Padman]]|Stand slone somplex &ndash; cartoon-style multiplayer first-person shooter.|http://worldofpadman.net/website|{{AUR|worldofpadman}}}}<br />
* {{App|[[Wikipedia:Xonotic|Xonotic]]|Free, open-source first person shooter (a fork of Nexuiz but with modified gameplay).|http://xonotic.org|{{Pkg|xonotic}}}}<br />
<br />
== Simulation ==<br />
<br />
* {{App|[[Wikipedia:Beyond the Red Line|Beyond the Red Line]]|Completely free stand-alone conversion of Freespace 2 based on the TV show Battlestar Galactica. Presumed abandoned, see Diaspora: Shattered Armistice for an alternative.|http://www.beyondtheredline.net/|{{AUR|btrl}}}}<br />
* {{App|Endless Sky|Open source, 2D space trading and combat game similar to the classic Escape Velocity series.|https://endless-sky.github.io/|{{AUR|endless-sky-git}}}}<br />
* {{App|[[Wikipedia:Flight Gear|Flight Gear]]|Open-source, multi-platform flight simulator.|http://www.flightgear.org/|{{Pkg|flightgear}}}}<br />
* {{App|[[Wikipedia:FooBillard|Foobillard++]]|Successor to Foobillard, OpenGL billiard game for Linux.|http://foobillardplus.sourceforge.net/|{{Pkg|foobillard++}}}}<br />
* {{App|[[Wikipedia:FreeSpace 2|FreeSpace 2]]|Open sourced space emulator.|https://icculus.org/freespace2/|{{AUR|fs2_open}}}}<br />
* {{App|Minetest|Voxel-based sandbox game engine and game.|http://www.minetest.net/|{{Pkg|minetest}} {{Pkg|minetest-server}}}}<br />
* {{App|Naev|Open source, 2D space trading and combat game, taking inspiration from the Escape Velocity series.|http://blog.naev.org/|{{Pkg|naev}}}}<br />
* {{App|[[Wikipedia:BVE Trainsim#openBVE|openBVE]]|Free-as-in-freedom train simulator placed in the public domain.|https://web.archive.org/web/odakyufan.zxq.net/openbve/|{{Pkg|openbve}}}}<br />
* {{App|[[Wikipedia:Oolite (video game)|Oolite]]|3D space trading and combat simulator in the spirit of Elite.|http://oolite.org/|{{Pkg|oolite}}}}<br />
* {{App|[[Wikipedia:Pioneer (video game)|Pioneer]]|Open source, 3D, freeform single player space adventure set in the Milkyway galaxy at the turn of the 31st century in the spirit of Frontier: Elite II.|http://pioneerspacesim.net/|{{AUR|pioneer}}}}<br />
* {{App|Pydance|Python Dance Dance Revolution style game.|https://icculus.org/pyddr/|{{AUR|pydance}}}}<br />
* {{App|[[Wikipedia:Stepmania|Stepmania]]|Advanced dance simulation game.|http://www.stepmania.com/|{{AUR|stepmania}}}}<br />
* {{App|Terasology|Open source voxel world.|http://terasology.org|{{AUR|terasology}}}}<br />
* {{App|The Powder Toy|Open source physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.|http://powdertoy.co.uk/|{{AUR|powder-toy}}}}<br />
* {{App|Voxelands|A fork of Minetest, an Infiniminer/Minecraft inspired game.|http://www.voxelands.com/|{{AUR|voxelands}}}}<br />
<br />
== Strategy ==<br />
=== Real-time ===<br />
* {{App|[[Wikipedia:0 A.D. (video game)|0 A.D.]]|3D and historically-based real-time strategy game, alpha stage. Based on the Age of Empires series.|https://play0ad.com/|{{Pkg|0ad}}}}<br />
* {{App|Dark Oberon|Open source real-time strategy game similar to Warcraft II.|http://dark-oberon.sourceforge.net/|{{AUR|dark-oberon}}}}<br />
* {{App|Factorio|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies.|http://www.factorio.com/|{{AUR|factorio}}}}<br />
* {{App|Factorio demo|A proprietary game about mining resources, planning and building factories, automating production and fighting alien enemies. (Demo)|http://www.factorio.com/|{{AUR|factorio-demo}}}}<br />
* {{App|[[Wikipedia:FTL:_Faster_Than_Light|FTL: Faster Than Light]]|Popular rogue-like space-sim released to positive reception in 2012.|http://www.ftlgame.com/|{{AUR|ftl}}}}<br />
* {{App|Globulation 2|Multiplayer RTS with some "economic" elements minimizing the amount of micromanagement.|https://globulation2.org/wiki/Main_Page|{{Pkg|glob2}}}}<br />
* {{App|[[Wikipedia:Heroes of Newerth|Heroes of Newerth]]|Online, multi-player strategy game that is based upon DoTA (Defense of the Ancients). Free-to-own (gameplay free; pay for cosmetic upgrades only)|https://heroesofnewerth.com/|{{AUR|hon}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Kernel_Panic|Kernel Panic]]|A game based around combat inside a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.|https://springrts.com/wiki/Kernel_Panic|{{Pkg|spring-kp}}}}<br />
* {{App|[[Wikipedia:MegaGlest|MegaGlest]]|Fork of Glest, a 3D real-time strategy game in a fantastic world.|https://github.com/megaglest|{{Pkg|megaglest}}}}<br />
* {{App|[[Wikipedia:Netpanzer|Netpanzer]]|Real-time strategy game like Command and Conquer but without building bases.|http://www.netpanzer.org/|{{AUR|netpanzer}}}}<br />
* {{App|[[Wikipedia:OpenRA|OpenRA]]|Real-time strategy game written in C# and based on the Command & Conquer game franchise|http://www.openra.net/|{{Pkg|openra}}}}<br />
* {{App|[[Wikipedia:Spring_Engine#Spring:1944|Spring:1944]]| A WWII themed game with four fully functional sides (US, Germany, USSR, Britain), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play.|http://spring1944.org/|{{Pkg|spring-1944}}}}<br />
* {{App|[[Wikipedia:Unknown Horizons|Unknown Horizons]]|2.5D isometric real-time strategy simulation with an emphasis on economy and city building. Expand your small settlement to a strong and wealthy colony, collect taxes and supply your inhabitants with valuable goods. Increase your power with a well balanced economy and with strategic trade and diplomacy.|http://www.unknown-horizons.org/|{{AUR|unknown-horizons-git}}}}<br />
* {{App|Warzone 2100|You command the forces of The Project in a battle to rebuild the world after mankind has almost been destroyed by nuclear missiles. The game offers campaign, multi-player, and single-player skirmish modes. An extensive tech tree with over 400 different technologies, combined with the unit design system, allows for a wide variety of possible units and tactics. The AUR package installs its videos ({{Bug|55310}}).|https://wz2100.net/|{{Pkg|warzone2100}} {{AUR|warzone2100-sequences}}}}<br />
* {{App|[[Wikipedia:Widelands|Widelands]]|Slow-paced strategy like "the Settlers 2".|https://widelands.org|{{Pkg|widelands}}}}<br />
* {{App|[[Wikipedia:Zero-K|Zero-K]]|Zero-K is a free multi-platform open source real-time strategy computer game. Initially based on content from Total Annihilation on the open source Spring Engine, it was forked and all proprietary content replaced, and evolved into a completely new game with unique features. It can be easily installed by installing the flobby client from the AUR or alternatively (and preferably) by installing the official mono package and downloading and running the Zero-K lobby from the official website.|http://zero-k.info/|{{AUR|flobby-git}}}}<br />
<br />
=== Turn-based ===<br />
* {{App|Advanced Strategic Command|Turn-based strategy game in the tradition of the Battle Isle series.|http://www.asc-hq.org/|{{AUR|advanced-strategic-command}}}}<br />
* {{App|[[Wikipedia:Endgame: Singularity|Endgame Singularity]]|Turn-based single player strategy/simulation about a AI hiding, growing and evolving.|http://www.emhsoft.com/singularity/|{{Pkg|singularity}}}}<br />
* {{App|[[Wikipedia:Freeciv|Freeciv]]|Multiuser clone of the famous Microprose game of Civilization.|http://freeciv.wikia.com/wiki/Main_Page|{{Pkg|freeciv}}}}<br />
* {{App|[[Wikipedia:FreeCol|FreeCol]]|Turn-based strategy game based on Colonization.|http://www.freecol.org/|{{Pkg|freecol}}}}<br />
* {{App|KReversi|A ''reversi'' implementation. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/kreversi/|{{Pkg|kreversi}}}}<br />
* {{App|KsirK|A ''risk''-styled game in which players try to conquer the world by deciding which area to be invaded next. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/ksirk/|{{Pkg|kdegames-ksirk}}}}<br />
* {{App|[[Wikipedia:The Battle for Wesnoth|The Battle for Wesnoth]]|Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.|https://www.wesnoth.org/|{{Pkg|wesnoth}}}}<br />
* {{App|UFO: Alien Invasion|Fight aliens trying to capture Earth.|http://ufoai.ninex.info/wiki/index.php/News|{{Pkg|ufoai}}}}<br />
<br />
== Tycoon/management games ==<br />
<br />
* {{App|Lincity-ng|City simulation game in which you are required to build and maintain a city. You can win the game either by building a sustainable economy or by evacuating all citizens with spaceships.|https://fedorahosted.org/LinCity-NG/|{{Pkg|lincity-ng}}}}<br />
* {{App|Konquest|A turn-based game in which the player wage wars by managing a fleet of spaceships and conquering other planets. Part of {{Grp|kdegames}}.|https://www.kde.org/applications/games/konquest/|{{Pkg|kdegames-konquest}}{{Broken package link|replaced by {{Pkg|konquest}}}}}}<br />
* {{App|[[Wikipedia:Simutrans|Simutrans]]|Another Transport simulation that works on linux with sdl.|https://www.simutrans.com/|{{Pkg|simutrans}}}}<br />
* {{App|[[OpenTTD]]|Open source clone of the Microprose game "Transport Tycoon Deluxe", a popular game originally written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features.|https://www.openttd.org/|{{Pkg|openttd}}}}<br />
* {{App|OpenRCT2|Free reimplementation of the game "RollerCoaster Tycoon 2 (RCT2)" with multiplayer support. It requires a copy of the original game to play it.|https://openrct2.org/|{{AUR|openrct2}}}}<br />
<br />
== Visual novels ==<br />
<br />
* {{App|[[Wikipedia:Don't take it personally, babe, it just ain't your story|Don't take it personally]]|Almost kinetic visual novel that tells a story of a new high school literature teacher, set in a prestigious private high school, and on the social networks of 2027.|http://scoutshonour.com/donttakeitpersonallybabeitjustaintyourstory/|{{AUR|donttakeitpersonally}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Juniper's Knot|Juniper's Knot]]|Short game about boy and fiend.|http://junipersknot.dischan.org/|{{AUR|junipersknot}}}}<br />
* {{App|[[Wikipedia:Katawa Shoujo|Katawa Shoujo]]|Bishoujo-style visual novel game that tells a story of a young man and five other girls suffering with varying disabilities.|http://katawa-shoujo.com/|{{AUR|katawa-shoujo}}}}<br />
* {{App|[[Wikipedia:Narcissu|Narcissu]]|Visual novel, telling the story of a terminally ill young man and woman.|http://narcissu.insani.org/|{{AUR|narcissu2-en}}}}<br />
<br />
== Comparison table ==<br />
{| class="wikitable sortable"<br />
! style="width:190px;" | Name<br />
! Written in<br />
! Genre<br />
! License<br />
! style="width:130px;" | Package<br />
! Description<br />
|-<br />
| '''[[w:0 A.D. (video game)|0 A.D.]]'''<br/>- [https://play0ad.com/ play0ad.com]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Lesser General Public License">LGPL</abbr>/<abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|0ad}}<br/>{{AUR|0ad-git}}<br />
| 3D and historically-based real-time strategy game.<br />
|-<br />
| [[w:Abuse (game)|'''Abuse''']]<br/>- [http://abuse.zoy.org abuse.zoy.org]<br />
| style="background:#f56f9f;" | C++<br />
| Action<br />
| style = "background:#9F9;" | <abbr title="Public Domain">PD</abbr>/<abbr title="GNU General Public License">GPL</abbr>/<abbr title="Do What the Fuck You Want To Public License">WTFPL</abbr><br />
| {{Pkg|abuse}}<br />
| Side-scroller action game that pits you against ruthless alien killers.<br />
|-<br />
| '''[[w:ADOM|ADOM]]'''<br/>- [http://adom.de adom.de]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#F99;" | Freemium<br />
| {{AUR|adom}}<br />
| Ancient Domains Of Mystery.<br />
|-<br />
| '''[[w:CodeRED: Alien Arena|Alien Arena]]'''<br/>- [http://red.planetarena.org/ red.planetarena.org]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|alienarena}}<br/>{{AUR|alienarena-svn}}<br />
| Free, standalone FPS focused mainly on online multiplayer, but can also be played singleplayer against bots.<br />
|-<br />
| '''[[w:Angband (video game)|Angband]]'''<br/>- [http://rephial.org rephial.org]<br />
| style="background-color:#999999;" | C<br />
| Rogue-Like<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|angband}}<br/>{{AUR|angband-git}}<br />
| Roguelike dungeon exploration game based on the writings of JRR Tolkien.<br />
|-<br />
| '''[[w:AssaultCube|AssaultCube]]'''<br/>- [http://assault.cubers.net/ assault.cubers.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | ZLIB<br />
| {{Pkg|assaultcube}}<br />
| Free multiplayer FPS, based on the cube engine. Realistic environments, fast, arcade gameplay. Much like Counter-Strike.<br />
|-<br />
| '''[[w:Blob Wars#Blob Wars: Metal Blob Solid|Blob Wars: Metal Blob Solid]]'''<br/>- [https://sourceforge.net/projects/blobwars/ sourceforge.net/projects/blobwars]<br />
| style="background:#c6769b;" | C/C++<br />
| Platform<br />
| style="background:#9F9" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|blobwars}}<br />
| 2D platform shooting game.<br />
|-<br />
| '''[[w:BZFlag|BZFlag]]'''<br/>- [https://www.bzflag.org/ bzflag.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Tank <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="GNU Lesser General Public License version 2.1">LGPLv2.1</abbr>/<abbr title="Mozilla Public License version 2.0">MPLv2</abbr><br />
| {{Pkg|bzflag}}<br />
| 3D multiplayer tank first-person shooter game.<br />
|-<br />
| '''[[w:Cube 2: Sauerbraten|Cube 2: Sauerbraten]]'''<br/>- [http://sauerbraten.org/ sauerbraten.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9" | <abbr title="First-Person Shooter">FPS</abbr><br />
| {{Pkg|sauerbraten}}<br />
| Successor to the Cube first-person shooter game with both single- and multi- player modes.<br />
|-<br />
| '''[[w:Endgame: Singularity|Endgame Singularity]]'''<br/>- [http://www.emhsoft.com/singularity/ emhsoft.com/singularity]<br />
| style="background:#5f8db3;" | Python<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|singularity}}<br/>{{AUR|singularity-git}}<br />
| Turn based single player strategy/simulation about a AI hiding, growing and evolving.<br />
|-<br />
| '''[[w:FlightGear|FlightGear]]'''<br/>- [http://www.flightgear.org/ flightgear.org]<br />
| style="background:#c6769b;" | C/C++<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|flightgear}}<br/>{{AUR|flightgear-git}}<br />
| Open-source, multi-platform flight simulator.<br />
|-<br />
| '''[[w:Foobillard++|Foobillard++]]'''<br/>- [http://foobillardplus.sourceforge.net/ foobillardplus.sourceforge.net]<br />
| style="background-color:#999999;" | C<br />
| Simulation<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|foobillard++}}<br />
| Successor to Foobillard, OpenGL billiard game for Linux.<br />
|-<br />
| '''[[w:Freeciv|Freeciv]]'''<br/>- [http://freeciv.wikia.com/wiki/Main_Page freeciv.wikia.com]<br />
| style="background-color:#c6769b;" | C/C++<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freeciv}}<br/>{{AUR|freeciv-git}}{{Broken package link|package not found}}<br />
| Multiuser clone of the famous Microprose game of Civilization. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Freecol|Freecol]]'''<br/>- [http://www.freecol.org/ freecol.org]<br />
| style="background:#f2943b;" | Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|freecol}}<br/>{{AUR|freecol-git}}<br />
| Turn-based strategy game based on Colonization.<br />
|-<br />
| '''[[w:Megaglest|Megaglest]]'''<br/>- [https://megaglest.org/ megaglest.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|megaglest}}<br />
| Fork of Glest, a 3D real-time strategy game in a fantastic world.<br />
|-<br />
| '''[[w:Command_%26_Conquer:_Red_Alert#Open_source_remake|OpenRA]]'''<br/>- [http://www.openra.net openra.net]<br />
| style="background:#3ab922;" | C#<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|openra}}<br/>{{AUR|openra-git}}<br />
| An open-source implementation of the Command & Conquer: Red Alert engine using .NET/Mono and OpenGL. It has a Lua API for generating custom maps.<br />
|-<br />
| '''[[OpenTTD]]'''<br/>- [http://www.openttd.org openttd.org]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|openttd}}<br/>{{AUR|openttd-svn}}<br />
| An open-source remake of Transport Tycoon Deluxe. Scripted using the Squirrel programming language.<br />
|-<br />
| '''PyChess'''<br/>- [http://pychess.org pychess.org]<br />
| style="background:#5f8db3;" | Python<br />
| Chess<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|pychess}}<br />
| An advanced chess client for Linux following the GNOME Human Interface Guidelines.<br />
|-<br />
| rowspan = "2" | '''[[w:RuneScape|RuneScape]]'''<br/>- [http://www.runescape.com runescape.com]<br />
| style="background:#f2943b;" | Java (legacy)<br />
| rowspan = "2" | <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| rowspan = "2" style="background:#F99;" | Freemium<br />
| {{AUR|unix-runescape-client}}<br />
| rowspan = "2" | Massive online medieval fantasy game by Jagex.<br />
|-<br />
| style="background:#f56f9f;" | C++ (NXT) <br />
| {{AUR|runescape-launcher}}<br />
|-<br />
| '''[[w:SuperTux|SuperTux]]'''<br/>- [http://supertux.github.io/ supertux.github.io]<br />
| style="background:#f56f9f;" | C++<br />
| Platform<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertux}}<br/>{{AUR|supertux-git}}<br/>{{AUR|supertux-old}}<br />
| Classic 2D jump'n side-scroller game similar to the Super Mario Bros games, featuring Tux. Milestone 1 of the game was released in 2003 and is provided by supertux-old. Milestone 2, the current version of SuperTux in the Arch Linux community repository, was released in December 2015. It is scripted using the Squirrel programming language.<br />
|-<br />
| '''[[w:SuperTuxKart|SuperTuxKart]]'''<br/>- [https://supertuxkart.net supertuxkart.net]<br />
| style="background:#c6769b;" | C/C++<br />
| 3D racing<br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|supertuxkart}}<br/>{{AUR|supertuxkart-git}}<br />
| Free, 3D racing game where the characters racing are represented by open-source project mascots.<br />
|-<br />
| '''[[w:The Battle for Wesnoth|The Battle for Wesnoth]]'''<br/>- [http://www.wesnoth.org/ wesnoth.org]<br />
| style="background:#b5857b;" | C/C++/Java<br />
| <abbr title="Turn-based strategy game">TBS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|wesnoth}}<br/>{{AUR|wesnoth-git}}<!-- Haven't mentioned wesnoth-devel as at the time of writing, 22 October 2017, it has been flagged as out-of-date for 9 days, so I'm not sure it's still maintained--><br />
| Free, turn-based tactical strategy game with a high fantasy theme, featuring both single-player, and online/hotseat multiplayer combat.<br />
|-<br />
| '''The Mana World'''<br/>- [http://themanaworld.org/ themanaworld.org]<br />
| style="background:#f56f9f;" | C++<br />
| <abbr title="Massively Multiplayer Online Role-Playing Game">MMORPG</abbr><br />
| style="background:#9F9;" | <abbr title="GNU Affero General Public License Version 3">AGPLv3</abbr>/<abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{Pkg|manaplus}}<br/>{{AUR|manaplus-git}}<br />
| Serious effort to create an innovative free and open-source MMORPG.<br />
|-<br />
| '''[[w:Unvanquished|Unvanquished]]'''<br/>- [http://www.unvanquished.net/ unvanquished.net]<br />
| style="background:#c6769b;" | C/C++<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 3">GPLv3</abbr><br />
| {{AUR|unvanquished}}<br/>{{AUR|unvanquished-git}}<br />
| First-person shooter/real-time strategy game in which aliens fight with humans.<br />
|-<br />
| '''[[Urban Terror]]'''<br/>- [http://urbanterror.info/ urbanterror.info]<br />
| style="background-color:#999999;" | C<br />
| <abbr title="First-Person Shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{AUR|urbanterror}}<br />
| Modern multiplayer FPS based on the ioquake3 engine.<br />
|-<br />
| '''[[w:Warzone 2100|Warzone2100]]'''<br/>- [http://wz2100.net/ wz2100.net]<br />
| style="background:#f56f9f;" | C++<br />
|<abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|warzone2100}}<br/>{{AUR|warzone2100-git}}<br />
| 3D real-time strategy game on a future Earth.<br />
|-<br />
| '''[[w:Widelands|Widelands]]'''<br>- [http://wl.widelands.org/ wl.widelands.org]<br />
| style="background:#aa7ea9" | C++/Lua/Python<br />
| <abbr title="Real-time strategy game">RTS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License Version 2">GPLv2</abbr><br />
| {{Pkg|widelands}}<br/>{{AUR|widelands-bzr}}<br />
| 2D real-time strategy game similar to ''The Settlers''. Scripted using a Lua API.<br />
|-<br />
| '''[[w:Xonotic|Xonotic]]'''<br/>- [http://xonotic.org/ xonotic.org]<br />
| style="background:#b5857b;" | C/C++/Java<br/>/Perl<br />
| <abbr title="First-person shooter">FPS</abbr><br />
| style="background:#9F9;" | <abbr title="GNU General Public License version 2">GPLv2</abbr>/<abbr title="GNU General Public License version 3">3</abbr><br />
| {{Pkg|xonotic}}<br/>{{AUR|xonotic-git}}<br />
| First-person shooter game that was forked from Nexuiz but with modified gameplay. <br />
|}<br />
<br />
== See also ==<br />
* [http://liflg.org/ Linux Installers for Linux Gamers]<br />
* [http://www.icculus.org/lgfaq/gamelist.php The Linux Gamers' Game List]<br />
* [https://www.humblebundle.com/ The Humble Bundle]<br />
* [[Wikipedia:Humble Bundle]]<br />
* [http://store.steampowered.com/browse/linux/ Steam Linux store]<br />
* [https://steamdb.info/linux/ List of Linux Steam games]<br />
* [[Wikipedia:List of games developed by Valve]]<br />
* [[Wikipedia:Game engine recreation]]<br />
* [[Wikipedia:Source port]]<br />
* [http://www.lgdb.org/ Linux game database]<br />
* [http://www.penguspy.com/#/All/free_and_commercial/open_closed/sort=1/view=1/limit=0 Penguspy]<br />
* [[Wikipedia:Category:Linux_games|Lists of Linux games on Wikipedia]]<br />
* http://rewiki.regengedanken.de/wiki/Links_to_engine_reimplementations<br />
* [http://lgames.sourceforge.net/about.php LGames - open source games for Linux]<br />
* Debian [[debian:Game/Links|games portal]], [[debian:Games/Links|links]], and [[debian:Games/Suggested|suggested games]]<br />
* [https://wiki.dotslashplay.it/en/start ./play.it list of games]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Category:Emulation&diff=499572Category:Emulation2017-11-26T21:46:49Z<p>Nodiscc: add inline link to Wikipedia:Emulator</p>
<hr />
<div>[[Category:Applications]]<br />
[[cs:Category:Emulators]]<br />
[[el:Category:Emulators]]<br />
[[es:Category:Emulators]]<br />
[[it:Category:Emulators]]<br />
[[ja:Category:エミュレータ]]<br />
[[pt:Category:Emulators]]<br />
[[ru:Category:Emulators]]<br />
[[zh-hans:Category:Emulators]]<br />
[[zh-hant:Category:Emulators]]<br />
From [http://www.computerworld.com/s/article/338993/Emulation_or_Virtualization_ computerworld.com Emulation or virtualization?]:<br />
<br />
:'''''Emulation''' is what we do when we try to make one system behave like or imitate a different system. We want to take System A (something we already have) and give it the inputs we would normally use for System B (which we may not have) and have System A produce the same results as System B.''<br />
:'''''Virtualization''' is a technique for using computing resources and devices in a completely functional manner regardless of their physical layout or location. This includes splitting a single physical computer into multiple "virtual" servers, making it appear as though each virtual machine is running on its own dedicated hardware and allowing each to be rebooted independently.''<br />
<br />
This category contains pages about [[Wikipedia:Emulator|emulators]]. If you are looking for articles about virtualization, see [[:Category:Virtualization]].<br />
For a list of game emulators, see [[Gaming#Emulators]].</div>Nodiscchttps://wiki.archlinux.org/index.php?title=PCSX-Reloaded&diff=499571PCSX-Reloaded2017-11-26T21:45:27Z<p>Nodiscc: /* See also */ add link to http://emulation.gametechwiki.com/index.php/PlayStation_emulators, format list</p>
<hr />
<div>[[Category:Gaming]]<br />
[[Category:Emulators]]<br />
[[ja:PCSX-Reloaded]]<br />
[https://pcsxr.codeplex.com/ PCSX-Reloaded], also known as PCSXR, PCSXr or PCSX-r, is a plugin based console emulator built on top of the [[wikipedia:PSEmu_Pro|PSEmu Pro]] plugin interface, which allows playing Play Station 1 games on a PC. <br />
<br />
Being a plugin based emulator allows more configurability, including setting screen resolutions and texture qualities higher than those supported by the original console.<br />
<br />
==Installation==<br />
<br />
Install the stable {{Pkg|pcsxr}} package or alternately the {{Aur|pcsxr-git}} for the development version.<br />
<br />
Additionally, you can also install the {{Aur|pcsxr-gtk2}} package for the GTK2 version, which allows to run GTK based plugin interfaces without having to install {{Aur|lib32-gtk}} from the [[AUR]].<br />
<br />
Notice, however, that if you have a 64 bit machine and you choose to grab one of the [[AUR]] versions, PCSXR will be compiled to 64 bit architecture, rendering it incompatible with the vast majority of the plugins, which are 32bit only. If you intend to use any plugins other than the ones that come with the emulator, you should install the 32 bit package from the [[Multilib]] repositories.<br />
<br />
==Usage==<br />
Upon the first launch PCSXR will create a hidden directory named {{ic|.pcsxr}} into your home directory, where all the configurations, plugins, savedata and the console bios will be stored. Deleting this directory will reset PCSXR's configuration to it's original state.<br />
===BIOS===<br />
<br />
{{Warning|The installation and use of this emulator requires a Sony PlayStation BIOS file. You may not use such a file to play games in a PSX emulator if you do not own a Sony PlayStation, Sony PSOne or Sony PlayStation 2 console. Owning the BIOS image without owning the actual console is a violation of copyright law. You have been warned.}}<br />
The emulator needs a dump of the bios of a real console to run. That's not provided by PCSXR since using or distributing the bios infringes Sony's Copyrights and is illegal.<br><br><br />
The bios dump must be put into the {{ic|~/.pcsxr/bios/}} directory.<br><br />
PCSXR can also emulate an internal bios, but it is not compatible with all games and presents issues. PCSXR provides an [https://pcsxr.codeplex.com/wikipage?title=PCSX-Reloaded%20incomplete%20HLE%20compatibility%20list&referringTitle=Documentation incomplete compatibility list] on their site.<br />
<br />
===Plugins===<br />
PCSXR already comes with a set of plugins that allows to play out-of-the-box, however, if you wish to install plugins for extra video/sound/joystick/configurability you'll need to put the respective plugins and their configuration files at the {{ic|~/.pcsxr/plugins/}} directory.<br />
Most of the Linux compatible plugins can be found at [http://www.pbernert.com/index.htm Pete's Domain].<br />
<br />
Be aware that some of the plugins will require {{Aur|lib32-gtk}} to show their configuration interface.<br />
<br />
==Configuration==<br />
Configure your Video, Sound, Controllers, CDROM and BIOS by going to {{ic|Configuration > Plugins & Bios}}.<br />
<br />
==Playing==<br />
Run a game from CDROM by clicking {{ic|File > Run CD}} or by pressing {{ic|Ctrl+O}}.<br />
<br />
Run a game from an ISO or BIN file by clicking {{ic|File > Run ISO}} or by pressing {{ic|Ctrl+I}}.<br />
<br />
Run the Play Station BIOS and manage your memory cards and savedata by clicking {{ic|File > Run BIOS}} or by pressing {{ic|Ctrl + B}}.<br />
<br />
===Save States===<br />
PCSXR supports save states, which allows you to save your game progress in any moment, regardless of you being in a savepoint or not and without the need of attaching a new memory card. <br />
<br />
There are 9 slots available for save states, meaning that for each different game you can have up to nine different states saved.<br />
<br />
Save a state by clicking {{ic|Emulator > Save States}} and selecting a slot or by pressing {{ic|Ctrl+Slot Number}} eg. {{ic|Ctrl+1}} for slot 1.<br />
<br />
Load a state by clicking {{ic|Emulator > Load States}} and selecting a state previously saved to a slot or by pressing {{ic|Alt+Slot Number}} eg. {{ic|Alt+1}} for slot 1.<br />
<br />
==Troubleshooting==<br />
===wrong ELF class: ELFCLASS32===<br />
You installed a 64 bit version of the emulator and is trying to run a 32 bit plugin. <br />
Install the 32 bit version of {{Pkg|pcsxr}} found on the [[Multilib]] repository<br />
===cfgPeteXGL2, cfgPeteMesaGL or cfgPeopsOSS not found===<br />
<br />
This issue happens because the latest Linux version of [http://www.pbernert.com/html/gpu.htm Pete's plugins] don't provide the configuration files with them. To solve the problem go to [http://www.pbernert.com/html/gpu.htm Pete's GPU Plugins page] and find the '''Linux GPU Configs''' section, download the configuration files - they will come all together in a .tar.gz file. Fetch the missing ones from the Gzip file and put them on the {{ic|~/.pcsxr/plugins/}} folder and the problem will be solved.<br />
<br />
===PE.Op.S OSS Audio Driver outputs no sound ===<br />
OSS is dated, use the SDL Sound 1.1.0 plugin that comes included with the emulator.<br />
<br />
===PCSXR segfaults when launching a game or the BIOS===<br />
<br />
Segfaults are [https://bbs.archlinux.org/viewtopic.php?pid=1742975 confirmed to happen] in computers that have an Intel HD Graphics 965 installed on them, but the bug is reportedly happening on AMD and NVidia powered PC's as well.<br />
<br />
Open the file {{ic|~/.pcsxr/pcsxr.cfg}} and change the {{ic|Cpu}} property's value from {{ic|0}} to {{ic|1}} to fix it.<br />
<br />
You may also want to investigate the cause of the segfault by examining the [[Core dump]] with [[Core_dump#Examining_a_core_dump|coredumpctl]].<br />
<br />
===Opening the Pete's plugin interface doesn't work: error while loading shared libraries: libgtk-1.2.so.0===<br />
Install {{Aur|lib32-gtk}}. If pacman fails to resolve the dependencies, it's because they're not available on the official repos. Check the dependencies with {{ic|less PKGBUILD}} and install them manually from the [[AUR]].<br />
<br />
== See also ==<br />
<br />
*[[Wikipedia:PCSX-Reloaded]]<br />
*[http://emulation.gametechwiki.com/index.php/PlayStation_emulators Emulation General wiki - Playstation emulators]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Gaming&diff=499569Gaming2017-11-26T21:44:07Z<p>Nodiscc: /* Emulators */ add link to http://emulation.gametechwiki.com/index.php/Main_Page</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of games}}<br />
{{Related|Xorg}}<br />
{{Related articles end}}<br />
<br />
This page only contains information about running games and related system configuration tips. For lists of popular games for GNU/Linux see [[List of games]].<br />
<br />
== Game environments ==<br />
<br />
Different environments exist to play games in Linux:<br />
<br />
* Native &ndash; Games written for Linux.<br />
* Browser &ndash; you need only browser and Internet connection to play these types of games.<br />
** HTML5 games use canvas and WebGL technologies and work in all modern browsers but can be slow on weak machines.<br />
** Plugin-based &ndash; you need to install plugin to play.<br />
*** [[Java]] Webstart &ndash; used to install cross-platform games very easily.<br />
*** [[Flash]] games are very common on the Web.<br />
* Specialized environments (software emulators) &ndash; &ndash; Required for running software designed for other architectures or systems, (Heed the copyright laws of your country!). Check the [[List of applications/Other#Emulators|list of emulators]] for more details.<br />
** [[Wine]] &ndash; allows running of some Windows games, as well as a large amount of Windows software. Performance in Wine varies, the additional CPU overhead will cause slowdown in some games while in some cases games may run faster. Consult [http://appdb.winehq.org/ Wine AppDB] for game-specific compatibility information.<br />
** [http://www.codeweavers.com/ Crossover Games] &ndash; members of the Codeweavers team are prime supporters of Wine. Using Crossover Games makes the installation & setting up of some games easier, more reliable & even possible, when compared to using other methods. Crossover is a paid commercial product, which also provides a [http://www.codeweavers.com/support/forums/ forum] where the developers are very much involved in the community. <br />
** [[DOSBox]] is a minimal virtual machine which runs a full DOS-compatible environment. It can be used to run classic DOS titles.<br />
** {{Pkg|scummvm}} is an all-in-one engine reimplementation of many classic point-and-click adventure games. A full list of compatible titles can be found on the [http://scummvm.org ScummVM website].<br />
** Similar to ScummVM, engine reimplementations exist for specific titles, such as Doom.<br />
* Virtual machines can be used to install compatible operating systems (such as Windows). [[VirtualBox]] has good 3D support. As an extension of this, if you have compatible hardware you can consider VGA passthrough to a Windows KVM guest, keyword is [https://www.kernel.org/doc/Documentation/vfio.txt "virtual function I/O" (VFIO)], or [[PCI passthrough via OVMF]].<br />
<br />
== Getting games ==<br />
<br />
=== Native ===<br />
<br />
A good number are available in the [[official repositories]] or in the [[AUR]]. [http://liflg.org/ Loki] provides installers for several games.<br />
<br />
=== Digital distribution ===<br />
<br />
* {{App|[[Wikipedia:Desura|Desura]]|Digital distribution platform featuring indie games. It can be considered good source of games (if you do not care about security and bugs too much).<br />
|http://www.desura.com/|{{AUR|desura}}}}<br />
<br />
* {{App|[[Steam]]|Famous digital distribution and communications platform developed by Valve. It has a large library with over 1000 Linux games. These include popular titles like Dota 2, Counter Strike: Global Offensive, Team Fortress 2, several AAA games, and lots of indie titles.<br />
|http://store.steampowered.com|{{Pkg|steam}}}}<br />
::*[http://developer.valvesoftware.com/wiki/Steam_under_Linux Steam under Linux.]<br />
::*[http://store.steampowered.com/browse/linux/ See linux-games catalog.]<br />
::*Not all Steam titles are native, some are packaged to run using Wine.<br />
<br />
* The [https://www.humblebundle.com/store Humble Store]<br />
<br />
* {{App|[[Wikipedia:itch.io|itch.io]]|Indie game store.|https://itch.io/|{{AUR|itch}}}}<br />
<br />
* [http://www.gog.com/games/linux GOG.com]<br />
::*The {{AUR|lgogdownloader}} package can be used to download GOG titles from the command line.<br />
::*GOG.com only officially supports Ubuntu and Linux Mint. Bear this in mind if requesting support from them; you will not get a refund if you are having trouble running games on Arch.<br />
::*Many GOG.com titles come pre-packaged with DOSBox, ScummVM or Wine.<br />
<br />
=== Flash ===<br />
<br />
Several huge Flash games portals exists, among them are:<br />
* https://armorgames.com/<br />
* https://www.kongregate.com/<br />
* https://www.newgrounds.com/<br />
<br />
=== Java ===<br />
<br />
* Lots of games smaller than 4kb (some are real masterpieces of game design) can be found at http://www.java4k.com.<br />
* https://www.pogo.com/ &ndash; biggest casual Java gaming portal<br />
* [http://www.javagametome.com/ The Java Game Tome] - huge database of primarily casual games<br />
<br />
=== Wine ===<br />
<br />
* Centralized source of information about running games (and other applications) in [[Wine]] is [http://appdb.winehq.org/ Wine AppDB].<br />
* See also [[:Category:Wine]].<br />
<br />
It is recommended (especially for beginners) to use {{Pkg|playonlinux}}, which pulls all necessary dependencies during installation, automatically downloads Windows tools at first start-up to configure and set-up native windows applications to launch properly. For more information, see [https://www.playonlinux.com/en/ Official Website].<br />
<br />
=== Emulators ===<br />
<br />
An emulator is a program which serves to replicate the functions of another platform or system so as to allow applications and games to be run in environments they were not programmed for.<br />
<br />
See also [[:Category:Emulators]] and the [http://emulation.gametechwiki.com/index.php/Main_Page Emulation General wiki].<br />
<br />
{{Note|1=For possibly more up to date selection of emulators, try checking the [https://aur.archlinux.org/packages.php?O=0&K=&do_Search=Go&detail=1&L=0&C=5&SeB=nd&SB=n&SO=a&PP=25 AUR 'emulators' category]}}<br />
<br />
{{Warning|Owning a high-level emulator is not illegal, but distribution of any type of copyrighted ROMs and unauthorized emulation (without written permission of the copyright holder allowing the user to do so) are '''illegal'''. Consequently, Arch Linux does not distribute this copyrighted content, including game ROMs and ripped console BIOSs. You are fully responsible for whatever usage of the emulators obtained from the [[official repositories]] or the [[Arch User Repository]] you make, as well as any legal repercussion that result. Arch Linux bears no responsibility at all.}}<br />
<br />
==== Consoles ====<br />
<br />
See also [[Wikipedia:List of video game console emulators]].<br />
<br />
* {{App|Citra|Nintendo 3DS emulator.|http://citra-emu.org/|{{AUR|citra-git}}}}<br />
* {{App|DeSmuME|Nintendo DS emulator.|http://desmume.org/|{{Pkg|desmume}}}}<br />
* {{App|[[Dolphin emulator|Dolphin]]|Very capable GameCube and Wii emulator.|http://dolphin-emu.org/|{{Pkg|dolphin-emu}}}}<br />
* {{App|epsxe|Emulator for the PlayStation video game console for x86-based PC hardware.|http://www.epsxe.com/|{{AUR|epsxe}}}}<br />
* {{App|FCEUX|NTSC and PAL 8 bit Nintendo/Famicom emulator that is an evolution of the original FCE Ultra emulator. It is accurate, compatible and actively maintained.|http://fceux.com/|{{Pkg|fceux}}}}<br />
* {{App|Gambatte|Accurate Game Boy Color emulator|https://github.com/sinamas/gambatte|Qt GUI frontend ({{Pkg|gambatte-qt}}), SDL CLI frontend ({{Pkg|gambatte-sdl}}).}}<br />
* {{App|Gens2|Emulator for Sega Genesis, Sega CD and 32X that is written in assembly language and no longer actively developed.<br />
:* activate OpenGL, set video resolution per custom to 1024x600 for streched full-screen or 800x600 for non-streched;<br />
:* use "Normal" renderer, I couldn't find a visible advantage with the other ones.<br />
|http://www.gens.me/|{{Pkg|gens}}}}<br />
<br />
* {{App|Gens-GS|Gens2, rewritten in C++, combining features from various Gens forks.|http://segaretro.org/Gens/GS|{{Pkg|gens-gs}}}}<br />
* {{App|gngeo|Command-line NeoGeo emulator.|http://gngeo.googlecode.com|{{AUR|gngeo}}}}<br />
* {{App|higan|Multisystem emulator focusing on accuracy, supporting SNES, NES, GB, GBC, GBA.|https://byuu.org/emulation/higan/|{{Pkg|higan}}}}<br />
* {{App|mednafen|Command line driven multi system emulator.|http://mednafen.sourceforge.net/|{{Pkg|mednafen}}}}<br />
* {{App|Mupen64Plus|Highly compatible Nintendo 64 emulator with plugin system.<br />
|http://www.mupen64plus.org/|{{Pkg|mupen64plus}} or a graphical front-end, such as {{AUR|m64py}} or {{AUR|cutemupen}}.}}<br />
* {{App|pSX|A not plugin-based PlayStation emulator with fairly high compatibility.|http://psxemulator.gazaxian.com/|{{AUR|psx}}}}<br />
* {{App|[[PCSX-Reloaded|PCSXR]] | PlayStation emulator; Debian fork of the abandoned original PCSX|http://pcsxr.codeplex.com/|{{Pkg|pcsxr}}}}<br />
* {{App|PCSX2|PlayStation 2 emulator. It is still being maintained and developed. It requires BIOS files.|http://www.pcsx2.net/|{{Pkg|pcsx2}}}}<br />
* {{App|PPSSPP|PlayStation Portable emulator.|http://ppsspp.org/|{{Pkg|ppsspp}}}}<br />
* {{App|Snes9x|Portable, freeware Super Nintendo Entertainment System (SNES) emulator.|http://www.snes9x.com/|{{Pkg|snes9x}}}}<br />
* {{App|[[Visual Boy Advance]]|Game Boy emulator with Game Boy Advance, Game Boy Color, and Super Game Boy support.<br />
|http://vba.ngemu.com/|{{Pkg|vbam-gtk}}}}<br />
* {{App|ZSNES|Highly compatible Super Nintendo emulator.<br />
|http://www.zsnes.com/|{{Pkg|zsnes}}}}<br />
<br />
==== Other ====<br />
<br />
* {{App|DOSBox|Open-source DOS emulator which primarily focuses on running DOS Games.|http://www.dosbox.com/|{{Pkg|dosbox}}}}<br />
* {{App|DOSEmu|Open-source DOS emulator.|http://www.dosemu.org/|{{Pkg|dosemu}}}}<br />
* {{App|MAME|Multiple Arcade Machine Emulator.|http://mamedev.org/|{{Pkg|sdlmame}}}}<br />
* {{App|ResidualVM|Cross-platform 3D game interpreter which allows you to play LucasArts' Lua-based 3D adventures.|http://residualvm.org/|{{AUR|residualvm}}}}<br />
* {{App|[[RetroArch]]|Frontend to libretro (emulation library, using modified versions of existing emulators as plugins).|http://www.libretro.com/|{{Pkg|retroarch}}}}<br />
* {{App|ScummVM|Virtual machine for old school adventures.|http://www.scummvm.org/|{{Pkg|scummvm}}}}<br />
* {{App|X Neko Project II|PC-9801 emulator.|http://www.asahi-net.or.jp/~aw9k-nnk/np2/|{{AUR|xnp2}}}}<br />
<br />
== Running games ==<br />
<br />
Certain games or game types may need special configuration to run or to run as expected.<br />
For the most part, games will work right out of the box in Arch Linux with possibly better performance than on other distributions due to compile time optimizations. However, some special setups may require a bit of configuration or scripting to make games run as smoothly as desired.<br />
<br />
=== Multi-screen setups ===<br />
<br />
Running a multi-screen setup may lead to problems with fullscreen games. In such a case, [[#Starting games in a separate X server|running a second X server]] is one possible solution. Another solution may be found in the [[NVIDIA#Gaming using TwinView|NVIDIA article]] (may also apply to non-NVIDIA users).<br />
<br />
=== Keyboard grabbing ===<br />
<br />
Many games grab the keyboard, noticeably preventing you from switching windows (also known as alt-tabbing).<br />
<br />
Some SDL games (e.g. Guacamelee) let you disable grabbing by pressing {{ic|Ctrl-g}}.<br />
<br />
You can also download {{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} to gain the ability to use keyboard commands while in SDL games. If you wish to turn it up to 11, you can disable keyboard grabbing at X11 level using {{AUR|libx11-nokeyboardgrab}}, or with more fine-grained control with {{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} using the {{ic|LD_PRELOAD}} environment variable to run applications with particular grab prevention. Wine/lib32 users should also look at the respective lib32 libraries.<br />
<br />
{{Note|SDL is known to sometimes not be able to grab the input system. In such a case, it may succeed in grabbing it after a few seconds of waiting.}}<br />
<br />
=== Starting games in a separate X server ===<br />
<br />
In some cases like those mentioned above, it may be necessary or desired to run a second X server. Running a second X server has multiple advantages such as better performance, the ability to "tab" out of your game by using {{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}}, no crashing your primary X session (which may have open work on) in case a game conflicts with the graphics driver. The new X server will be akin a remote access login for the ALSA, so your user need to be part of the {{ic|audio}} group to be able to hear any sound.<br />
<br />
To start a second X server (using the free first person shooter game [http://www.xonotic.org/ Xonotic] as an example) you can simply do: <br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
This can further be spiced up by using a separate X configuration file:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
A good reason to provide an alternative ''xorg.conf'' here may be that your primary configuration makes use of NVIDIA's Twinview which would render your 3D games like Xonotic in the middle of your multiscreen setup, spanned across all screens. This is undesirable, thus starting a second X with an alternative config where the second screen is disabled is advised.<br />
<br />
A game starting script making use of Openbox for your home directory or {{ic|/usr/local/bin}} may look like this:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
So after a {{ic|chmod +x}} you would be able to use this script like:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== Adjusting mouse detections ===<br />
<br />
For games that require exceptional amount of mouse skill, adjusting the [[mouse polling rate]] can help improve accuracy.<br />
<br />
=== Mouse focus in GNOME ===<br />
<br />
{{Merge|GNOME}}<br />
<br />
The 'sloppy' and 'mouse' window-focusing modes in [[GNOME]] are known to cause issues with a variety of games, causing a 'click-through' effect. Users can remedy this problem by switching the focus mode to 'click' (with a tool such as {{Pkg|gnome-tweak-tool}}), playing in a different desktop environment, or spawing their game in a separate X-session.<br />
<br />
=== Binaural Audio with OpenAL ===<br />
<br />
For games using [[Wikipedia:OpenAL|OpenAL]], if you use headphones you may get much better positional audio using OpenAL's [[Wikipedia:Head-related transfer function|HRTF]] filters. To enable, run the following command:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
Alternatively, install {{AUR|openal-hrtf}} from the AUR, and edit the options in /etc/openal/alsoftrc.conf<br />
<br />
For Source games, the ingame setting `dsp_slow_cpu` must be set to `1` to enable HRTF, otherwise the game will enable its own processing instead. You will also either need to set up Steam to use native runtime, or link its copy of openal.so to your own local copy. For completeness, also use the following options:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Tuning Pulseaudio ===<br />
<br />
If you are using [[PulseAudio]], you may wish to tweak some default settings to make sure it is running optimally.<br />
<br />
==== Enabling realtime priority and negative nice level ====<br />
<br />
Pulseaudio is built to be run with realtime priority, being an audio daemon. However, because of security risks of it locking up the system, it is scheduled as a regular thread by default. To adjust this, first make sure you are in the {{ic|audio}} group. Then, uncomment and edit the following lines in {{ic|/etc/pulse/daemon.conf}}:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
and restart pulseaudio.<br />
<br />
==== Using higher quality remixing for better sound ====<br />
<br />
Pulseaudio on Arch uses speex-float-0 by default to remix channels, which is considered a 'medium-low' quality remixing. If your system can handle the extra load, you may benefit from setting it to one of the following instead:<br />
resample-method = speex-float-10<br />
<br />
==== Matching hardware buffers to Pulse's buffering ====<br />
<br />
Matching the buffers can reduce stuttering and increase performance marginally. See [http://forums.linuxmint.com/viewtopic.php?f=42&t=44862 here] for more details.<br />
<br />
=== Double check your CPU frequency scaling settings ===<br />
<br />
If your system is currently configured to properly insert its own cpu frequency scaling driver, the system sets the default governor to Ondemand. By default, this governor only adjusts the clock if the system is utilizing 95% of its CPU, and then only for a very short period of time. This saves power and reduces heat, but has a noticeable impact on performance. You can instead only have the system downclock when it is idle, by tuning the system governor. To do so, see [[Cpufrequtils#Improving on-demand performance]]{{Broken section link}}.<br />
<br />
== Improving framerates and responsiveness with scheduling policies ==<br />
Most every game can benefit if given the correct scheduling policies for the kernel to prioritize the task. However, without the help of a daemon, this rescheduling would have to be carried out manually or through the use of several daemons for each policy. These policies should ideally be set per-thread by the application itself, but not all developers implement these policies. There are several methods for getting them to work anyway:<br />
<br />
=== For Wine programs ===<br />
<br />
{{AUR|wine-rt}} is a patched version of Wine that implements scheduling policies on a per-thread basis, using the equivalent of what the Windows developers had intended the threads to be run at. The default patch is more oriented towards professional audio users, and tends to be too heavy-handed of an approach for gaming. You may instead wish to use [http://pastebin.com/D9GBzBBv this patch], which also includes nice levels and uses more than one policy decision. Be warned that it uses {{ic|SCHED_ISO}}, which is only properly implemented on [[Linux-ck]], and will simply renice {{ic|THREAD_PRIORITY_ABOVE_NORMAL}} threads if your system does not support it.<br />
<br />
{{Pkg|wine-staging}} versions 1.9.5 and before incorporate the CSMT patchset which provides better performance for 3D accelerated games. The patchset has been disabled as of 1.9.6 pending an upstream update to the patch and incorporation into the main Wine source tree, so you will need to compile version 1.9.5 of wine-staging yourself if you wish to take advantage of this.<br />
<br />
=== For everything else ===<br />
<br />
For programs which do not implement scheduling policies on their own, one tool known as '''schedtool''', and its associated daemon {{AUR|schedtoold}} can handle many of these tasks automatically.<br />
To edit what programs relieve what policies, simply edit {{ic|/etc/schedtoold.conf}} and add the program followed by the ''schedtool'' arguments desired.<br />
<br />
==== Policies ====<br />
<br />
First and foremost, setting the scheduling policy to {{ic|SCHED_ISO}} will not only allow the process to use a maximum of 80 percent of the CPU, but will attempt to reduce latency and stuttering wherever possible. <br />
{{ic|SCHED_ISO}} requires [[Linux-ck]] to operate, as it has only been implemented in that kernel. [[Linux-ck]] itself provides a hefty latency reduction, and should ideally be installed <br />
Most if not all games will benefit from this:<br />
bit.trip.runner -I<br />
For users not using [[Linux-ck]], {{ic|SCHED_FIFO}} provides an alternative, that can even work better. You should test to see if your applications run more smoothly with {{ic|SCHED_FIFO}}, in which case by all means use it instead. Be warned though, as {{ic|SCHED_FIFO}} runs the risk of starving the system! Use this in cases where -I is used below:<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice levels ====<br />
<br />
Secondly, the nice level sets which tasks are processed first, in ascending order. A nice level of -4 is reccommended for most multimedia tasks, including games:<br />
bit.trip.runner -n -4<br />
<br />
==== Core affinity ====<br />
<br />
There is some confusion in development as to whether the driver should be multithreading, or the program. In any case where they both attempt it, it causes drops in framerate and crashes. Examples of this include a number of modern games, and any Wine program which is running without [[Wikipedia:OpenGL Shading Language|GLSL]] disabled. To select a single core and allow only the driver to handle this process, simply use the {{ic|-a 0x''#''}} flag, where ''#'' is the core number, e.g.: <br />
bit.trip.runner -a 0x1<br />
uses first core.<br />
Some CPUs are hyperthreaded and have only 2 or 4 cores but show up as 4 or 8, and are best accounted for:<br />
bit.trip.runner -a 0x5<br />
which use virtual cores 0101, or 1 and 3.<br />
<br />
==== General case ====<br />
<br />
For most games which require high framerates and low latency, usage of all of these flags seems to work best. Affinity should be checked per-program, however, as most native games can understand the correct usage.<br />
For a general case:<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #Wine with GLSL enabled<br />
etc.<br />
<br />
==== Optimus, and other helping programs ====<br />
<br />
As a general rule, any other process which the game requires to operate should be reniced to a level above that of the game itself. Strangely, Wine has a problem known as ''reverse scheduling'', it can often have benefits when the more important processes are set to a higher nice level. Wineserver also seems unconditionally to benefit from {{ic|SCHED_FIFO}}, since rarely consumes the whole CPU and needs higher prioritization when possible.<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== Using alternate kernels ==<br />
<br />
{{Note|Many users report inconsistant framerate and other performance hits when using [[Linux-ck]], even if the overall framerate is sometimes higher. You may wish to try using {{Pkg|linux-zen}} if you just want BFQ.}}<br />
<br />
The stock Arch kernel provides a very good baseline for general usage. However, if your system has less than 16 cores and is intended for use primarily as a workstation, you can sacrifice a small amount of throughput on batch workloads and gain a significant boost to interactivity by using [[Linux-ck]]. If you prefer not to compile your own kernel, you can instead add [[Repo-ck]] and use one of their kernels. Using a pre-optimized kernel will most definitely offset any loss of throughput that may have occurred as a result, so be sure to select the appropriate kernel for your architecture. <br />
<br />
=== Using BFQ ===<br />
<br />
BFQ is an io-scheduler that comes as a feature of {{Pkg|linux-zen}} and [[Linux-ck]], and is optimized to be much more simplistic, but provides better interactivity and throughput for non-server workloads. To enable, simply add the kernel parameter ''elevator=bfq'' to your [[bootloader]]. It is important to note that although most guides recommend using either ''noop'' or ''deadline'' for SSDs for their raw throughput, they are actually detrimental to interactivity when more than one thread is attempting to access the device. It is best to use ''bfq'' unless you desperately need the throughput advantage.<br />
<br />
== See also ==<br />
* [http://osgameclones.com/ OSGameClones] - List of open source game clones<br />
* [http://freegamer.blogspot.com/ Free Gamer] - Open source games blog<br />
* [http://forum.freegamedev.net/ FreeGameDev] - Free/open source game development community<br />
* [https://fedoraproject.org/wiki/SIGs/Games#Gaming_News_sites SIG/Games] - OS/Linux gaming news sites and lists at Fedora's wiki<br />
* [http://live.linux-gamers.net live.linux-gamers] - Arch-based live gaming distro<br />
* [http://www.gamingonlinux.com/ Gaming on Linux] - Active Linux gaming news and editorial source and community<br />
* [https://www.reddit.com/r/linux_gaming/wiki/index /r/linux_gaming wiki] on Reddit</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Category:Emulation&diff=499567Category:Emulation2017-11-26T21:42:22Z<p>Nodiscc: add link to Gaming#Emulators</p>
<hr />
<div>[[Category:Applications]]<br />
[[cs:Category:Emulators]]<br />
[[el:Category:Emulators]]<br />
[[es:Category:Emulators]]<br />
[[it:Category:Emulators]]<br />
[[ja:Category:エミュレータ]]<br />
[[pt:Category:Emulators]]<br />
[[ru:Category:Emulators]]<br />
[[zh-hans:Category:Emulators]]<br />
[[zh-hant:Category:Emulators]]<br />
From [http://www.computerworld.com/s/article/338993/Emulation_or_Virtualization_ computerworld.com Emulation or virtualization?]:<br />
<br />
:'''''Emulation''' is what we do when we try to make one system behave like or imitate a different system. We want to take System A (something we already have) and give it the inputs we would normally use for System B (which we may not have) and have System A produce the same results as System B.''<br />
:'''''Virtualization''' is a technique for using computing resources and devices in a completely functional manner regardless of their physical layout or location. This includes splitting a single physical computer into multiple "virtual" servers, making it appear as though each virtual machine is running on its own dedicated hardware and allowing each to be rebooted independently.''<br />
<br />
This category contains pages about emulators. If you are looking for articles about virtualization, see [[:Category:Virtualization]].<br />
For a list of game emulators, see [[Gaming#Emulators]].</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Gaming&diff=499565Gaming2017-11-26T21:41:11Z<p>Nodiscc: /* Emulators */ fix :Category:Emulators link syntax</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of games}}<br />
{{Related|Xorg}}<br />
{{Related articles end}}<br />
<br />
This page only contains information about running games and related system configuration tips. For lists of popular games for GNU/Linux see [[List of games]].<br />
<br />
== Game environments ==<br />
<br />
Different environments exist to play games in Linux:<br />
<br />
* Native &ndash; Games written for Linux.<br />
* Browser &ndash; you need only browser and Internet connection to play these types of games.<br />
** HTML5 games use canvas and WebGL technologies and work in all modern browsers but can be slow on weak machines.<br />
** Plugin-based &ndash; you need to install plugin to play.<br />
*** [[Java]] Webstart &ndash; used to install cross-platform games very easily.<br />
*** [[Flash]] games are very common on the Web.<br />
* Specialized environments (software emulators) &ndash; &ndash; Required for running software designed for other architectures or systems, (Heed the copyright laws of your country!). Check the [[List of applications/Other#Emulators|list of emulators]] for more details.<br />
** [[Wine]] &ndash; allows running of some Windows games, as well as a large amount of Windows software. Performance in Wine varies, the additional CPU overhead will cause slowdown in some games while in some cases games may run faster. Consult [http://appdb.winehq.org/ Wine AppDB] for game-specific compatibility information.<br />
** [http://www.codeweavers.com/ Crossover Games] &ndash; members of the Codeweavers team are prime supporters of Wine. Using Crossover Games makes the installation & setting up of some games easier, more reliable & even possible, when compared to using other methods. Crossover is a paid commercial product, which also provides a [http://www.codeweavers.com/support/forums/ forum] where the developers are very much involved in the community. <br />
** [[DOSBox]] is a minimal virtual machine which runs a full DOS-compatible environment. It can be used to run classic DOS titles.<br />
** {{Pkg|scummvm}} is an all-in-one engine reimplementation of many classic point-and-click adventure games. A full list of compatible titles can be found on the [http://scummvm.org ScummVM website].<br />
** Similar to ScummVM, engine reimplementations exist for specific titles, such as Doom.<br />
* Virtual machines can be used to install compatible operating systems (such as Windows). [[VirtualBox]] has good 3D support. As an extension of this, if you have compatible hardware you can consider VGA passthrough to a Windows KVM guest, keyword is [https://www.kernel.org/doc/Documentation/vfio.txt "virtual function I/O" (VFIO)], or [[PCI passthrough via OVMF]].<br />
<br />
== Getting games ==<br />
<br />
=== Native ===<br />
<br />
A good number are available in the [[official repositories]] or in the [[AUR]]. [http://liflg.org/ Loki] provides installers for several games.<br />
<br />
=== Digital distribution ===<br />
<br />
* {{App|[[Wikipedia:Desura|Desura]]|Digital distribution platform featuring indie games. It can be considered good source of games (if you do not care about security and bugs too much).<br />
|http://www.desura.com/|{{AUR|desura}}}}<br />
<br />
* {{App|[[Steam]]|Famous digital distribution and communications platform developed by Valve. It has a large library with over 1000 Linux games. These include popular titles like Dota 2, Counter Strike: Global Offensive, Team Fortress 2, several AAA games, and lots of indie titles.<br />
|http://store.steampowered.com|{{Pkg|steam}}}}<br />
::*[http://developer.valvesoftware.com/wiki/Steam_under_Linux Steam under Linux.]<br />
::*[http://store.steampowered.com/browse/linux/ See linux-games catalog.]<br />
::*Not all Steam titles are native, some are packaged to run using Wine.<br />
<br />
* The [https://www.humblebundle.com/store Humble Store]<br />
<br />
* {{App|[[Wikipedia:itch.io|itch.io]]|Indie game store.|https://itch.io/|{{AUR|itch}}}}<br />
<br />
* [http://www.gog.com/games/linux GOG.com]<br />
::*The {{AUR|lgogdownloader}} package can be used to download GOG titles from the command line.<br />
::*GOG.com only officially supports Ubuntu and Linux Mint. Bear this in mind if requesting support from them; you will not get a refund if you are having trouble running games on Arch.<br />
::*Many GOG.com titles come pre-packaged with DOSBox, ScummVM or Wine.<br />
<br />
=== Flash ===<br />
<br />
Several huge Flash games portals exists, among them are:<br />
* https://armorgames.com/<br />
* https://www.kongregate.com/<br />
* https://www.newgrounds.com/<br />
<br />
=== Java ===<br />
<br />
* Lots of games smaller than 4kb (some are real masterpieces of game design) can be found at http://www.java4k.com.<br />
* https://www.pogo.com/ &ndash; biggest casual Java gaming portal<br />
* [http://www.javagametome.com/ The Java Game Tome] - huge database of primarily casual games<br />
<br />
=== Wine ===<br />
<br />
* Centralized source of information about running games (and other applications) in [[Wine]] is [http://appdb.winehq.org/ Wine AppDB].<br />
* See also [[:Category:Wine]].<br />
<br />
It is recommended (especially for beginners) to use {{Pkg|playonlinux}}, which pulls all necessary dependencies during installation, automatically downloads Windows tools at first start-up to configure and set-up native windows applications to launch properly. For more information, see [https://www.playonlinux.com/en/ Official Website].<br />
<br />
=== Emulators ===<br />
<br />
An emulator is a program which serves to replicate the functions of another platform or system so as to allow applications and games to be run in environments they were not programmed for.<br />
<br />
See also [[:Category:Emulators]].<br />
<br />
{{Note|1=For possibly more up to date selection of emulators, try checking the [https://aur.archlinux.org/packages.php?O=0&K=&do_Search=Go&detail=1&L=0&C=5&SeB=nd&SB=n&SO=a&PP=25 AUR 'emulators' category]}}<br />
<br />
{{Warning|Owning a high-level emulator is not illegal, but distribution of any type of copyrighted ROMs and unauthorized emulation (without written permission of the copyright holder allowing the user to do so) are '''illegal'''. Consequently, Arch Linux does not distribute this copyrighted content, including game ROMs and ripped console BIOSs. You are fully responsible for whatever usage of the emulators obtained from the [[official repositories]] or the [[Arch User Repository]] you make, as well as any legal repercussion that result. Arch Linux bears no responsibility at all.}}<br />
<br />
==== Consoles ====<br />
<br />
See also [[Wikipedia:List of video game console emulators]].<br />
<br />
* {{App|Citra|Nintendo 3DS emulator.|http://citra-emu.org/|{{AUR|citra-git}}}}<br />
* {{App|DeSmuME|Nintendo DS emulator.|http://desmume.org/|{{Pkg|desmume}}}}<br />
* {{App|[[Dolphin emulator|Dolphin]]|Very capable GameCube and Wii emulator.|http://dolphin-emu.org/|{{Pkg|dolphin-emu}}}}<br />
* {{App|epsxe|Emulator for the PlayStation video game console for x86-based PC hardware.|http://www.epsxe.com/|{{AUR|epsxe}}}}<br />
* {{App|FCEUX|NTSC and PAL 8 bit Nintendo/Famicom emulator that is an evolution of the original FCE Ultra emulator. It is accurate, compatible and actively maintained.|http://fceux.com/|{{Pkg|fceux}}}}<br />
* {{App|Gambatte|Accurate Game Boy Color emulator|https://github.com/sinamas/gambatte|Qt GUI frontend ({{Pkg|gambatte-qt}}), SDL CLI frontend ({{Pkg|gambatte-sdl}}).}}<br />
* {{App|Gens2|Emulator for Sega Genesis, Sega CD and 32X that is written in assembly language and no longer actively developed.<br />
:* activate OpenGL, set video resolution per custom to 1024x600 for streched full-screen or 800x600 for non-streched;<br />
:* use "Normal" renderer, I couldn't find a visible advantage with the other ones.<br />
|http://www.gens.me/|{{Pkg|gens}}}}<br />
<br />
* {{App|Gens-GS|Gens2, rewritten in C++, combining features from various Gens forks.|http://segaretro.org/Gens/GS|{{Pkg|gens-gs}}}}<br />
* {{App|gngeo|Command-line NeoGeo emulator.|http://gngeo.googlecode.com|{{AUR|gngeo}}}}<br />
* {{App|higan|Multisystem emulator focusing on accuracy, supporting SNES, NES, GB, GBC, GBA.|https://byuu.org/emulation/higan/|{{Pkg|higan}}}}<br />
* {{App|mednafen|Command line driven multi system emulator.|http://mednafen.sourceforge.net/|{{Pkg|mednafen}}}}<br />
* {{App|Mupen64Plus|Highly compatible Nintendo 64 emulator with plugin system.<br />
|http://www.mupen64plus.org/|{{Pkg|mupen64plus}} or a graphical front-end, such as {{AUR|m64py}} or {{AUR|cutemupen}}.}}<br />
* {{App|pSX|A not plugin-based PlayStation emulator with fairly high compatibility.|http://psxemulator.gazaxian.com/|{{AUR|psx}}}}<br />
* {{App|[[PCSX-Reloaded|PCSXR]] | PlayStation emulator; Debian fork of the abandoned original PCSX|http://pcsxr.codeplex.com/|{{Pkg|pcsxr}}}}<br />
* {{App|PCSX2|PlayStation 2 emulator. It is still being maintained and developed. It requires BIOS files.|http://www.pcsx2.net/|{{Pkg|pcsx2}}}}<br />
* {{App|PPSSPP|PlayStation Portable emulator.|http://ppsspp.org/|{{Pkg|ppsspp}}}}<br />
* {{App|Snes9x|Portable, freeware Super Nintendo Entertainment System (SNES) emulator.|http://www.snes9x.com/|{{Pkg|snes9x}}}}<br />
* {{App|[[Visual Boy Advance]]|Game Boy emulator with Game Boy Advance, Game Boy Color, and Super Game Boy support.<br />
|http://vba.ngemu.com/|{{Pkg|vbam-gtk}}}}<br />
* {{App|ZSNES|Highly compatible Super Nintendo emulator.<br />
|http://www.zsnes.com/|{{Pkg|zsnes}}}}<br />
<br />
==== Other ====<br />
<br />
* {{App|DOSBox|Open-source DOS emulator which primarily focuses on running DOS Games.|http://www.dosbox.com/|{{Pkg|dosbox}}}}<br />
* {{App|DOSEmu|Open-source DOS emulator.|http://www.dosemu.org/|{{Pkg|dosemu}}}}<br />
* {{App|MAME|Multiple Arcade Machine Emulator.|http://mamedev.org/|{{Pkg|sdlmame}}}}<br />
* {{App|ResidualVM|Cross-platform 3D game interpreter which allows you to play LucasArts' Lua-based 3D adventures.|http://residualvm.org/|{{AUR|residualvm}}}}<br />
* {{App|[[RetroArch]]|Frontend to libretro (emulation library, using modified versions of existing emulators as plugins).|http://www.libretro.com/|{{Pkg|retroarch}}}}<br />
* {{App|ScummVM|Virtual machine for old school adventures.|http://www.scummvm.org/|{{Pkg|scummvm}}}}<br />
* {{App|X Neko Project II|PC-9801 emulator.|http://www.asahi-net.or.jp/~aw9k-nnk/np2/|{{AUR|xnp2}}}}<br />
<br />
== Running games ==<br />
<br />
Certain games or game types may need special configuration to run or to run as expected.<br />
For the most part, games will work right out of the box in Arch Linux with possibly better performance than on other distributions due to compile time optimizations. However, some special setups may require a bit of configuration or scripting to make games run as smoothly as desired.<br />
<br />
=== Multi-screen setups ===<br />
<br />
Running a multi-screen setup may lead to problems with fullscreen games. In such a case, [[#Starting games in a separate X server|running a second X server]] is one possible solution. Another solution may be found in the [[NVIDIA#Gaming using TwinView|NVIDIA article]] (may also apply to non-NVIDIA users).<br />
<br />
=== Keyboard grabbing ===<br />
<br />
Many games grab the keyboard, noticeably preventing you from switching windows (also known as alt-tabbing).<br />
<br />
Some SDL games (e.g. Guacamelee) let you disable grabbing by pressing {{ic|Ctrl-g}}.<br />
<br />
You can also download {{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} to gain the ability to use keyboard commands while in SDL games. If you wish to turn it up to 11, you can disable keyboard grabbing at X11 level using {{AUR|libx11-nokeyboardgrab}}, or with more fine-grained control with {{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} using the {{ic|LD_PRELOAD}} environment variable to run applications with particular grab prevention. Wine/lib32 users should also look at the respective lib32 libraries.<br />
<br />
{{Note|SDL is known to sometimes not be able to grab the input system. In such a case, it may succeed in grabbing it after a few seconds of waiting.}}<br />
<br />
=== Starting games in a separate X server ===<br />
<br />
In some cases like those mentioned above, it may be necessary or desired to run a second X server. Running a second X server has multiple advantages such as better performance, the ability to "tab" out of your game by using {{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}}, no crashing your primary X session (which may have open work on) in case a game conflicts with the graphics driver. The new X server will be akin a remote access login for the ALSA, so your user need to be part of the {{ic|audio}} group to be able to hear any sound.<br />
<br />
To start a second X server (using the free first person shooter game [http://www.xonotic.org/ Xonotic] as an example) you can simply do: <br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
This can further be spiced up by using a separate X configuration file:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
A good reason to provide an alternative ''xorg.conf'' here may be that your primary configuration makes use of NVIDIA's Twinview which would render your 3D games like Xonotic in the middle of your multiscreen setup, spanned across all screens. This is undesirable, thus starting a second X with an alternative config where the second screen is disabled is advised.<br />
<br />
A game starting script making use of Openbox for your home directory or {{ic|/usr/local/bin}} may look like this:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
So after a {{ic|chmod +x}} you would be able to use this script like:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== Adjusting mouse detections ===<br />
<br />
For games that require exceptional amount of mouse skill, adjusting the [[mouse polling rate]] can help improve accuracy.<br />
<br />
=== Mouse focus in GNOME ===<br />
<br />
{{Merge|GNOME}}<br />
<br />
The 'sloppy' and 'mouse' window-focusing modes in [[GNOME]] are known to cause issues with a variety of games, causing a 'click-through' effect. Users can remedy this problem by switching the focus mode to 'click' (with a tool such as {{Pkg|gnome-tweak-tool}}), playing in a different desktop environment, or spawing their game in a separate X-session.<br />
<br />
=== Binaural Audio with OpenAL ===<br />
<br />
For games using [[Wikipedia:OpenAL|OpenAL]], if you use headphones you may get much better positional audio using OpenAL's [[Wikipedia:Head-related transfer function|HRTF]] filters. To enable, run the following command:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
Alternatively, install {{AUR|openal-hrtf}} from the AUR, and edit the options in /etc/openal/alsoftrc.conf<br />
<br />
For Source games, the ingame setting `dsp_slow_cpu` must be set to `1` to enable HRTF, otherwise the game will enable its own processing instead. You will also either need to set up Steam to use native runtime, or link its copy of openal.so to your own local copy. For completeness, also use the following options:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Tuning Pulseaudio ===<br />
<br />
If you are using [[PulseAudio]], you may wish to tweak some default settings to make sure it is running optimally.<br />
<br />
==== Enabling realtime priority and negative nice level ====<br />
<br />
Pulseaudio is built to be run with realtime priority, being an audio daemon. However, because of security risks of it locking up the system, it is scheduled as a regular thread by default. To adjust this, first make sure you are in the {{ic|audio}} group. Then, uncomment and edit the following lines in {{ic|/etc/pulse/daemon.conf}}:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
and restart pulseaudio.<br />
<br />
==== Using higher quality remixing for better sound ====<br />
<br />
Pulseaudio on Arch uses speex-float-0 by default to remix channels, which is considered a 'medium-low' quality remixing. If your system can handle the extra load, you may benefit from setting it to one of the following instead:<br />
resample-method = speex-float-10<br />
<br />
==== Matching hardware buffers to Pulse's buffering ====<br />
<br />
Matching the buffers can reduce stuttering and increase performance marginally. See [http://forums.linuxmint.com/viewtopic.php?f=42&t=44862 here] for more details.<br />
<br />
=== Double check your CPU frequency scaling settings ===<br />
<br />
If your system is currently configured to properly insert its own cpu frequency scaling driver, the system sets the default governor to Ondemand. By default, this governor only adjusts the clock if the system is utilizing 95% of its CPU, and then only for a very short period of time. This saves power and reduces heat, but has a noticeable impact on performance. You can instead only have the system downclock when it is idle, by tuning the system governor. To do so, see [[Cpufrequtils#Improving on-demand performance]]{{Broken section link}}.<br />
<br />
== Improving framerates and responsiveness with scheduling policies ==<br />
Most every game can benefit if given the correct scheduling policies for the kernel to prioritize the task. However, without the help of a daemon, this rescheduling would have to be carried out manually or through the use of several daemons for each policy. These policies should ideally be set per-thread by the application itself, but not all developers implement these policies. There are several methods for getting them to work anyway:<br />
<br />
=== For Wine programs ===<br />
<br />
{{AUR|wine-rt}} is a patched version of Wine that implements scheduling policies on a per-thread basis, using the equivalent of what the Windows developers had intended the threads to be run at. The default patch is more oriented towards professional audio users, and tends to be too heavy-handed of an approach for gaming. You may instead wish to use [http://pastebin.com/D9GBzBBv this patch], which also includes nice levels and uses more than one policy decision. Be warned that it uses {{ic|SCHED_ISO}}, which is only properly implemented on [[Linux-ck]], and will simply renice {{ic|THREAD_PRIORITY_ABOVE_NORMAL}} threads if your system does not support it.<br />
<br />
{{Pkg|wine-staging}} versions 1.9.5 and before incorporate the CSMT patchset which provides better performance for 3D accelerated games. The patchset has been disabled as of 1.9.6 pending an upstream update to the patch and incorporation into the main Wine source tree, so you will need to compile version 1.9.5 of wine-staging yourself if you wish to take advantage of this.<br />
<br />
=== For everything else ===<br />
<br />
For programs which do not implement scheduling policies on their own, one tool known as '''schedtool''', and its associated daemon {{AUR|schedtoold}} can handle many of these tasks automatically.<br />
To edit what programs relieve what policies, simply edit {{ic|/etc/schedtoold.conf}} and add the program followed by the ''schedtool'' arguments desired.<br />
<br />
==== Policies ====<br />
<br />
First and foremost, setting the scheduling policy to {{ic|SCHED_ISO}} will not only allow the process to use a maximum of 80 percent of the CPU, but will attempt to reduce latency and stuttering wherever possible. <br />
{{ic|SCHED_ISO}} requires [[Linux-ck]] to operate, as it has only been implemented in that kernel. [[Linux-ck]] itself provides a hefty latency reduction, and should ideally be installed <br />
Most if not all games will benefit from this:<br />
bit.trip.runner -I<br />
For users not using [[Linux-ck]], {{ic|SCHED_FIFO}} provides an alternative, that can even work better. You should test to see if your applications run more smoothly with {{ic|SCHED_FIFO}}, in which case by all means use it instead. Be warned though, as {{ic|SCHED_FIFO}} runs the risk of starving the system! Use this in cases where -I is used below:<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice levels ====<br />
<br />
Secondly, the nice level sets which tasks are processed first, in ascending order. A nice level of -4 is reccommended for most multimedia tasks, including games:<br />
bit.trip.runner -n -4<br />
<br />
==== Core affinity ====<br />
<br />
There is some confusion in development as to whether the driver should be multithreading, or the program. In any case where they both attempt it, it causes drops in framerate and crashes. Examples of this include a number of modern games, and any Wine program which is running without [[Wikipedia:OpenGL Shading Language|GLSL]] disabled. To select a single core and allow only the driver to handle this process, simply use the {{ic|-a 0x''#''}} flag, where ''#'' is the core number, e.g.: <br />
bit.trip.runner -a 0x1<br />
uses first core.<br />
Some CPUs are hyperthreaded and have only 2 or 4 cores but show up as 4 or 8, and are best accounted for:<br />
bit.trip.runner -a 0x5<br />
which use virtual cores 0101, or 1 and 3.<br />
<br />
==== General case ====<br />
<br />
For most games which require high framerates and low latency, usage of all of these flags seems to work best. Affinity should be checked per-program, however, as most native games can understand the correct usage.<br />
For a general case:<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #Wine with GLSL enabled<br />
etc.<br />
<br />
==== Optimus, and other helping programs ====<br />
<br />
As a general rule, any other process which the game requires to operate should be reniced to a level above that of the game itself. Strangely, Wine has a problem known as ''reverse scheduling'', it can often have benefits when the more important processes are set to a higher nice level. Wineserver also seems unconditionally to benefit from {{ic|SCHED_FIFO}}, since rarely consumes the whole CPU and needs higher prioritization when possible.<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== Using alternate kernels ==<br />
<br />
{{Note|Many users report inconsistant framerate and other performance hits when using [[Linux-ck]], even if the overall framerate is sometimes higher. You may wish to try using {{Pkg|linux-zen}} if you just want BFQ.}}<br />
<br />
The stock Arch kernel provides a very good baseline for general usage. However, if your system has less than 16 cores and is intended for use primarily as a workstation, you can sacrifice a small amount of throughput on batch workloads and gain a significant boost to interactivity by using [[Linux-ck]]. If you prefer not to compile your own kernel, you can instead add [[Repo-ck]] and use one of their kernels. Using a pre-optimized kernel will most definitely offset any loss of throughput that may have occurred as a result, so be sure to select the appropriate kernel for your architecture. <br />
<br />
=== Using BFQ ===<br />
<br />
BFQ is an io-scheduler that comes as a feature of {{Pkg|linux-zen}} and [[Linux-ck]], and is optimized to be much more simplistic, but provides better interactivity and throughput for non-server workloads. To enable, simply add the kernel parameter ''elevator=bfq'' to your [[bootloader]]. It is important to note that although most guides recommend using either ''noop'' or ''deadline'' for SSDs for their raw throughput, they are actually detrimental to interactivity when more than one thread is attempting to access the device. It is best to use ''bfq'' unless you desperately need the throughput advantage.<br />
<br />
== See also ==<br />
* [http://osgameclones.com/ OSGameClones] - List of open source game clones<br />
* [http://freegamer.blogspot.com/ Free Gamer] - Open source games blog<br />
* [http://forum.freegamedev.net/ FreeGameDev] - Free/open source game development community<br />
* [https://fedoraproject.org/wiki/SIGs/Games#Gaming_News_sites SIG/Games] - OS/Linux gaming news sites and lists at Fedora's wiki<br />
* [http://live.linux-gamers.net live.linux-gamers] - Arch-based live gaming distro<br />
* [http://www.gamingonlinux.com/ Gaming on Linux] - Active Linux gaming news and editorial source and community<br />
* [https://www.reddit.com/r/linux_gaming/wiki/index /r/linux_gaming wiki] on Reddit</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Gaming&diff=499562Gaming2017-11-26T21:38:29Z<p>Nodiscc: /* Emulators */ add link to Category:Emulators</p>
<hr />
<div>[[Category:Gaming]]<br />
[[da:List of games]]<br />
[[es:List of games]]<br />
[[it:List of games]]<br />
[[ja:ゲーム]]<br />
[[lt:Games]]<br />
[[ru:Gaming]]<br />
[[zh-hans:List of games]]<br />
{{Related articles start}}<br />
{{Related|List of games}}<br />
{{Related|Xorg}}<br />
{{Related articles end}}<br />
<br />
This page only contains information about running games and related system configuration tips. For lists of popular games for GNU/Linux see [[List of games]].<br />
<br />
== Game environments ==<br />
<br />
Different environments exist to play games in Linux:<br />
<br />
* Native &ndash; Games written for Linux.<br />
* Browser &ndash; you need only browser and Internet connection to play these types of games.<br />
** HTML5 games use canvas and WebGL technologies and work in all modern browsers but can be slow on weak machines.<br />
** Plugin-based &ndash; you need to install plugin to play.<br />
*** [[Java]] Webstart &ndash; used to install cross-platform games very easily.<br />
*** [[Flash]] games are very common on the Web.<br />
* Specialized environments (software emulators) &ndash; &ndash; Required for running software designed for other architectures or systems, (Heed the copyright laws of your country!). Check the [[List of applications/Other#Emulators|list of emulators]] for more details.<br />
** [[Wine]] &ndash; allows running of some Windows games, as well as a large amount of Windows software. Performance in Wine varies, the additional CPU overhead will cause slowdown in some games while in some cases games may run faster. Consult [http://appdb.winehq.org/ Wine AppDB] for game-specific compatibility information.<br />
** [http://www.codeweavers.com/ Crossover Games] &ndash; members of the Codeweavers team are prime supporters of Wine. Using Crossover Games makes the installation & setting up of some games easier, more reliable & even possible, when compared to using other methods. Crossover is a paid commercial product, which also provides a [http://www.codeweavers.com/support/forums/ forum] where the developers are very much involved in the community. <br />
** [[DOSBox]] is a minimal virtual machine which runs a full DOS-compatible environment. It can be used to run classic DOS titles.<br />
** {{Pkg|scummvm}} is an all-in-one engine reimplementation of many classic point-and-click adventure games. A full list of compatible titles can be found on the [http://scummvm.org ScummVM website].<br />
** Similar to ScummVM, engine reimplementations exist for specific titles, such as Doom.<br />
* Virtual machines can be used to install compatible operating systems (such as Windows). [[VirtualBox]] has good 3D support. As an extension of this, if you have compatible hardware you can consider VGA passthrough to a Windows KVM guest, keyword is [https://www.kernel.org/doc/Documentation/vfio.txt "virtual function I/O" (VFIO)], or [[PCI passthrough via OVMF]].<br />
<br />
== Getting games ==<br />
<br />
=== Native ===<br />
<br />
A good number are available in the [[official repositories]] or in the [[AUR]]. [http://liflg.org/ Loki] provides installers for several games.<br />
<br />
=== Digital distribution ===<br />
<br />
* {{App|[[Wikipedia:Desura|Desura]]|Digital distribution platform featuring indie games. It can be considered good source of games (if you do not care about security and bugs too much).<br />
|http://www.desura.com/|{{AUR|desura}}}}<br />
<br />
* {{App|[[Steam]]|Famous digital distribution and communications platform developed by Valve. It has a large library with over 1000 Linux games. These include popular titles like Dota 2, Counter Strike: Global Offensive, Team Fortress 2, several AAA games, and lots of indie titles.<br />
|http://store.steampowered.com|{{Pkg|steam}}}}<br />
::*[http://developer.valvesoftware.com/wiki/Steam_under_Linux Steam under Linux.]<br />
::*[http://store.steampowered.com/browse/linux/ See linux-games catalog.]<br />
::*Not all Steam titles are native, some are packaged to run using Wine.<br />
<br />
* The [https://www.humblebundle.com/store Humble Store]<br />
<br />
* {{App|[[Wikipedia:itch.io|itch.io]]|Indie game store.|https://itch.io/|{{AUR|itch}}}}<br />
<br />
* [http://www.gog.com/games/linux GOG.com]<br />
::*The {{AUR|lgogdownloader}} package can be used to download GOG titles from the command line.<br />
::*GOG.com only officially supports Ubuntu and Linux Mint. Bear this in mind if requesting support from them; you will not get a refund if you are having trouble running games on Arch.<br />
::*Many GOG.com titles come pre-packaged with DOSBox, ScummVM or Wine.<br />
<br />
=== Flash ===<br />
<br />
Several huge Flash games portals exists, among them are:<br />
* https://armorgames.com/<br />
* https://www.kongregate.com/<br />
* https://www.newgrounds.com/<br />
<br />
=== Java ===<br />
<br />
* Lots of games smaller than 4kb (some are real masterpieces of game design) can be found at http://www.java4k.com.<br />
* https://www.pogo.com/ &ndash; biggest casual Java gaming portal<br />
* [http://www.javagametome.com/ The Java Game Tome] - huge database of primarily casual games<br />
<br />
=== Wine ===<br />
<br />
* Centralized source of information about running games (and other applications) in [[Wine]] is [http://appdb.winehq.org/ Wine AppDB].<br />
* See also [[:Category:Wine]].<br />
<br />
It is recommended (especially for beginners) to use {{Pkg|playonlinux}}, which pulls all necessary dependencies during installation, automatically downloads Windows tools at first start-up to configure and set-up native windows applications to launch properly. For more information, see [https://www.playonlinux.com/en/ Official Website].<br />
<br />
=== Emulators ===<br />
<br />
An emulator is a program which serves to replicate the functions of another platform or system so as to allow applications and games to be run in environments they were not programmed for.<br />
<br />
See also [[Category:Emulators]].<br />
<br />
{{Note|1=For possibly more up to date selection of emulators, try checking the [https://aur.archlinux.org/packages.php?O=0&K=&do_Search=Go&detail=1&L=0&C=5&SeB=nd&SB=n&SO=a&PP=25 AUR 'emulators' category]}}<br />
<br />
{{Warning|Owning a high-level emulator is not illegal, but distribution of any type of copyrighted ROMs and unauthorized emulation (without written permission of the copyright holder allowing the user to do so) are '''illegal'''. Consequently, Arch Linux does not distribute this copyrighted content, including game ROMs and ripped console BIOSs. You are fully responsible for whatever usage of the emulators obtained from the [[official repositories]] or the [[Arch User Repository]] you make, as well as any legal repercussion that result. Arch Linux bears no responsibility at all.}}<br />
<br />
==== Consoles ====<br />
<br />
See also [[Wikipedia:List of video game console emulators]].<br />
<br />
* {{App|Citra|Nintendo 3DS emulator.|http://citra-emu.org/|{{AUR|citra-git}}}}<br />
* {{App|DeSmuME|Nintendo DS emulator.|http://desmume.org/|{{Pkg|desmume}}}}<br />
* {{App|[[Dolphin emulator|Dolphin]]|Very capable GameCube and Wii emulator.|http://dolphin-emu.org/|{{Pkg|dolphin-emu}}}}<br />
* {{App|epsxe|Emulator for the PlayStation video game console for x86-based PC hardware.|http://www.epsxe.com/|{{AUR|epsxe}}}}<br />
* {{App|FCEUX|NTSC and PAL 8 bit Nintendo/Famicom emulator that is an evolution of the original FCE Ultra emulator. It is accurate, compatible and actively maintained.|http://fceux.com/|{{Pkg|fceux}}}}<br />
* {{App|Gambatte|Accurate Game Boy Color emulator|https://github.com/sinamas/gambatte|Qt GUI frontend ({{Pkg|gambatte-qt}}), SDL CLI frontend ({{Pkg|gambatte-sdl}}).}}<br />
* {{App|Gens2|Emulator for Sega Genesis, Sega CD and 32X that is written in assembly language and no longer actively developed.<br />
:* activate OpenGL, set video resolution per custom to 1024x600 for streched full-screen or 800x600 for non-streched;<br />
:* use "Normal" renderer, I couldn't find a visible advantage with the other ones.<br />
|http://www.gens.me/|{{Pkg|gens}}}}<br />
<br />
* {{App|Gens-GS|Gens2, rewritten in C++, combining features from various Gens forks.|http://segaretro.org/Gens/GS|{{Pkg|gens-gs}}}}<br />
* {{App|gngeo|Command-line NeoGeo emulator.|http://gngeo.googlecode.com|{{AUR|gngeo}}}}<br />
* {{App|higan|Multisystem emulator focusing on accuracy, supporting SNES, NES, GB, GBC, GBA.|https://byuu.org/emulation/higan/|{{Pkg|higan}}}}<br />
* {{App|mednafen|Command line driven multi system emulator.|http://mednafen.sourceforge.net/|{{Pkg|mednafen}}}}<br />
* {{App|Mupen64Plus|Highly compatible Nintendo 64 emulator with plugin system.<br />
|http://www.mupen64plus.org/|{{Pkg|mupen64plus}} or a graphical front-end, such as {{AUR|m64py}} or {{AUR|cutemupen}}.}}<br />
* {{App|pSX|A not plugin-based PlayStation emulator with fairly high compatibility.|http://psxemulator.gazaxian.com/|{{AUR|psx}}}}<br />
* {{App|[[PCSX-Reloaded|PCSXR]] | PlayStation emulator; Debian fork of the abandoned original PCSX|http://pcsxr.codeplex.com/|{{Pkg|pcsxr}}}}<br />
* {{App|PCSX2|PlayStation 2 emulator. It is still being maintained and developed. It requires BIOS files.|http://www.pcsx2.net/|{{Pkg|pcsx2}}}}<br />
* {{App|PPSSPP|PlayStation Portable emulator.|http://ppsspp.org/|{{Pkg|ppsspp}}}}<br />
* {{App|Snes9x|Portable, freeware Super Nintendo Entertainment System (SNES) emulator.|http://www.snes9x.com/|{{Pkg|snes9x}}}}<br />
* {{App|[[Visual Boy Advance]]|Game Boy emulator with Game Boy Advance, Game Boy Color, and Super Game Boy support.<br />
|http://vba.ngemu.com/|{{Pkg|vbam-gtk}}}}<br />
* {{App|ZSNES|Highly compatible Super Nintendo emulator.<br />
|http://www.zsnes.com/|{{Pkg|zsnes}}}}<br />
<br />
==== Other ====<br />
<br />
* {{App|DOSBox|Open-source DOS emulator which primarily focuses on running DOS Games.|http://www.dosbox.com/|{{Pkg|dosbox}}}}<br />
* {{App|DOSEmu|Open-source DOS emulator.|http://www.dosemu.org/|{{Pkg|dosemu}}}}<br />
* {{App|MAME|Multiple Arcade Machine Emulator.|http://mamedev.org/|{{Pkg|sdlmame}}}}<br />
* {{App|ResidualVM|Cross-platform 3D game interpreter which allows you to play LucasArts' Lua-based 3D adventures.|http://residualvm.org/|{{AUR|residualvm}}}}<br />
* {{App|[[RetroArch]]|Frontend to libretro (emulation library, using modified versions of existing emulators as plugins).|http://www.libretro.com/|{{Pkg|retroarch}}}}<br />
* {{App|ScummVM|Virtual machine for old school adventures.|http://www.scummvm.org/|{{Pkg|scummvm}}}}<br />
* {{App|X Neko Project II|PC-9801 emulator.|http://www.asahi-net.or.jp/~aw9k-nnk/np2/|{{AUR|xnp2}}}}<br />
<br />
== Running games ==<br />
<br />
Certain games or game types may need special configuration to run or to run as expected.<br />
For the most part, games will work right out of the box in Arch Linux with possibly better performance than on other distributions due to compile time optimizations. However, some special setups may require a bit of configuration or scripting to make games run as smoothly as desired.<br />
<br />
=== Multi-screen setups ===<br />
<br />
Running a multi-screen setup may lead to problems with fullscreen games. In such a case, [[#Starting games in a separate X server|running a second X server]] is one possible solution. Another solution may be found in the [[NVIDIA#Gaming using TwinView|NVIDIA article]] (may also apply to non-NVIDIA users).<br />
<br />
=== Keyboard grabbing ===<br />
<br />
Many games grab the keyboard, noticeably preventing you from switching windows (also known as alt-tabbing).<br />
<br />
Some SDL games (e.g. Guacamelee) let you disable grabbing by pressing {{ic|Ctrl-g}}.<br />
<br />
You can also download {{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} to gain the ability to use keyboard commands while in SDL games. If you wish to turn it up to 11, you can disable keyboard grabbing at X11 level using {{AUR|libx11-nokeyboardgrab}}, or with more fine-grained control with {{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} using the {{ic|LD_PRELOAD}} environment variable to run applications with particular grab prevention. Wine/lib32 users should also look at the respective lib32 libraries.<br />
<br />
{{Note|SDL is known to sometimes not be able to grab the input system. In such a case, it may succeed in grabbing it after a few seconds of waiting.}}<br />
<br />
=== Starting games in a separate X server ===<br />
<br />
In some cases like those mentioned above, it may be necessary or desired to run a second X server. Running a second X server has multiple advantages such as better performance, the ability to "tab" out of your game by using {{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}}, no crashing your primary X session (which may have open work on) in case a game conflicts with the graphics driver. The new X server will be akin a remote access login for the ALSA, so your user need to be part of the {{ic|audio}} group to be able to hear any sound.<br />
<br />
To start a second X server (using the free first person shooter game [http://www.xonotic.org/ Xonotic] as an example) you can simply do: <br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
This can further be spiced up by using a separate X configuration file:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
A good reason to provide an alternative ''xorg.conf'' here may be that your primary configuration makes use of NVIDIA's Twinview which would render your 3D games like Xonotic in the middle of your multiscreen setup, spanned across all screens. This is undesirable, thus starting a second X with an alternative config where the second screen is disabled is advised.<br />
<br />
A game starting script making use of Openbox for your home directory or {{ic|/usr/local/bin}} may look like this:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
So after a {{ic|chmod +x}} you would be able to use this script like:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== Adjusting mouse detections ===<br />
<br />
For games that require exceptional amount of mouse skill, adjusting the [[mouse polling rate]] can help improve accuracy.<br />
<br />
=== Mouse focus in GNOME ===<br />
<br />
{{Merge|GNOME}}<br />
<br />
The 'sloppy' and 'mouse' window-focusing modes in [[GNOME]] are known to cause issues with a variety of games, causing a 'click-through' effect. Users can remedy this problem by switching the focus mode to 'click' (with a tool such as {{Pkg|gnome-tweak-tool}}), playing in a different desktop environment, or spawing their game in a separate X-session.<br />
<br />
=== Binaural Audio with OpenAL ===<br />
<br />
For games using [[Wikipedia:OpenAL|OpenAL]], if you use headphones you may get much better positional audio using OpenAL's [[Wikipedia:Head-related transfer function|HRTF]] filters. To enable, run the following command:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
Alternatively, install {{AUR|openal-hrtf}} from the AUR, and edit the options in /etc/openal/alsoftrc.conf<br />
<br />
For Source games, the ingame setting `dsp_slow_cpu` must be set to `1` to enable HRTF, otherwise the game will enable its own processing instead. You will also either need to set up Steam to use native runtime, or link its copy of openal.so to your own local copy. For completeness, also use the following options:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Tuning Pulseaudio ===<br />
<br />
If you are using [[PulseAudio]], you may wish to tweak some default settings to make sure it is running optimally.<br />
<br />
==== Enabling realtime priority and negative nice level ====<br />
<br />
Pulseaudio is built to be run with realtime priority, being an audio daemon. However, because of security risks of it locking up the system, it is scheduled as a regular thread by default. To adjust this, first make sure you are in the {{ic|audio}} group. Then, uncomment and edit the following lines in {{ic|/etc/pulse/daemon.conf}}:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
and restart pulseaudio.<br />
<br />
==== Using higher quality remixing for better sound ====<br />
<br />
Pulseaudio on Arch uses speex-float-0 by default to remix channels, which is considered a 'medium-low' quality remixing. If your system can handle the extra load, you may benefit from setting it to one of the following instead:<br />
resample-method = speex-float-10<br />
<br />
==== Matching hardware buffers to Pulse's buffering ====<br />
<br />
Matching the buffers can reduce stuttering and increase performance marginally. See [http://forums.linuxmint.com/viewtopic.php?f=42&t=44862 here] for more details.<br />
<br />
=== Double check your CPU frequency scaling settings ===<br />
<br />
If your system is currently configured to properly insert its own cpu frequency scaling driver, the system sets the default governor to Ondemand. By default, this governor only adjusts the clock if the system is utilizing 95% of its CPU, and then only for a very short period of time. This saves power and reduces heat, but has a noticeable impact on performance. You can instead only have the system downclock when it is idle, by tuning the system governor. To do so, see [[Cpufrequtils#Improving on-demand performance]]{{Broken section link}}.<br />
<br />
== Improving framerates and responsiveness with scheduling policies ==<br />
Most every game can benefit if given the correct scheduling policies for the kernel to prioritize the task. However, without the help of a daemon, this rescheduling would have to be carried out manually or through the use of several daemons for each policy. These policies should ideally be set per-thread by the application itself, but not all developers implement these policies. There are several methods for getting them to work anyway:<br />
<br />
=== For Wine programs ===<br />
<br />
{{AUR|wine-rt}} is a patched version of Wine that implements scheduling policies on a per-thread basis, using the equivalent of what the Windows developers had intended the threads to be run at. The default patch is more oriented towards professional audio users, and tends to be too heavy-handed of an approach for gaming. You may instead wish to use [http://pastebin.com/D9GBzBBv this patch], which also includes nice levels and uses more than one policy decision. Be warned that it uses {{ic|SCHED_ISO}}, which is only properly implemented on [[Linux-ck]], and will simply renice {{ic|THREAD_PRIORITY_ABOVE_NORMAL}} threads if your system does not support it.<br />
<br />
{{Pkg|wine-staging}} versions 1.9.5 and before incorporate the CSMT patchset which provides better performance for 3D accelerated games. The patchset has been disabled as of 1.9.6 pending an upstream update to the patch and incorporation into the main Wine source tree, so you will need to compile version 1.9.5 of wine-staging yourself if you wish to take advantage of this.<br />
<br />
=== For everything else ===<br />
<br />
For programs which do not implement scheduling policies on their own, one tool known as '''schedtool''', and its associated daemon {{AUR|schedtoold}} can handle many of these tasks automatically.<br />
To edit what programs relieve what policies, simply edit {{ic|/etc/schedtoold.conf}} and add the program followed by the ''schedtool'' arguments desired.<br />
<br />
==== Policies ====<br />
<br />
First and foremost, setting the scheduling policy to {{ic|SCHED_ISO}} will not only allow the process to use a maximum of 80 percent of the CPU, but will attempt to reduce latency and stuttering wherever possible. <br />
{{ic|SCHED_ISO}} requires [[Linux-ck]] to operate, as it has only been implemented in that kernel. [[Linux-ck]] itself provides a hefty latency reduction, and should ideally be installed <br />
Most if not all games will benefit from this:<br />
bit.trip.runner -I<br />
For users not using [[Linux-ck]], {{ic|SCHED_FIFO}} provides an alternative, that can even work better. You should test to see if your applications run more smoothly with {{ic|SCHED_FIFO}}, in which case by all means use it instead. Be warned though, as {{ic|SCHED_FIFO}} runs the risk of starving the system! Use this in cases where -I is used below:<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice levels ====<br />
<br />
Secondly, the nice level sets which tasks are processed first, in ascending order. A nice level of -4 is reccommended for most multimedia tasks, including games:<br />
bit.trip.runner -n -4<br />
<br />
==== Core affinity ====<br />
<br />
There is some confusion in development as to whether the driver should be multithreading, or the program. In any case where they both attempt it, it causes drops in framerate and crashes. Examples of this include a number of modern games, and any Wine program which is running without [[Wikipedia:OpenGL Shading Language|GLSL]] disabled. To select a single core and allow only the driver to handle this process, simply use the {{ic|-a 0x''#''}} flag, where ''#'' is the core number, e.g.: <br />
bit.trip.runner -a 0x1<br />
uses first core.<br />
Some CPUs are hyperthreaded and have only 2 or 4 cores but show up as 4 or 8, and are best accounted for:<br />
bit.trip.runner -a 0x5<br />
which use virtual cores 0101, or 1 and 3.<br />
<br />
==== General case ====<br />
<br />
For most games which require high framerates and low latency, usage of all of these flags seems to work best. Affinity should be checked per-program, however, as most native games can understand the correct usage.<br />
For a general case:<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #Wine with GLSL enabled<br />
etc.<br />
<br />
==== Optimus, and other helping programs ====<br />
<br />
As a general rule, any other process which the game requires to operate should be reniced to a level above that of the game itself. Strangely, Wine has a problem known as ''reverse scheduling'', it can often have benefits when the more important processes are set to a higher nice level. Wineserver also seems unconditionally to benefit from {{ic|SCHED_FIFO}}, since rarely consumes the whole CPU and needs higher prioritization when possible.<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== Using alternate kernels ==<br />
<br />
{{Note|Many users report inconsistant framerate and other performance hits when using [[Linux-ck]], even if the overall framerate is sometimes higher. You may wish to try using {{Pkg|linux-zen}} if you just want BFQ.}}<br />
<br />
The stock Arch kernel provides a very good baseline for general usage. However, if your system has less than 16 cores and is intended for use primarily as a workstation, you can sacrifice a small amount of throughput on batch workloads and gain a significant boost to interactivity by using [[Linux-ck]]. If you prefer not to compile your own kernel, you can instead add [[Repo-ck]] and use one of their kernels. Using a pre-optimized kernel will most definitely offset any loss of throughput that may have occurred as a result, so be sure to select the appropriate kernel for your architecture. <br />
<br />
=== Using BFQ ===<br />
<br />
BFQ is an io-scheduler that comes as a feature of {{Pkg|linux-zen}} and [[Linux-ck]], and is optimized to be much more simplistic, but provides better interactivity and throughput for non-server workloads. To enable, simply add the kernel parameter ''elevator=bfq'' to your [[bootloader]]. It is important to note that although most guides recommend using either ''noop'' or ''deadline'' for SSDs for their raw throughput, they are actually detrimental to interactivity when more than one thread is attempting to access the device. It is best to use ''bfq'' unless you desperately need the throughput advantage.<br />
<br />
== See also ==<br />
* [http://osgameclones.com/ OSGameClones] - List of open source game clones<br />
* [http://freegamer.blogspot.com/ Free Gamer] - Open source games blog<br />
* [http://forum.freegamedev.net/ FreeGameDev] - Free/open source game development community<br />
* [https://fedoraproject.org/wiki/SIGs/Games#Gaming_News_sites SIG/Games] - OS/Linux gaming news sites and lists at Fedora's wiki<br />
* [http://live.linux-gamers.net live.linux-gamers] - Arch-based live gaming distro<br />
* [http://www.gamingonlinux.com/ Gaming on Linux] - Active Linux gaming news and editorial source and community<br />
* [https://www.reddit.com/r/linux_gaming/wiki/index /r/linux_gaming wiki] on Reddit</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Ruby&diff=498771Ruby2017-11-24T22:56:03Z<p>Nodiscc: /* See also */ add http://blog.hyfather.com/blog/2011/10/18/bundler/</p>
<hr />
<div>[[Category:Programming languages]]<br />
[[ja:Ruby]]<br />
[[zh-hans:Ruby]]<br />
Ruby is a dynamic, interpreted, open source programming language with a focus on simplicity and productivity.<br />
<br />
== Installing Ruby ==<br />
<br />
For the latest version of Ruby, [[install]] the {{Pkg|ruby}} package. It includes [[#RubyGems|RubyGems]].<br />
<br />
=== Multiple versions ===<br />
<br />
If you want to run multiple versions on the same system (e.g. 2.0.0-p0 and 1.9.3-p392), the easiest way is to use [[RVM]], {{AUR|chruby}} or [[rbenv]].<br />
<br />
=== Documentation ===<br />
<br />
To make documentation available through the included {{ic|ri}} command-line tool, install {{Pkg|ruby-docs}}.<br />
You can then query the docs with: {{ic|ri Array}}, {{ic|ri Array.pop}} etc. (much like man-pages)<br />
<br />
== RubyGems ==<br />
<br />
RubyGems is a package manager for Ruby modules (called ''gems''), somewhat comparable to what [[pacman]] is to Arch Linux. It is included in the {{pkg|ruby}} package.<br />
<br />
=== Setup ===<br />
<br />
To allow using {{ic|gem}}, [[append]] {{ic|$(ruby -e 'print Gem.user_dir')/bin}} to current [[user]] {{ic|PATH}} [[environment variable]]:<br />
<br />
{{hc|1=~/.profile|2=<br />
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"<br />
}}<br />
<br />
This is required for executable gems to work without typing out the full location, although libraries will work without having to modify your path.<br />
<br />
If the method above does not work, you can try adding these lines at the end of your shell configuration file instead:<br />
<br />
#Setting the GEM_PATH and GEM_HOME variables may not be necessary, check 'gem env' output to verify whether both variables already exist <br />
GEM_HOME=$(ls -t -U | ruby -e 'puts Gem.user_dir')<br />
GEM_PATH=$GEM_HOME<br />
export PATH=$PATH:$GEM_HOME/bin<br />
<br />
=== Usage ===<br />
<br />
To see what gems are installed:<br />
$ gem list<br />
<br />
To get information about a gem:<br />
$ gem spec ''gem_name''<br />
<br />
By default, {{ic|gem list}} and {{ic|gem spec}} use the {{ic|--local}} option, which forces ''gem'' to search only the local system. This can be overridden with the {{ic|--remote}} flag. Thus, to search for the mysql gem:<br />
$ gem list --remote mysql<br />
<br />
To install a gem:<br />
$ gem install mysql<br />
<br />
The process can be sped up somewhat if you do not need local documentation:<br />
$ gem install mysql --no-document<br />
<br />
{{Note|This can be made the default option by configuring the following {{ic|~/.gemrc}} file:<br />
{{hc|~/.gemrc|<nowiki><br />
gem: --no-document<br />
</nowiki>}}<br />
}}<br />
<br />
To update all installed gems:<br />
$ gem update<br />
<br />
=== Installing gems per-user or system-wide ===<br />
<br />
By default in Arch Linux, when running {{ic|gem}}, gems are installed per-user (into {{ic|~/.gem/ruby/}}), instead of system-wide (into {{ic|/usr/lib/ruby/gems/}}). This is considered the best way to manage gems on Arch, because otherwise they might interfere with gems installed by Pacman.<br />
<br />
Gems can be installed system wide by running the {{ic|gem}} command as root, appended with the {{ic|--no-user-install}} flag. This flag can be set as default by replacing {{ic|--user-install}} by {{ic|--no-user-install}} in {{ic|/etc/gemrc}} (system-wide) or {{ic|~/.gemrc}} (per-user, overrides system-wide).<br />
<br />
[[#Bundler|Bundler]] solves these problems to some extent by packaging gems into your application. See the section below on using bundler.<br />
<br />
=== Bundler ===<br />
<br />
[http://bundler.io Bundler] allows you to specify which gems your application depends upon, and optionally which version those gems should be. Once this specification is in place, Bundler installs all required gems (including the full gem dependency tree) and logs the results for later inspection. By default, Bundler installs gems into a shared location, but they can also be installed directly into your application. When your application is run, Bundler provides the correct version of each gem, even if multiple versions of each gem have been installed. This requires a little bit of work: applications should be called with {{ic|bundle exec}}, and two lines of boilerplate code must be placed in your application's main executable.<br />
<br />
To install Bundler:<br />
$ gem install bundler<br />
<br />
By default, Bundler installs gems system-wide, which is contrary to the behaviour of ''gem'' itself on Arch. To correct this, add the following to your {{ic|~/.bashrc}}:<br />
export GEM_HOME=$(ruby -e 'print Gem.user_dir')<br />
<br />
To start a new bundle:<br />
$ bundle init<br />
<br />
Then edit {{ic|Gemfile}} in the current directory (created by bundle init) and list your required gems:<br />
{{hc|Gemfile|<br />
gem "rails", "3.2.9"<br />
gem "mysql"<br />
}}<br />
<br />
Run the following to install gems into {{ic|GEM_HOME}}:<br />
$ bundle install<br />
<br />
Alternatively, run the following to install gems to {{ic|.bundle}} in the working directory:<br />
$ bundle install --path .bundle<br />
<br />
Don't forget to edit your main executable:<br />
{{bc|#!/usr/bin/env ruby<br />
<br />
# "This will automatically discover your Gemfile, and make all of the gems in<br />
# your Gemfile available to Ruby." http://bundler.io/rationale.html<br />
require 'bundler/setup'<br />
<br />
...<br />
}}<br />
<br />
Finally, run your program:<br />
bundle exec ''main_executable_name.rb''<br />
<br />
=== Managing RubyGems using pacman ===<br />
<br />
Instead of managing gems with {{ic|gem}}, you can use [[pacman]], or an [[AUR]] helper. Ruby packages follow the naming convention ruby-''gemname''.<br />
<br />
This option provides the following advantages:<br />
* Gems are updated along with the rest of your system.<br />
* Installed gems are available system-wide, instead of being available only to the user who installed them.<br />
<br />
{{Note|There are also tools integrating ''gem'' with ''pacman'' by automatically generating PKGBUILDs for specified gems: see [[Creating packages#PKGBUILD generators]].}}<br />
<br />
==== Quarry ====<br />
<br />
Quarry is an opensource tool (GPL3 license) that allows to maintain [http://rubygems.org rubygems] binary repository for Arch Linux, as an easier alternative to building packages manually from the AUR. The source is hosted at [https://github.com/anatol/quarry github].<br />
<br />
The repository is maintained by Arch developer anatolik at http://pkgbuild.com/~anatolik/quarry/, and is currently for the x86_64 architecture only. It contains many popular gems and new gems can be added upon request.<br />
<br />
See [[Unofficial user repositories#quarry]] to enable it.<br />
<br />
Then install required gem {{ic|# pacman -S ruby-$gemname}}.<br />
<br />
If you have general questions - send it at the project announcement https://bbs.archlinux.org/viewtopic.php?id=182729<br><br />
If you have bugreports or code improvements - file at github https://github.com/anatol/quarry<br />
<br />
== See also ==<br />
<br />
* [[Ruby on Rails]]<br />
* Ruby - http://ruby-lang.org/<br />
* Bundler - http://bundler.io/<br />
* [[wikipedia:Why's_(poignant)_Guide_to_Ruby|why's (poignant) Guide to Ruby]]<br />
* [http://ruby.learncodethehardway.org/ Learn Ruby The Hard Way]<br />
* [http://blog.hyfather.com/blog/2011/10/18/bundler/ Comparison of Bundler and RVM workflows]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=OpenSSH&diff=498770OpenSSH2017-11-24T22:52:18Z<p>Nodiscc: /* Troubleshooting */ add note about ctrl+s freezing the session</p>
<hr />
<div>[[Category:Secure Shell]]<br />
[[fa:SSH]]<br />
[[ar:Secure Shell]]<br />
[[de:SSH]]<br />
[[es:Secure Shell]]<br />
[[fr:ssh]]<br />
[[it:Secure Shell]]<br />
[[ja:Secure Shell]]<br />
[[ko:Secure Shell]]<br />
[[pl:Secure Shell]]<br />
[[pt:Secure Shell]]<br />
[[ru:Secure Shell]]<br />
[[sr:Secure Shell]]<br />
[[zh-hans:Secure Shell]]<br />
{{Related articles start}}<br />
{{Related|SSH keys}}<br />
{{Related|Pam abl}}<br />
{{Related|fail2ban}}<br />
{{Related|sshguard}}<br />
{{Related|Sshfs}}<br />
{{Related|Syslog-ng}}<br />
{{Related|SFTP chroot}}<br />
{{Related|SCP and SFTP}}<br />
{{Related articles end}}<br />
<br />
Secure Shell (SSH) is a network protocol that allows data to be exchanged over a secure channel between two computers. Encryption provides confidentiality and integrity of data. SSH uses public-key cryptography to authenticate the remote computer and allow the remote computer to authenticate the user, if necessary.<br />
<br />
SSH is typically used to log into a remote machine and execute commands, but it also supports tunneling, forwarding arbitrary TCP ports and X11 connections; file transfer can be accomplished using the associated SFTP or SCP protocols.<br />
<br />
An SSH server, by default, listens on the standard TCP port 22. An SSH client program is typically used for establishing connections to an ''sshd'' daemon accepting remote connections. Both are commonly present on most modern operating systems, including macOS, GNU/Linux, Solaris and OpenVMS. Proprietary, freeware and open source versions of various levels of complexity and completeness exist.<br />
<br />
== OpenSSH ==<br />
OpenSSH (OpenBSD Secure Shell) is a set of computer programs providing encrypted communication sessions over a computer network using the ssh protocol. It was created as an open source alternative to the proprietary Secure Shell software suite offered by SSH Communications Security. OpenSSH is developed as part of the OpenBSD project, which is led by Theo de Raadt.<br />
<br />
OpenSSH is occasionally confused with the similarly-named OpenSSL; however, the projects have different purposes and are developed by different teams, the similar name is drawn only from similar goals.<br />
<br />
=== Installation ===<br />
<br />
[[Install]] the {{Pkg|openssh}} package.<br />
<br />
=== Client usage ===<br />
<br />
To connect to a server, run:<br />
<br />
$ ssh -p ''port'' ''user''@''server-address''<br />
<br />
If the server only allows public-key authentication, follow [[SSH keys]].<br />
<br />
==== Configuration ====<br />
<br />
The client can be configured to store common options and hosts. All options can be declared globally or restricted to specific hosts. For example:<br />
<br />
{{hc|~/.ssh/config|# global options<br />
User ''user''<br />
<br />
# host-specific options<br />
Host myserver<br />
HostName ''server-address''<br />
Port ''port''}}<br />
<br />
With such a configuration, the following commands are equivalent<br />
<br />
$ ssh -p ''port'' ''user''@''server-address''<br />
$ ssh myserver<br />
<br />
See {{man|5|ssh_config}} for more information.<br />
<br />
Some options do not have command line switch equivalents, but you can specify config options on the command line with {{ic|-o}}. For example {{ic|1=-oKexAlgorithms=+diffie-hellman-group1-sha1}}.<br />
<br />
=== Server usage ===<br />
<br />
==== Configuration ====<br />
<br />
The SSH daemon configuration file can be found and edited in {{ic|/etc/ssh/ssh'''d'''_config}}.<br />
<br />
To allow access only for some users add this line:<br />
AllowUsers ''user1 user2''<br />
<br />
To allow access only for some groups:<br />
AllowGroups ''group1 group2''<br />
<br />
To add a nice welcome message (e.g. from the {{ic|/etc/issue}} file), configure the {{ic|Banner}} option:<br />
Banner /etc/issue<br />
<br />
Host keys will be generated automatically by the ''sshd'' [[#Daemon_management|service files]]. If you want sshd to use a particular key which you have provided, you can configure it manually:<br />
HostKey /etc/ssh/ssh_host_rsa_key<br />
<br />
If the server is to be exposed to the WAN, it is recommended to change the default port from 22 to a random higher one like this:<br />
Port 39901<br />
<br />
To help select a port review the [[Wikipedia:List of TCP and UDP port numbers|list of TCP and UDP port numbers]]. You can also find port information locally in {{ic|/etc/services}}. Select an alternative port that is '''not''' already assigned to a common service to prevent conflicts. A port change from default port 22 is recommended, because it will reduce the ''number'' of log entries caused by automated authentication attempts - not eliminate them. See [[Port knocking]] for related information. <br />
<br />
{{Note|OpenSSH can also listen on multiple ports simply by having multiple '''Port x''' lines in the config file.}}<br />
<br />
It is also recommended to disable password logins entirely. This will greatly increase security, see [[#Force public key authentication]] for more information. See [[#Protection]] for more recommend security methods.<br />
<br />
==== Daemon management ====<br />
<br />
{{Pkg|openssh}} comes with two kinds of [[systemd]] service files:<br />
#{{ic|sshd.service}}, which will keep the SSH daemon permanently active and fork for each incoming connection.[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/sshd.service?h=packages/openssh#n16] It is especially suitable for systems with a large amount of SSH traffic.[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/sshd.service?h=packages/openssh&id=4cadf5dff444e4b7265f8918652f4e6dff733812#n15] <br />
#{{ic|sshd.socket}} + {{ic|sshd@.service}}, which spawn on-demand instances of the SSH daemon per connection. Using it implies that ''systemd'' listens on the SSH socket and will only start the daemon process for an incoming connection. It is the recommended way to run {{ic|sshd}} in almost all cases.[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/sshd.service?h=packages/openssh&id=4cadf5dff444e4b7265f8918652f4e6dff733812#n18][http://lists.freedesktop.org/archives/systemd-devel/2011-January/001107.html][http://0pointer.de/blog/projects/inetd.html]<br />
<br />
You can [[start]] and [[enable]] either {{ic|sshd.service}} '''or''' {{ic|sshd.socket}} to begin using the daemon.<br />
<br />
If using the socket service, you will need to [[edit]] the unit file if you want it to listen on a port other than the default 22:<br />
<br />
{{hc|# systemctl edit sshd.socket|<nowiki><br />
[Socket]<br />
ListenStream=<br />
ListenStream=12345<br />
</nowiki>}}<br />
<br />
{{Warning|Using {{ic|sshd.socket}} negates the {{ic|ListenAddress}} setting, so it will allow connections over any address. To achieve the effect of setting {{ic|ListenAddress}}, you must specify the port ''and'' IP for {{ic|ListenStream}} (e.g. {{ic|1=ListenStream=192.168.1.100:22}}). You must also add {{ic|1=FreeBind=true}} under {{ic|[Socket]}} or else setting the IP address will have the same drawback as setting {{ic|ListenAddress}}: the socket will fail to start if the network is not up in time.}}<br />
<br />
{{Tip|When using socket activation neither {{ic|sshd.socket}} nor the daemon's regular {{ic|sshd.service}} allow to monitor connection attempts in the log, but executing {{ic|# journalctl /usr/bin/sshd}} does.}}<br />
<br />
==== Protection ====<br />
<br />
Allowing remote log-on through SSH is good for administrative purposes, but can pose a threat to your server's security. Often the target of brute force attacks, SSH access needs to be limited properly to prevent third parties gaining access to your server.<br />
<br />
Several other good guides are available on the topic, for example:<br />
*[https://wiki.mozilla.org/Security/Guidelines/OpenSSH Article by Mozilla Infosec Team]<br />
*[https://stribika.github.io/2015/01/04/secure-secure-shell.html Secure sshd]<br />
<br />
===== Force public key authentication =====<br />
<br />
If a client cannot authenticate through a public key, by default the SSH server falls back to password authentication, thus allowing a malicious user to attempt to gain access by [[#Protecting against brute force attacks|brute-forcing]] the password. One of the most effective ways to protect against this attack is to disable password logins entirely, and force the use of [[SSH keys]]. This can be accomplished by disabling the following options in {{ic|sshd_config}}:<br />
<br />
PasswordAuthentication no<br />
<br />
{{Warning|Before adding this to your configuration, make sure that all accounts which require SSH access have public-key authentication set up in the corresponding {{ic|authorized_keys}} files. See [[SSH keys#Copying the public key to the remote server]] for more information.}}<br />
<br />
===== Two-factor authentication and public keys =====<br />
<br />
Since OpenSSH 6.2, you can add your own chain to authenticate with using the {{ic|AuthenticationMethods}} option. This enables you to use public keys as well as a two-factor authorization.<br />
<br />
See [[Google Authenticator]] to set up Google Authenticator.<br />
<br />
To use [[PAM]] with OpenSSH, edit the following files:<br />
<br />
{{hc|/etc/ssh/sshd_config|<br />
ChallengeResponseAuthentication yes<br />
AuthenticationMethods publickey keyboard-interactive:pam<br />
}}<br />
<br />
Then you can log in with either a publickey '''or''' the user authentication as required by your PAM setup.<br />
<br />
If, on the other hand, you want to authenticate the user on both a publickey '''and''' the user authentication as required by your PAM setup, use a comma instead of a space to separate the AuthenticationMethods:<br />
<br />
{{hc|/etc/ssh/sshd_config|<br />
ChallengeResponseAuthentication yes<br />
AuthenticationMethods publickey,keyboard-interactive:pam<br />
}}<br />
<br />
With required pubkey '''and''' pam authentication you may wish to disable the password requirement:<br />
{{hc|/etc/pam.d/sshd|<br />
auth required pam_securetty.so #disable remote root<br />
#Require google authenticator<br />
auth required pam_google_authenticator.so<br />
#But not password<br />
#auth include system-remote-login<br />
account include system-remote-login<br />
password include system-remote-login<br />
session include system-remote-login<br />
}}<br />
<br />
===== Protecting against brute force attacks =====<br />
Brute forcing is a simple concept: One continuously tries to log in to a webpage or server log-in prompt like SSH with a high number of random username and password combinations.<br />
<br />
====== Using ufw ======<br />
<br />
See [[ufw#Rate limiting with ufw]].<br />
<br />
====== Using iptables ======<br />
<br />
{{Merge|Simple_stateful_firewall#Bruteforce_attacks|Out of scope, same technique as already described in the SSF.}}<br />
<br />
If you are already using iptables you can easily protect SSH against brute force attacks by using the following rules. <br />
<br />
{{note|In this example the SSH port was changed to port 42660 TCP.}}<br />
<br />
Before the following rules can be used we create a new rule chain to log and drop too many connection attempts:<br />
<br />
# iptables -N LOG_AND_DROP<br />
<br />
The first rule will be applied to packets that signal the start of new connections headed for TCP port 42660<br />
<br />
# iptables -A INPUT -p tcp -m tcp --dport 42660 -m state --state NEW -m recent --set --name DEFAULT --rsource<br />
<br />
The next rule tells iptables to look for packets that match the previous rule's parameters, and which also come from hosts already added to the watch list.<br />
<br />
# iptables -A INPUT -p tcp -m tcp --dport 42660 -m state --state NEW -m recent --update --seconds 90 --hitcount 4 --name DEFAULT --rsource -j LOG_AND_DROP<br />
<br />
Now iptables decides what to do with TCP traffic to port 42660 which does not match the previous rule.<br />
<br />
# iptables -A INPUT -p tcp -m tcp --dport 42660 -j ACCEPT<br />
<br />
We are appending this rule to the LOG_AND_DROP table, and we use the -j (jump) operator to pass the packet's information to the logging facility<br />
<br />
# iptables -A LOG_AND_DROP -j LOG --log-prefix "iptables deny: " --log-level 7<br />
<br />
After they are logged by the first rule, all packets are then dropped<br />
<br />
# iptables -A LOG_AND_DROP -j DROP<br />
<br />
====== Anti-brute-force tools ======<br />
<br />
You can protect yourself from brute force attacks by using an automated script that blocks anybody trying to brute force their way in, for example [[fail2ban]] or [[sshguard]].<br />
<br />
* Only allow incoming SSH connections from trusted locations<br />
* Use [[fail2ban]] or [[sshguard]] to automatically block IP addresses that fail password authentication too many times.<br />
* Use [https://github.com/jtniehof/pam_shield pam_shield] to block IP addresses that perform too many login attempts within a certain period of time. In contrast to [[fail2ban]] or [[sshguard]], this program does not take login success or failure into account.<br />
<br />
===== Limit root login =====<br />
{{Out of date|Root login has been disabled by default upstream in the current version. Unclear to me what parts of this section and subsections are redundant.}}<br />
<br />
It is generally considered bad practice to allow the root user to log in without restraint over SSH. There are two methods by which SSH root access can be restricted for increased security.<br />
<br />
====== Deny ======<br />
<br />
Sudo selectively provides root rights for actions requiring these without requiring authenticating against the root account. This allows locking the root account against access via SSH and potentially functions as a security measure against brute force attacks, since now an attacker must guess the account name in addition to the password.<br />
<br />
SSH can be configured to deny remote logins with the root user by editing the "Authentication" section in {{ic|/etc/ssh/sshd_config}}. Simply change {{ic|#PermitRootLogin prohibit-password}} to {{ic|no}} and uncomment the line:<br />
<br />
{{hc|/etc/ssh/sshd_config|<br />
PermitRootLogin no<br />
...<br />
}}<br />
<br />
Next, [[restart]] the SSH daemon.<br />
<br />
You will now be unable to log in through SSH under root, but will still be able to log in with your normal user and use [[su]] or [[sudo]] to do system administration.<br />
<br />
====== Restrict ======<br />
<br />
Some automated tasks such as remote, full-system backup require full root access. To allow these in a secure way, instead of disabling root login via SSH, it is possible to only allow root logins for selected commands. This can be achieved by editing {{ic|~root/.ssh/authorized_keys}}, by prefixing the desired key, e.g. as follows:<br />
<br />
command="/usr/lib/rsync/rrsync -ro /" ssh-rsa …<br />
<br />
This will allow any login with this specific key only to execute the command specified between the quotes.<br />
<br />
The increased attack surface created by exposing the root user name at login can be compensated by adding the following to {{ic|sshd_config}}:<br />
<br />
PermitRootLogin forced-commands-only<br />
<br />
This setting will not only restrict the commands which root may execute via SSH, but it will also disable the use of passwords, forcing use of public key authentication for the root account.<br />
<br />
A slightly less restrictive alternative will allow any command for root, but makes brute force attacks infeasible by enforcing public key authentication. For this option, set:<br />
<br />
PermitRootLogin without-password<br />
<br />
===== Securing the authorized_keys file =====<br />
<br />
For additional protection, you can prevent users from adding new public keys and connecting from them.<br />
<br />
In the server, make the {{ic|authorized_keys}} file read-only for the user and deny all other permissions:<br />
$ chmod 400 ~/.ssh/authorized_keys<br />
<br />
To keep the user from simply changing the permissions back, [[File permissions and attributes#chattr and lsattr|set the immutable bit]] on the {{ic|authorized_keys}} file. After that the user could rename the {{ic|~/.ssh}} directory to something else and create a new {{ic|~/.ssh}} directory and {{ic|authorized_keys}} file. To prevent this, set the immutable bit on the {{ic|~/.ssh}} directory too.<br />
<br />
{{Note|If you find yourself needing to add a new key, you will first have to remove the immutable bit from {{ic|authorized_keys}} and make it writable. Follow the steps above to secure it again.}}<br />
<br />
== Other SSH clients and servers ==<br />
Apart from OpenSSH, there are many SSH [[Wikipedia:Comparison of SSH clients|clients]] and [[Wikipedia:Comparison of SSH servers|servers]] available.<br />
<br />
=== Dropbear ===<br />
[[Wikipedia:Dropbear (software)|Dropbear]] is a SSH-2 client and server. {{Pkg|dropbear}} is available in the [[official repositories]].<br />
<br />
The command-line ssh client is named dbclient.<br />
<br />
=== Mosh ===<br />
From the Mosh [http://mosh.mit.edu/ website]:<br />
<br />
:Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes. Mosh is a replacement for SSH. It is more robust and responsive, especially over slow connections such as Wi-Fi, cellular, and long-distance.<br />
<br />
[[Install]] the {{Pkg|mosh}} package, or {{AUR|mosh-git}} for the latest revision.<br />
<br />
Mosh has an undocumented command line option {{ic|1=--predict=experimental}} which produces more aggressive echoing of local keystrokes. Users interested in low-latency visual confirmation of keyboard input may prefer this prediction mode.<br />
<br />
{{Note|Mosh by design does not let you access session history, consider installing a terminal multiplexer such as [[tmux]] or [[screen]].}}<br />
<br />
== Tips and tricks ==<br />
<br />
{{Accuracy|According to the current layout, this section seems rather generic, but in fact most of the offered tips work only in ''openssh''. For example ''dropbear'' (listed in [[#Other SSH clients and servers]]) does not support SOCKS proxy.[https://en.wikipedia.org/wiki/Comparison_of_SSH_clients#Technical]}}<br />
<br />
=== Encrypted SOCKS tunnel ===<br />
<br />
This is highly useful for laptop users connected to various unsafe wireless connections. The only thing you need is an SSH server running at a somewhat secure location, like your home or at work. It might be useful to use a dynamic DNS service like [http://www.dyndns.org/ DynDNS] so you do not have to remember your IP-address.<br />
<br />
==== Step 1: start the connection ====<br />
<br />
You only have to execute this single command to start the connection:<br />
<br />
$ ssh -TND 4711 ''user''@''host''<br />
<br />
where {{Ic|''user''}} is your username at the SSH server running at the {{Ic|''host''}}. It will ask for your password, and then you are connected! The {{Ic|N}} flag disables the interactive prompt, and the {{Ic|D}} flag specifies the local port on which to listen on (you can choose any port number if you want). The {{Ic|T}} flag disables pseudo-tty allocation.<br />
<br />
It is nice to add the verbose ({{Ic|-v}}) flag, because then you can verify that it is actually connected from that output.<br />
<br />
==== Step 2: configure your browser (or other programs) ====<br />
<br />
The above step is completely useless if you do not configure your web browser (or other programs) to use this newly created socks tunnel. Since the current version of SSH supports both SOCKS4 and SOCKS5, you can use either of them.<br />
<br />
* For Firefox: ''Edit > Preferences > Advanced > Network > Connection > Setting'': <br> Check the ''Manual proxy configuration'' radio button, and enter {{ic|localhost}} in the ''SOCKS host'' text field, and then enter your port number in the next text field ({{ic|4711}} in the example above).<br />
<br />
Firefox does not automatically make DNS requests through the socks tunnel. This potential privacy concern can be mitigated by the following steps:<br />
<br />
# Type about:config into the Firefox location bar.<br />
# Search for network.proxy.socks_remote_dns<br />
# Set the value to true.<br />
# Restart the browser.<br />
<br />
* For Chromium: You can set the SOCKS settings as environment variables or as command line options. I recommend to add one of the following functions to your {{ic|.bashrc}}:<br />
function secure_chromium {<br />
port=4711<br />
export SOCKS_SERVER=localhost:$port<br />
export SOCKS_VERSION=5<br />
chromium &<br />
exit<br />
}<br />
OR<br />
function secure_chromium {<br />
port=4711<br />
chromium --proxy-server="socks://localhost:$port" &<br />
exit<br />
}<br />
<br />
Now open a terminal and just do:<br />
$ secure_chromium<br />
<br />
Enjoy your secure tunnel!<br />
<br />
=== X11 forwarding ===<br />
<br />
X11 forwarding is a mechanism that allows graphical interfaces of X11 programs running on a remote system to be displayed on a local client machine. For X11 forwarding the remote host does not need to have a full X11 system installed, however it needs at least to have ''xauth'' installed. ''xauth'' is a utility that maintains {{ic|Xauthority}} configurations used by server and client for authentication of X11 session ([http://xmodulo.com/2012/11/how-to-enable-x11-forwarding-using-ssh.html source]).<br />
<br />
{{Warning|X11 forwarding has important security implications which should be at least acknowledged by reading relevant sections of {{man|1|ssh}}, {{man|5|sshd_config}}, and {{man|5|ssh_config}} manual pages. See also [https://security.stackexchange.com/questions/14815/security-concerns-with-x11-forwarding a short writeup]}}<br />
<br />
==== Setup ====<br />
<br />
On the remote system:<br />
<br />
*[[install]] the {{Pkg|xorg-xauth}} and {{Pkg|xorg-xhost}} packages<br />
*in {{ic|/etc/ssh/ssh'''d'''_config}}:<br />
**verify that {{ic|AllowTcpForwarding}} and {{ic|X11UseLocalhost}} options are set to ''yes'', and that {{ic|X11DisplayOffset}} is set to ''10'' (those are the default values if nothing has been changed, see {{man|5|sshd_config}})<br />
**set {{ic|X11Forwarding}} to ''yes''<br />
* then [[restart]] the [[#Daemon management|''sshd'' daemon]]. <br />
<br />
On the client side, enable the {{ic|ForwardX11}} option by either specifying the {{ic|-X}} switch on the command line for opportunistic connections, or by setting {{ic|ForwardX11}} to ''yes'' in the [[#Configuration|client's configuration]].<br />
<br />
{{Tip|You can enable the {{ic|ForwardX11Trusted}} option ({{ic|-Y}} switch on the command line) if GUI is drawing badly or you receive errors; this will prevent X11 forwardings from being subjected to the [http://www.x.org/wiki/Development/Documentation/Security/ X11 SECURITY extension] controls. Be sure you have read [[#X11 forwarding|the warning]] at the beginning of this section if you do so.}}<br />
<br />
==== Usage ====<br />
<br />
{{Accuracy|{{ic|xhost}} is [http://unix.stackexchange.com/questions/12755/how-to-forward-x-over-ssh-from-ubuntu-machine#comment-17148 generally not needed]}}<br />
<br />
Log on to the remote machine normally, specifying the {{ic|-X}} switch if ''ForwardX11'' was not enabled in the client's configuration file:<br />
$ ssh -X ''user@host''<br />
If you receive errors trying to run graphical applications, try ''ForwardX11Trusted'' instead:<br />
$ ssh -Y ''user@host''<br />
You can now start any X program on the remote server, the output will be forwarded to your local session:<br />
$ xclock<br />
<br />
If you get "Cannot open display" errors try the following command as the non root user:<br />
$ xhost +<br />
<br />
The above command will allow anybody to forward X11 applications. To restrict forwarding to a particular host type:<br />
$ xhost +hostname<br />
<br />
where hostname is the name of the particular host you want to forward to. See {{man|1|xhost}} for more details.<br />
<br />
Be careful with some applications as they check for a running instance on the local machine. [[Firefox]] is an example: either close the running Firefox instance or use the following start parameter to start a remote instance on the local machine:<br />
$ firefox --no-remote<br />
<br />
If you get "X11 forwarding request failed on channel 0" when you connect (and the server {{ic|/var/log/errors.log}} shows "Failed to allocate internet-domain X11 display socket"), make sure package {{Pkg|xorg-xauth}} is installed. If its installation is not working, try to either:<br />
<br />
* enable the {{ic|AddressFamily any}} option in {{ic|ssh'''d'''_config}} on the ''server'', or<br />
* set the {{ic|AddressFamily}} option in {{ic|ssh'''d'''_config}} on the ''server'' to inet.<br />
Setting it to inet may fix problems with Ubuntu clients on IPv4.<br />
<br />
For running X applications as other user on the SSH server you need to {{Ic|xauth add}} the authentication line taken from {{Ic|xauth list}} of the SSH logged in user.<br />
<br />
{{Tip|[http://unix.stackexchange.com/a/12772/29867 Here] are [http://unix.stackexchange.com/a/46748/29867 some] useful [http://superuser.com/a/805060/185665 links] for troubleshooting {{ic|X11 Forwarding}} issues.}}<br />
<br />
=== Forwarding other ports ===<br />
<br />
In addition to SSH's built-in support for X11, it can also be used to securely tunnel any TCP connection, by use of local forwarding or remote forwarding.<br />
<br />
Local forwarding opens a port on the local machine, connections to which will be forwarded to the remote host and from there on to a given destination. Very often, the forwarding destination will be the same as the remote host, thus providing a secure shell and, e.g. a secure VNC connection, to the same machine. Local forwarding is accomplished by means of the {{Ic|-L}} switch and it is accompanying forwarding specification in the form of {{Ic|<tunnel port>:<destination address>:<destination port>}}.<br />
<br />
Thus:<br />
<br />
$ ssh -L 1000:mail.google.com:25 192.168.0.100<br />
<br />
will use SSH to login to and open a shell on 192.168.0.100, and will also create a tunnel from the local machine's TCP port 1000 to mail.google.com on port 25. Once established, connections to localhost:1000 will connect to the Gmail SMTP port. To Google, it will appear that any such connection (though not necessarily the data conveyed over the connection) originated from 192.168.0.100, and such data will be secure as between the local machine and 192.168.0.100, but not between 192.168.0.100, unless other measures are taken.<br />
<br />
Similarly:<br />
<br />
$ ssh -L 2000:192.168.0.100:6001 192.168.0.100<br />
<br />
will allow connections to localhost:2000 which will be transparently sent to the remote host on port 6001. The preceding example is useful for VNC connections using the vncserver utility--part of the tightvnc package--which, though very useful, is explicit about its lack of security.<br />
<br />
Remote forwarding allows the remote host to connect to an arbitrary host via the SSH tunnel and the local machine, providing a functional reversal of local forwarding, and is useful for situations where, e.g., the remote host has limited connectivity due to firewalling. It is enabled with the {{Ic|-R}} switch and a forwarding specification in the form of {{Ic|<tunnel port>:<destination address>:<destination port>}}.<br />
<br />
Thus:<br />
<br />
$ ssh -R 3000:irc.freenode.net:6667 192.168.0.200<br />
<br />
will bring up a shell on 192.168.0.200, and connections from 192.168.0.200 to itself on port 3000 (remotely speaking, localhost:3000) will be sent over the tunnel to the local machine and then on to irc.freenode.net on port 6667, thus, in this example, allowing the use of IRC programs on the remote host to be used, even if port 6667 would normally be blocked to it.<br />
<br />
Both local and remote forwarding can be used to provide a secure "gateway," allowing other computers to take advantage of an SSH tunnel, without actually running SSH or the SSH daemon by providing a bind-address for the start of the tunnel as part of the forwarding specification, e.g. {{Ic|<tunnel address>:<tunnel port>:<destination address>:<destination port>}}. The {{Ic|<tunnel address>}} can be any address on the machine at the start of the tunnel, {{Ic|localhost}}, {{Ic|*}} (or blank), which, respectively, allow connections via the given address, via the loopback interface, or via any interface. By default, forwarding is limited to connections from the machine at the "beginning" of the tunnel, i.e. the {{Ic|<tunnel address>}} is set to {{Ic|localhost}}. Local forwarding requires no additional configuration, however remote forwarding is limited by the remote server's SSH daemon configuration. See the {{Ic|GatewayPorts}} option in {{Ic|sshd_config(5)}} for more information.<br />
<br />
=== Jump hosts ===<br />
<br />
In certain scenarios, there might not be a direct connection to your target SSH daemon, and the use of a jump server (or bastion server) is required. Thus, we attempt to connect together two or more SSH tunnels, and assuming your local keys are authorized against each server in the chain. This is possible using SSH agent forwarding ({{ic|-A}}) and pseudo-terminal allocation ({{ic|-t}}) which forwards your local key with the following syntax:<br />
<br />
$ ssh -A -t -l user1 bastion1 \<br />
ssh -A -t -l user2 intermediate2 \<br />
ssh -A -t -l user3 target<br />
<br />
You can also do this using the {{ic|-J}} flag:<br />
<br />
$ ssh -J user1@bastion1,user2@intermediate2 user3@target<br />
<br />
Multiple hosts in the {{ic|-J}} directive can be separted with a comma, they will be connected to in the order listed. The {{ic|user...@}} part is not required, but can be used. The host specifications for {{ic|-J}} use the ssh configuration file, so specific per-host options can be set there, if needed.<br />
<br />
=== Reverse SSH through a relay ===<br />
<br />
{{Style|The idea of SSH tunneling is classic, so some references for detailed explanation would be nice. E.g. [https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work/118650#118650] which includes other scenarios.}}<br />
<br />
The idea is that client connects to the server via another relay, while the server is connected to the same relay using a reverse SSH tunnel. This is for example useful when the server is behind a NAT and relay is a publicly accessible SSH server used as a proxy to which the user has access. So the prerequisite is that client's keys are authorized against both the relay and the server and server's need to be authorized against the relay as well for the reverse SSH connection.<br />
<br />
The following configuration example assumes that user1 is the user account used on client, user2 on relay and user3 on server. First the server needs to establish the reverse tunnel with:<br />
<br />
ssh -R 2222:localhost:22 -N user2@relay<br />
<br />
Which can also be automated with a startup script, systemd service or {{Pkg|autossh}}.<br />
<br />
{{Expansion|Explain why {{ic|ssh user3@relay -p 2222}} is not sufficient.}}<br />
<br />
At the client side the connection is established with:<br />
<br />
ssh user2@relay ssh user3@localhost -p 2222<br />
<br />
The remote command to establish the connection to reverse tunnel can also be defined in relay's {{ic|~/.ssh/authorized_keys}} by including the {{ic|command}} field as follows:<br />
<br />
command="ssh user3@localhost -p 2222" ssh-rsa KEY2 user1@client<br />
<br />
In this case the connection is established with:<br />
<br />
ssh user2@relay<br />
<br />
Note that SCP's autocomplete function in client's terminal is not working and even the SCP transfers themselves aren't working under some configurations.<br />
<br />
=== Multiplexing ===<br />
<br />
The SSH daemon usually listens on port 22. However, it is common practice for many public internet hotspots to block all traffic that is not on the regular HTTP/S ports (80 and 443, respectively), thus effectively blocking SSH connections. The immediate solution for this is to have {{ic|sshd}} listen additionally on one of the whitelisted ports:<br />
<br />
{{hc|/etc/ssh/sshd_config|<br />
Port 22<br />
Port 443<br />
}}<br />
<br />
However, it is likely that port 443 is already in use by a web server serving HTTPS content, in which case it is possible to use a multiplexer, such as {{Pkg|sslh}}, which listens on the multiplexed port and can intelligently forward packets to many services.<br />
<br />
=== Speeding up SSH ===<br />
<br />
There are several [[#Configuration|client configuration]] options which can speed up connections either globally or for specific hosts. See {{man|5|ssh_config}} for full descriptions of these options.<br />
<br />
* You can make all sessions to the same host share a single connection using these options: {{bc|<nowiki><br />
ControlMaster auto<br />
ControlPersist yes<br />
ControlPath ~/.ssh/sockets/socket-%r@%h:%p<br />
</nowiki>}}<br />
: where {{ic|~/.ssh/sockets}} can be any directory not writable by other users.<br />
<br />
* {{ic|ControlPersist}} specifies how long the master should wait in the background for new clients after the initial client connection has been closed. Possible values are either: <br />
** {{ic|no}} to close the connection immediately after the last client disconnects, <br />
** a time in seconds,<br />
** {{ic|yes}} to wait forever, the connection will never be closed automatically.<br />
<br />
* Another option to improve speed is to enable compression with the {{ic|Compression yes}} option or the {{ic|-C}} flag.<br />
: {{Note|{{man|1|ssh}} states that "[c]ompression is desirable on modem lines and other slow connections, but will only slow down things on fast networks." This tip might be counterproductive depending on your network configuration.}}<br />
<br />
* Login time can be shortened by bypassing IPv6 lookup using the {{ic|AddressFamily inet}} option or {{ic|-4}} flag.<br />
<br />
* Last, if you intend to use SSH for SFTP or SCP, [https://www.psc.edu/index.php/hpn-ssh High Performance SSH/SCP] can significantly increase throughput by raising dynamically the SSH buffer sizes. Install the package {{AUR|openssh-hpn-git}} to use a patched version of OpenSSH with this enhancement.<br />
<br />
=== Mounting a remote filesystem with SSHFS ===<br />
<br />
Please refer to the [[SSHFS]] article to use sshfs to mount a remote system - accessible via SSH - to a local folder, so you will be able to do any operation on the mounted files with any tool (copy, rename, edit with vim, etc.). Using sshfs instead of shfs is generally preferred as a new version of shfs has not been released since 2004.<br />
<br />
{{Tip|There is a package {{AUR|autosshfs-git}} that can be used to run autosshfs automatically at login.}}<br />
<br />
=== Keep alive ===<br />
<br />
{{Accuracy|Misleading description: the {{ic|*AliveInterval}} options don't have to be set on both the client and the server, either side can choose to keep the connection alive.}}<br />
<br />
Your ssh session will automatically log out if it is idle. To send a "keep alive" signal to the server every 120 seconds add the {{ic|ServerAliveInterval 120}} option to your [[#Configuration|client configuration]]. See also the {{ic|ServerAliveCountMax}} and {{ic|TCPKeepAlive}} options.<br />
<br />
Conversely, to keep incoming connections alive, set the {{ic|ClientAliveInterval}} option in your [[#Configuration_2|server configuration]].<br />
<br />
=== Automatically restart SSH tunnels with systemd ===<br />
<br />
[[systemd]] can automatically start SSH connections on boot/login ''and'' restart them when they fail. This makes it a useful tool for maintaining SSH tunnels.<br />
<br />
The following service can start an SSH tunnel on login using the connection settings in your [[#Configuration|ssh configuration]]. If the connection closes for any reason, it waits 10 seconds before restarting it:<br />
<br />
{{hc|~/.config/systemd/user/tunnel.service|<nowiki><br />
[Unit]<br />
Description=SSH tunnel to myserver<br />
<br />
[Service]<br />
Type=simple<br />
Restart=always<br />
RestartSec=10<br />
ExecStart=/usr/bin/ssh -F %h/.ssh/config -N myserver<br />
</nowiki>}}<br />
<br />
Then [[enable]] and [[start]] the user service. See [[#Keep alive]] for how to prevent the tunnel from timing out. If you wish to start the tunnel on boot, you will need to rewrite the unit as a system service.<br />
<br />
=== Autossh - automatically restarts SSH sessions and tunnels ===<br />
<br />
When a session or tunnel cannot be kept alive, for example due to bad network conditions causing client disconnections, you can use {{Pkg|autossh}} to automatically restart them.<br />
<br />
Usage examples:<br />
$ autossh -M 0 -o "ServerAliveInterval 45" -o "ServerAliveCountMax 2" username@example.com<br />
<br />
Combined with [[SSHFS]]:<br />
$ sshfs -o reconnect,compression=yes,transform_symlinks,ServerAliveInterval=45,ServerAliveCountMax=2,ssh_command='autossh -M 0' username@example.com: /mnt/example <br />
<br />
Connecting through a SOCKS-proxy set by [[Proxy settings]]:<br />
$ autossh -M 0 -o "ServerAliveInterval 45" -o "ServerAliveCountMax 2" -NCD 8080 username@example.com <br />
<br />
With the {{ic|-f}} option autossh can be made to run as a background process. Running it this way however means the passphrase cannot be entered interactively.<br />
<br />
The session will end once you type {{ic|exit}} in the session, or the autossh process receives a SIGTERM, SIGINT of SIGKILL signal.<br />
<br />
==== Run autossh automatically at boot via systemd ====<br />
<br />
If you want to automatically start autossh, you can create a systemd unit file:<br />
<br />
{{hc|/etc/systemd/system/autossh.service|2=<br />
[Unit]<br />
Description=AutoSSH service for port 2222<br />
After=network.target<br />
<br />
[Service]<br />
Environment="AUTOSSH_GATETIME=0"<br />
ExecStart=/usr/bin/autossh -M 0 -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
}}<br />
<br />
Here {{ic|1=AUTOSSH_GATETIME=0}} is an environment variable specifying how long ssh must be up before autossh considers it a successful connection, setting it to 0 autossh also ignores the first run failure of ssh. This may be useful when running autossh at boot. Other environment variables are available on the manpage. Of course, you can make this unit more complex if necessary (see the systemd documentation for details), and obviously you can use your own options for autossh, but note that the {{ic|-f}} implying {{ic|1=AUTOSSH_GATETIME=0}} does not work with systemd. <br />
<br />
Remember to [[start]] and/or [[enable]] the service afterwards.<br />
<br />
You may also need to disable ControlMaster e.g.<br />
<br />
ExecStart=/usr/bin/autossh -M 0 -o ControlMaster=no -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com<br />
<br />
{{Tip|It is also easy to maintain several autossh processes, to keep several tunnels alive. Just create multiple service files with different names.}}<br />
<br />
=== Alternative service should SSH daemon fail ===<br />
<br />
For remote or headless servers which relay exclusively on SSH, a failure to start the SSH daemon (e.g., after a system upgrade) may prevent administration access. [[systemd]] offers a simple solution via {{ic|OnFailure}} option.<br />
<br />
Let's suppose the server runs {{ic|sshd}} and [[telnet]] is the fail-safe alternative of choice. Create a file as follow. Do '''not''' [[enable]] telnet.socket!<br />
<br />
{{hc|/etc/systemd/system/sshd.service.d/override.conf|2=<br />
[Unit]<br />
OnFailure=telnet.socket<br />
}}<br />
<br />
That's it. Telnet is not available when {{ic|sshd}} is running. Should {{ic|sshd}} fail to start, a telnet session can be opened for recovery.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Checklist ===<br />
<br />
Check these simple issues before you look any further.<br />
<br />
# The config directory {{ic|~/.ssh}} and its contents should be accessible only by your user (check this on both the client and the server): {{bc|<nowiki><br />
$ chmod 700 ~/.ssh<br />
$ chmod 600 ~/.ssh/*<br />
$ chown -R $USER ~/.ssh<br />
</nowiki>}}<br />
# Check that the client's public key (e.g. {{ic|id_rsa.pub}}) is in {{ic|~/.ssh/authorized_keys}} on the server.<br />
# Check that you did not limit SSH access with {{ic|AllowUsers}} or {{ic|AllowGroups}} in the [[#Configuration_2|server config]].<br />
# Check if the user has set a password. Sometimes new users who have not yet logged in to the server do not have a password.<br />
# [[Append]] {{ic|LogLevel DEBUG}} to {{ic|/etc/ssh/sshd_config}}.<br />
# Use {{ic|# journalctl -xe}} for possible (error) messages.<br />
# [[Restart]] {{ic|sshd}} and logout/login on both client and server.<br />
<br />
=== Connection refused or timeout problem ===<br />
<br />
==== Port forwarding ====<br />
<br />
If you are behind a NAT mode/router (which is likely unless you are on a VPS or publicly addressed host), make sure that your router is forwarding incoming ssh connections to your machine. Find the server's internal IP address with {{ic|$ ip addr}} and set up your router to forward TCP on your SSH port to that IP. [http://portforward.com portforward.com] can help with that.<br />
<br />
==== Is SSH running and listening? ====<br />
$ ss -tnlp<br />
<br />
If the above command do not show SSH port is open, SSH is NOT running. Check {{ic|/var/log/messages}} for errors etc.<br />
<br />
==== Are there firewall rules blocking the connection? ====<br />
<br />
[[Iptables]] may be blocking connections on port {{ic|22}}. Check this with:<br />
{{bc|# iptables -nvL}}<br />
and look for rules that might be dropping packets on the {{ic|INPUT}} chain. Then, if necessary, unblock the port with a command like: <br />
{{bc|<br />
# iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT<br />
}}<br />
For more help configuring firewalls, see [[firewalls]].<br />
<br />
==== Is the traffic even getting to your computer? ====<br />
Start a traffic dump on the computer you are having problems with:<br />
<br />
# tcpdump -lnn -i any port ssh and tcp-syn<br />
<br />
This should show some basic information, then wait for any matching traffic to happen before displaying it. Try your connection now. If you do not see any output when you attempt to connect, then something outside of your computer is blocking the traffic (e. g., hardware firewall, NAT router etc.).<br />
<br />
==== Your ISP or a third party blocking default port? ====<br />
{{Note|Try this step if you '''know''' you are not running any firewalls and you know you have configured the router for DMZ or have forwarded the port to your computer and it still does not work. Here you will find diagnostic steps and a possible solution.}}<br />
<br />
In some cases, your ISP might block the default port (SSH port 22) so whatever you try (opening ports, hardening the stack, defending against flood attacks, et al) ends up useless. To confirm this, create a server on all interfaces (0.0.0.0) and connect remotely. <br />
<br />
If you get an error message comparable to this:<br />
ssh: connect to host www.inet.hr port 22: Connection refused<br />
<br />
That means the port is '''not''' being blocked by the ISP, but the server does not run SSH on that port (See [[wikipedia:Security_through_obscurity|security through obscurity]]).<br />
<br />
However, if you get an error message comparable to this:<br />
ssh: connect to host 111.222.333.444 port 22: Operation timed out <br />
<br />
That means that something is rejecting your TCP traffic on port 22. Basically that port is stealth, either by your firewall or 3rd party intervention (like an ISP blocking and/or rejecting incoming traffic on port 22). If you know you are not running any firewall on your computer, and you know that Gremlins are not growing in your routers and switches, then your ISP is blocking the traffic.<br />
<br />
To double check, you can run Wireshark on your server and listen to traffic on port 22. Since Wireshark is a Layer 2 Packet Sniffing utility, and TCP/UDP are Layer 3 and above (see [[wikipedia:Internet protocol suite|IP Network stack]]), if you do not receive anything while connecting remotely, a third party is most likely to be blocking the traffic on that port to your server.<br />
<br />
===== Diagnosis =====<br />
<br />
[[Install]] either {{Pkg|tcpdump}} or Wireshark with the {{Pkg|wireshark-cli}} package.<br />
<br />
For tcpdump:<br />
<br />
# tcpdump -ni ''interface'' "port 22"<br />
<br />
For Wireshark:<br />
<br />
$ tshark -f "tcp port 22" -i ''interface''<br />
<br />
where {{ic|''interface''}} is the network interface for a WAN connection (see {{ic|ip a}} to check). If you are not receiving any packets while trying to connect remotely, you can be very sure that your ISP is blocking the incoming traffic on port 22.<br />
<br />
===== Possible solution =====<br />
The solution is just to use some other port that the ISP is not blocking. Open the {{ic|/etc/ssh/sshd_config}} and configure the file to use different ports. For example, add:<br />
<br />
Port 22<br />
Port 1234<br />
<br />
Also make sure that other "Port" configuration lines in the file are commented out. Just commenting "Port 22" and putting "Port 1234" will not solve the issue because then sshd will only listen on port 1234. Use both lines to run the SSH server on both ports. <br />
<br />
[[Restart]] the server {{ic|sshd.service}} and you are almost done. You still have to configure your client(s) to use the other port instead of the default port. There are numerous solutions to that problem, but let us cover two of them here.<br />
<br />
==== Read from socket failed: connection reset by peer ====<br />
<br />
Recent versions of openssh sometimes fail with the above error message when connecting to older ssh servers. This can be worked around by setting various [[#Configuration|client options]] for that host. See {{man|5|ssh_config}} for more information about the following options.<br />
<br />
The problem could be the {{ic|ecdsa-sha2-nistp*-cert-v01@openssh}} elliptical host key algorithms. These can be disabled by setting {{ic|HostKeyAlgorithms}} to a list excluding those algorithms.<br />
<br />
If that does not work, it could be that the list of ciphers is too long. Set the {{ic|Ciphers}} option to a shorter list (fewer than 80 characters should be enough). Similarly, you can also try shortening the list of {{ic|MACs}}.<br />
<br />
See also the [http://www.gossamer-threads.com/lists/openssh/dev/51339 discussion] on the openssh bug forum.<br />
<br />
=== "[your shell]: No such file or directory" / ssh_exchange_identification problem ===<br />
One possible cause for this is the need of certain SSH clients to find an absolute path (one returned by {{Ic|whereis -b [your shell]}}, for instance) in {{Ic|$SHELL}}, even if the shell's binary is located in one of the {{Ic|$PATH}} entries.<br />
<br />
==="Terminal unknown" or "Error opening terminal" error message===<br />
If you receive the above errors upon logging in, this means the server does not recognize your terminal. Ncurses applications like nano may fail with the message "Error opening terminal".<br />
<br />
The correct solution is to install the client terminal's terminfo file on the server. This tells console programs on the server how to correctly interact with your terminal. You can get info about current terminfo using {{ic|$ infocmp}} and then find out [[Pacman#Querying_package_databases|which package owns it]].<br />
<br />
If you cannot [[install]] it normally, you can copy your terminfo to your home directory on the server:<br />
<br />
$ ssh myserver mkdir -p ~/.terminfo/${TERM:0:1}<br />
$ scp /usr/share/terminfo/${TERM:0:1}/$TERM myserver:~/.terminfo/${TERM:0:1}/<br />
<br />
After logging in and out from the server the problem should be fixed.<br />
<br />
==== TERM hack ====<br />
<br />
{{warning|This should only be used as a last resort.}}<br />
<br />
Alternatively, you can simply set {{ic|1=TERM=xterm}} in your environment on the server (e.g. in {{ic|.bash_profile}}). This will silence the error and allow ncurses applications to run again, but you may experience strange behavior and graphical glitches unless your terminal's control sequences exactly match xterm's.<br />
<br />
=== Connection closed by x.x.x.x [preauth] ===<br />
If you are seeing this error in your sshd logs, make sure you have set a valid HostKey<br />
HostKey /etc/ssh/ssh_host_rsa_key<br />
<br />
=== id_dsa refused by OpenSSH 7.0 ===<br />
<br />
OpenSSH 7.0 deprecated DSA public keys for security reasons. If you absolutely must enable them, set the [[#Configuration|config]] option {{ic|PubkeyAcceptedKeyTypes +ssh-dss}} (http://www.openssh.com/legacy.html does not mention this).<br />
<br />
=== No matching key exchange method found by OpenSSH 7.0 ===<br />
<br />
OpenSSH 7.0 deprecated the diffie-hellman-group1-sha1 key algorithm because it is weak and within theoretical range of the so-called Logjam attack (see http://www.openssh.com/legacy.html). If the key algorithm is needed for a particular host, ssh will produce an error message like this:<br />
<br />
Unable to negotiate with 127.0.0.1: no matching key exchange method found.<br />
Their offer: diffie-hellman-group1-sha1<br />
<br />
The best resolution for these failures is to upgrade/configure the server to not use deprecated algorithms. If that is not possible, you can force the client to reenable the algorithm with the [[#Configuration|client option]] {{ic|KexAlgorithms +diffie-hellman-group1-sha1}}.<br />
<br />
=== tmux/screen session killed when disconnecting from SSH ===<br />
<br />
If your processes get killed at the end of the session, it is possible that you are using socket activation and it gets killed by {{Pkg|systemd}} when it notices that the SSH session process exited. In that case there are two solutions. One is to avoid using socket activation by using {{ic|ssh.service}} instead of {{ic|ssh.socket}}. The other is to set {{ic|1=KillMode=process}} in the Service section of {{ic|ssh@.service}}.<br />
<br />
The {{ic|1=KillMode=process}} setting may also be useful with the classic {{ic|ssh.service}}, as it avoids killing the SSH session process or the {{Pkg|screen}} or {{Pkg|tmux}} processes when the server gets stopped or restarted.<br />
<br />
=== SSH session stops responding ===<br />
<br />
SSH responds to [[Wikipedia:Software_flow_control|flow control commands]] {{ic|XON}} and {{ic|XOFF}}. It will freeze/hang/stop responding when you hit {{ic|Ctrl+s}}. Use {{ic|Ctrl+q}} to resume your session.<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:Secure Shell]]<br />
* [http://www.la-samhna.de/library/brutessh.html Defending against brute force ssh attacks]<br />
* [http://www.ibm.com/developerworks/library/l-keyc/index.html OpenSSH key management, Part 1] and [http://www.ibm.com/developerworks/library/l-keyc2 Part 2] on IBM developerWorks<br />
* [https://stribika.github.io/2015/01/04/secure-secure-shell.html Secure Secure Shell]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=FireHOL&diff=498769FireHOL2017-11-24T22:11:13Z<p>Nodiscc: /* Configuration */ add {{stub}}</p>
<hr />
<div>[[Category:Firewalls]]<br />
[[ja:Firehol]]<br />
[http://firehol.org FireHOL] is a language (and a program to run it) to build secure, stateful firewalls from easy to understand, human-readable configuration files. The configuration stays readable even for very complex setups. In the background it interfaces with [[iptables]] (IPv4/IPv6).<br />
<br />
== Installation ==<br />
<br />
[[Install]] {{Aur|firehol}} or {{Aur|firehol-git}}.<br />
<br />
== Configuration ==<br />
<br />
{{stub}}<br />
<br />
The configuration file is {{ic|/etc/firehol/firehol.conf}}.<br />
<br />
A good way to start learning its scripting declarations is by copying an [http://firehol.org/#firehol Firehol example configuration].<br />
<br />
The configuration file is bash file and has 3 parts:<br />
<br />
* helper<br />
* interface<br />
* router<br />
<br />
== Try, Run and Enable ==<br />
<br />
You can test the configuration file's correctness by issuing:<br />
<br />
# firehol try<br />
<br />
or<br />
<br />
# firehol nofast try<br />
<br />
If the configuration is working, [[start/enable]] the {{ic|firehol.service}}.<br />
<br />
{{Tip|<br />
* The package also includes [http://firehol.org/#fireqos FireQOS], a helper for [[Advanced traffic control]]. It is packaged with its own {{ic|fireqos.service}}. <br />
* The {{Pkg|netdata}} (or {{Aur|netdata-git}}) application for traffic monitoring, created by the same project authors, also is available. See [https://github.com/firehol/netdata Netdata] for more information.<br />
}}</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Bash&diff=498088Bash2017-11-23T23:35:18Z<p>Nodiscc: /* See also */ add link reference to shellcheck command-line version</p>
<hr />
<div>[[Category:Command shells]]<br />
[[de:Bash]]<br />
[[es:Bash]]<br />
[[it:Bash]]<br />
[[ja:Bash]]<br />
[[ru:Bash]]<br />
[[zh-hans:Bash]]<br />
{{Related articles start}}<br />
{{Related|Bash/Functions}}<br />
{{Related|Bash/Prompt customization}}<br />
{{Related|Environment variables}}<br />
{{Related|Readline}}<br />
{{Related|Fortune}}<br />
{{Related|Pkgfile}}<br />
{{Related|Command-line shell}}<br />
{{Related articles end}}<br />
[https://www.gnu.org/software/bash/ Bash] (Bourne-again Shell) is a [[command-line shell]]/programming language by the [[GNU Project]]. Its name is a homaging reference to its predecessor: the long-deprecated Bourne shell. Bash can be run on most UNIX-like operating systems, including GNU/Linux.<br />
<br />
== Invocation ==<br />
<br />
Bash behaviour can be altered depending on how it is invoked. Some descriptions of different modes follow.<br />
<br />
If Bash is spawned by {{ic|login}} in a TTY, by an [[SSH]] daemon, or similar means, it is considered a '''login shell'''. This mode can also be engaged using the {{ic|-l}}/{{ic|--login}} command line option.<br />
<br />
Bash is considered an '''interactive shell''' when its standard input and error are connected to a terminal (for example, when run in a terminal emulator), and it is not started with the {{ic|-c}} option or [http://unix.stackexchange.com/a/96805 non-option] arguments (for example, {{ic|bash '''script'''}}). All interactive shells source {{ic|/etc/bash.bashrc}} and {{ic|~/.bashrc}}, while interactive ''login'' shells also source {{ic|/etc/profile}} and {{ic|~/.bash_profile}}.<br />
<br />
{{Note|In Arch {{ic|/bin/sh}} (which used to be the Bourne shell executable) is symlinked to {{ic|/bin/bash}}. If Bash is invoked with the name {{ic|sh}}, it tries to mimic the startup behavior of historical versions of {{ic|sh}}, including POSIX compability.}}<br />
<br />
=== Configuration files ===<br />
<br />
See [http://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files 6.2 Bash Startup Files] and [http://mywiki.wooledge.org/DotFiles DotFiles] for a complete description.<br />
<br />
{| class="wikitable"<br />
! File<br />
! Description<br />
! Login shells <sup>(see note)</sup><br />
! Interactive, ''non-login'' shells<br />
|-<br />
| {{ic|/etc/profile}}<br />
| [[Source]]s application settings in {{ic|/etc/profile.d/*.sh}} and {{ic|/etc/bash.bashrc}}.<br />
| {{Yes}}<br />
| {{No}}<br />
|-<br />
| {{ic|~/.bash_profile}}<br />
| Per-user, after {{ic|/etc/profile}}. If this file does not exist, {{ic|~/.bash_login}} and {{ic|~/.profile}} are checked in that order. The skeleton file {{ic|/etc/skel/.bash_profile}} also sources {{ic|~/.bashrc}}.<br />
| {{Yes}}<br />
| {{No}}<br />
|-<br />
| {{ic|~/.bash_logout}}<br />
| After exit of a login shell.<br />
| {{Yes}}<br />
| {{No}}<br />
|-<br />
| {{ic|/etc/bash.bashrc}}<br />
| Depends on the {{ic|1=-DSYS_BASHRC="/etc/bash.bashrc"}} compilation flag. Sources {{ic|/usr/share/bash-completion/bash_completion}}.<br />
| {{No}}<br />
| {{Yes}}<br />
|-<br />
| {{ic|~/.bashrc}}<br />
| Per-user, after {{ic|/etc/bash.bashrc}}.<br />
| {{No}}<br />
| {{Yes}}<br />
|}<br />
<br />
{{Note|<br />
* Login shells can be non-interactive when called with the {{ic|--login}} argument.<br />
* While interactive, ''non-login'' shells do '''not''' source {{ic|~/.bash_profile}}, they still inherit the environment from their parent process (which may be a login shell). See [http://mywiki.wooledge.org/ProcessManagement#On_processes.2C_environments_and_inheritance On processes, environments and inheritance] for details.<br />
}}<br />
<br />
=== Shell and environment variables ===<br />
<br />
The behavior of Bash and programs run by it can be influenced by a number of environment variables. [[Environment variables]] are used to store useful values such as command search directories, or which browser to use. When a new shell or script is launched it inherits its parent's variables, thus starting with an internal set of shell variables[http://www.kingcomputerservices.com/unix_101/understanding_unix_shells_and_environment_variables.htm ].<br />
<br />
These shell variables in Bash can be exported in order to become environment variables:<br />
<br />
VARIABLE=content<br />
export VARIABLE<br />
<br />
or with a shortcut<br />
<br />
export VARIABLE=content<br />
<br />
Environment variables are conventionally placed in {{ic|~/.profile}} or {{ic|/etc/profile}} so that all bourne-compatible shells can use them.<br />
<br />
See [[Environment variables]] for more general information.<br />
<br />
== Command line ==<br />
<br />
Bash command line is managed by the separate library called [[Readline]]. Readline provides [[emacs]] and [[vi]] styles of shortcuts for interacting with the command line, i.e. moving back and forth on the word basis, deleting words etc. It is also Readline's responsibility to manage [[Readline#History|history]] of input commands. Last, but not least, it allows you to create [[Readline#Macros|macros]].<br />
<br />
=== Tab completion ===<br />
<br />
[[Wikipedia:Command-line_completion|Tab completion]] is the option to auto-complete typed commands by pressing {{ic|Tab}} (enabled by default).<br />
<br />
==== Single-tab ====<br />
<br />
It may require up to three tab-presses to show all possible completions for a command. To reduce the needed number of tab-presses, see [[Readline#Faster completion]].<br />
<br />
==== Common programs and options ====<br />
<br />
By default, Bash only tab-completes commands, filenames, and variables. The package {{Pkg|bash-completion}} extends this by adding more specialized tab completions for common commands and their options, which can be enabled by sourcing {{ic|/usr/share/bash-completion/bash_completion}}. With {{Pkg|bash-completion}}, normal completions (such as {{ic|$ ls file.*<tab><tab>}}) will behave differently; however, they can be re-enabled with {{ic|$ compopt -o bashdefault ''program''}} (see [https://bbs.archlinux.org/viewtopic.php?id=128471] and [https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html] for more detail).<br />
<br />
==== Customize per-command ====<br />
<br />
{{Note|Using the {{ic|complete}} builtin may cause conflicts with {{Pkg|bash-completion}}.}}<br />
<br />
By default Bash only tab-completes file names following a command. You can change it to complete command names using {{ic|complete -c}}:<br />
{{hc|~/.bashrc|<br />
complete -c man which<br />
}}<br />
or complete command names and file names with {{ic|-cf}}:<br />
{{bc|complete -cf sudo}}<br />
See the Bash man page for more completion options.<br />
<br />
=== History ===<br />
<br />
==== History completion ====<br />
<br />
You can bind the up and down arrow keys to search through Bash's history (see: [[Readline#History]] and [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline Init File Syntax]):<br />
<br />
{{hc|~/.bashrc|<br />
bind '"\e[A": history-search-backward'<br />
bind '"\e[B": history-search-forward'<br />
}}<br />
<br />
or to affect all readline programs:<br />
<br />
{{hc|~/.inputrc|<br />
"\e[A": history-search-backward<br />
"\e[B": history-search-forward<br />
}}<br />
<br />
==== Shorter history ====<br />
<br />
The {{ic|HISTCONTROL}} variable can prevent certain commands from being logged to the history. For example, to stop logging of repeated identical commands<br />
{{hc|~/.bashrc|2=export HISTCONTROL=ignoredups}}<br />
or set it to {{ic|erasedups}} to ensure that Bash's history will only contain one copy of each command (regardless of order). See the Bash man page for more options.<br />
<br />
=== Mimic Zsh run-help ability ===<br />
<br />
Zsh can invoke the manual for the command preceding the cursor by pressing {{ic|Alt+h}}.<br />
A similar behaviour is obtained in Bash using this [[Readline]] bind:<br />
{{hc|~/.bashrc|<br />
bind '"\eh": "\C-a\eb\ed\C-y\e#man \C-y\C-m\C-p\C-p\C-a\C-d\C-e"'<br />
}}<br />
This assumes are you using the (default) Emacs [[Readline#Editing mode|editing mode]].<br />
<br />
== Aliases ==<br />
<br />
[[Wikipedia:Alias_(command)|alias]] is a command, which enables a replacement of a word with another string. It is often used for abbreviating a system command, or for adding default arguments to a regularly used command. <br />
<br />
Personal aliases are preferably stored in {{ic|~/.bashrc}}, and system-wide aliases (which affect all users) belong in {{ic|/etc/bash.bashrc}}. See [https://gist.github.com/anonymous/a9055e30f97bd19645c2] for example aliases.<br />
<br />
For functions, see [[Bash/Functions]].<br />
<br />
== Tips and tricks ==<br />
<br />
=== Prompt customization ===<br />
<br />
See [[Bash/Prompt customization]].<br />
<br />
=== Command not found ===<br />
<br />
[[pkgfile]] includes a "command not found" hook that will automatically search the official repositories, when entering an unrecognized command.<br />
<br />
You need to [[source]] the hook to enable it, for example:<br />
<br />
{{hc|~/.bashrc|<br />
source /usr/share/doc/pkgfile/command-not-found.bash}}<br />
<br />
Then attempting to run an unavailable command will show the following info:<br />
<br />
{{hc|$ abiword|<br />
abiword may be found in the following packages:<br />
extra/abiword 3.0.1-2 /usr/bin/abiword<br />
}}<br />
<br />
An alternative "command not found" hook is provided by {{AUR|command-not-found}}, which looks like this:<br />
<br />
{{hc|$ abiword|<br />
The command 'abiword' is provided by the following packages:<br />
'''abiword''' (2.8.6-7) from extra<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from staging<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from testing<br />
[ abiword ]<br />
}}<br />
<br />
=== Disable Ctrl+z in terminal ===<br />
<br />
You can disable the {{ic|Ctrl+z}} feature (pauses/closes your application) by wrapping your command like this:<br />
<br />
#!/bin/bash<br />
trap "" 20<br />
''adom''<br />
<br />
Now when you accidentally press {{ic|Ctrl+z}} in {{AUR|adom}} instead of {{ic|Shift+z}} nothing will happen because {{ic|Ctrl+z}} will be ignored.<br />
<br />
=== Clear the screen after logging out ===<br />
<br />
To clear the screen after logging out on a virtual terminal:<br />
{{hc|~/.bash_logout|<br />
clear<br />
reset<br />
}}<br />
<br />
=== Auto "cd" when entering just a path ===<br />
<br />
Bash can automatically prepend {{ic|cd }} when entering just a path in the shell. For example:<br />
{{hc|$ /etc|<br />
bash: /etc: Is a directory<br />
}}<br />
<br />
But after adding one line into {{ic|.bashrc}} file:<br />
{{hc|~/.bashrc|<br />
...<br />
shopt -s autocd<br />
...<br />
}}<br />
<br />
You get:<br />
[user@host ~]$ /etc<br />
cd /etc<br />
[user@host etc]$<br />
<br />
=== Autojump ===<br />
<br />
{{Pkg|autojump}} allows navigating the file system by searching for strings in a database with the user's most-visited paths.<br />
<br />
After installation, {{ic|/etc/profile.d/autojump.bash}} must be [[source]]d in order to start using the application.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Line wrap on window resize ===<br />
<br />
When resizing a [[terminal emulator]], Bash may not receive the resize signal. This will cause typed text to not wrap correctly and overlap the prompt. The {{ic|checkwinsize}} shell option checks the window size after each command and, if necessary, updates the values of {{ic|LINES}} and {{ic|COLUMNS}}.<br />
<br />
{{hc|~/.bashrc|<br />
shopt -s checkwinsize<br />
}}<br />
<br />
=== Shell exits even if ignoreeof set ===<br />
<br />
If you have set the {{ic|ignoreeof}} option and you find that repeatedly hitting {{ic|ctrl-d}} causes the shell to exit, it is because this option only allows 10 consecutive invocations of this keybinding (or 10 consecutive EOF characters, to be precise), before exiting the shell.<br />
<br />
To allow higher values, you have to use the IGNOREEOF variable.<br />
<br />
For example:<br />
export IGNOREEOF=100<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:Bash (Unix shell)]]<br />
* [https://www.gnu.org/software/bash/manual/bashref.html Bash Reference Manual], or {{ic|/usr/share/doc/bash/bashref.html}}<br />
* [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline Init File Syntax]<br />
* [http://www.aosabook.org/en/bash.html The Bourne-Again Shell] - The third chapter of ''The Architecture of Open Source Applications''<br />
* [http://shellcheck.net Shellcheck] - Check bash scripts for common errors (based on [https://github.com/koalaman/shellcheck shellcheck])<br />
* [http://bashrcgenerator.com/.bashrc PS1 generator] - generate your .bashrc/PS1 bash prompt with a drag and drop interface<br />
<br />
=== Tutorials ===<br />
<br />
* [http://mywiki.wooledge.org/ Greg's Wiki]<br />
* [http://mywiki.wooledge.org/BashGuide Greg's Wiki: BashGuide]<br />
* [http://mywiki.wooledge.org/BashFAQ Greg's Wiki: BashFAQ]<br />
* [http://wiki.bash-hackers.org/doku.php Bash Hackers Wiki]<br />
* [http://wiki.bash-hackers.org/scripting/tutoriallist Bash Hackers Wiki: List of Bash online tutorials]<br />
* [http://www.grymoire.com/Unix/Quote.html Quote Tutorial]<br />
<br />
=== Community ===<br />
<br />
* [irc://irc.freenode.net#bash An active and friendly IRC channel for Bash]<br />
* [http://bashscripts.org Bashscripts.org]<br />
<br />
=== Examples ===<br />
<br />
* [http://tldp.org/HOWTO/Xterm-Title-4.html How to change the title of an xterm]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Jenkins&diff=498087Jenkins2017-11-23T23:30:19Z<p>Nodiscc: /* See also */ add Wikipedia:Jenkins_(software)</p>
<hr />
<div>[[Category:Package development]]<br />
[[Category:Web applications]]<br />
[[ja:Jenkins]]<br />
[https://jenkins-ci.org/ Jenkins] is an open source [[Wikipedia:Continuous integration|continuous integration]] server written in [[Java]]. It is capable of running scheduled automated builds and test suits of managed software projects. The build or tests for example may be triggered on a per commit basis or in a calendar driven manner. Jenkins thereby relies on the code being managed via a version control system (see [[git]]) and an automated build process. Note that Jenkins is not limited to Java applications and is suitable to manage projects in all common languages. Its capabilities can be further expanded by plugins.<br />
<br />
== Installation ==<br />
<br />
[[Install]] {{Pkg|jenkins}} for the latest stable release or {{AUR|jenkins-lts}} for the long-term-support version. The package will create a Jenkins user for the daemon using systemd-sysusers.<br />
<br />
== Setup ==<br />
<br />
Project configuration can be done using the built-in web interface. To access it [[start/enable]] {{ic|jenkins.service}}.<br />
You can now open {{ic|http://localhost:8090}} with your browser and start setting up Jenkins.<br />
<br />
The configuration file of the daemon running Jenkins is located at {{ic|/etc/conf.d/jenkins}}. It is sourced by the according {{ic|.service}} file and takes effect immediately after a restart.<br />
<br />
== See also ==<br />
<br />
*[[Wikipedia:Jenkins_(software)]]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Jenkins&diff=498086Jenkins2017-11-23T23:29:09Z<p>Nodiscc: add inline link to Wikipedia:Continuous_integration</p>
<hr />
<div>[[Category:Package development]]<br />
[[Category:Web applications]]<br />
[[ja:Jenkins]]<br />
[https://jenkins-ci.org/ Jenkins] is an open source [[Wikipedia:Continuous integration|continuous integration]] server written in [[Java]]. It is capable of running scheduled automated builds and test suits of managed software projects. The build or tests for example may be triggered on a per commit basis or in a calendar driven manner. Jenkins thereby relies on the code being managed via a version control system (see [[git]]) and an automated build process. Note that Jenkins is not limited to Java applications and is suitable to manage projects in all common languages. Its capabilities can be further expanded by plugins.<br />
<br />
== Installation ==<br />
<br />
[[Install]] {{Pkg|jenkins}} for the latest stable release or {{AUR|jenkins-lts}} for the long-term-support version. The package will create a Jenkins user for the daemon using systemd-sysusers.<br />
<br />
== Setup ==<br />
<br />
Project configuration can be done using the built-in web interface. To access it [[start/enable]] {{ic|jenkins.service}}.<br />
You can now open {{ic|http://localhost:8090}} with your browser and start setting up Jenkins.<br />
<br />
The configuration file of the daemon running Jenkins is located at {{ic|/etc/conf.d/jenkins}}. It is sourced by the according {{ic|.service}} file and takes effect immediately after a restart.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Python&diff=498008Python2017-11-23T14:12:34Z<p>Nodiscc: /* See also */ add https://github.com/mahmoud/boltons</p>
<hr />
<div>[[Category:Programming languages]]<br />
[[de:Python]]<br />
[[es:Python]]<br />
[[ja:Python]]<br />
[[ko:Python]]<br />
[[ru:Python]]<br />
[[zh-hans:Python]]<br />
{{Related articles start}}<br />
{{Related|Python package guidelines}}<br />
{{Related|Python/Virtual environment}}<br />
{{Related|mod_wsgi}}<br />
{{Related|Django}}<br />
{{Related articles end}}<br />
From [[Wikipedia:Python (programming language)|Wikipedia]]:<br />
<br />
:Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than possible in languages such as C++ or Java. The language provides constructs intended to enable writing clear programs on both a small and large scale.<br />
:Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system and automatic memory management and has a large and comprehensive standard library.<br />
<br />
== Installation ==<br />
<br />
=== Python 3 ===<br />
<br />
Python 3 is the latest version of the language, and is incompatible with Python 2. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Also, the standard library has been reorganized in a few prominent places. For an overview of the differences, visit [https://wiki.python.org/moin/Python2orPython3 Python2orPython3] and their relevant [http://getpython3.com/diveintopython3/porting-code-to-python-3-with-2to3.html chapter] in Dive into Python 3.<br />
<br />
To install the latest version of Python 3, [[install]] the {{Pkg|python}} package.<br />
<br />
If you would like to build the latest RC/betas from source, visit [https://www.python.org/downloads/ Python Downloads]. The [[Arch User Repository]] also contains good [[PKGBUILD]]s. If you do decide to build the RC, note that the binary (by default) installs to {{ic|/usr/local/bin/python3.x}}.<br />
<br />
=== Python 2 ===<br />
<br />
To get the latest version of Python 2, [[install]] the {{Pkg|python2}} package.<br />
<br />
Python 2 will happily run alongside Python 3. You need to specify {{ic|python2}} in order to run this version.<br />
<br />
Any program requiring Python 2 needs to point to {{ic|/usr/bin/python2}}, instead of {{ic|/usr/bin/python}}, which points to Python 3. To do so, open the program or script in a [[List of applications/Documents#Text editors|text editor]] and change the first line. The line will show one of the following:<br />
<br />
#!/usr/bin/env python<br />
<br />
or<br />
<br />
#!/usr/bin/python<br />
<br />
In both cases, just change {{ic|python}} to {{ic|python2}} and the program will then use Python 2 instead of Python 3.<br />
<br />
Another way to force the use of python2 without altering the scripts is to call it explicitly with {{ic|python2}}:<br />
<br />
$ python2 ''myScript.py''<br />
<br />
Finally, you may not be able to control the script calls, but there is a way to trick the environment. It only works if the scripts use {{ic|#!/usr/bin/env python}}. It will not work with {{ic|#!/usr/bin/python}}. This trick relies on {{ic|env}} searching for the first corresponding entry in the {{ic|PATH}} variable.<br />
<br />
First create a dummy folder:<br />
<br />
$ mkdir ~/bin<br />
<br />
Then add a symlink {{ic|python}} to ''python2'' and the config scripts in it:<br />
<br />
$ ln -s /usr/bin/python2 ~/bin/python<br />
$ ln -s /usr/bin/python2-config ~/bin/python-config<br />
<br />
Finally put the new folder ''at the beginning'' of your {{ic|PATH}} variable:<br />
<br />
$ export PATH=~/bin:$PATH<br />
<br />
{{Note|This method of changing [[environment variables]] is not permanent and is only active in the current terminal session.}}<br />
<br />
To check which python interpreter is being used by {{ic|env}}, use the following command:<br />
<br />
$ which python<br />
<br />
A similar approach in tricking the environment, which also relies on {{ic|#!/usr/bin/env python}} to be called by the script in question, is to use a [[#Virtual environment|virtual environment]].<br />
<br />
=== Old versions ===<br />
<br />
{{warning|Python versions before 2.7 and 3.4 have not received any updates&mdash;including security patches&mdash;since at least 2014. Using older versions for Internet-facing applications or untrusted code may be dangerous and is not recommended.}}<br />
<br />
Old versions of Python are available via the [[AUR]] and may be useful for historical curiosity, old applications that do not run on current versions, or for testing Python programs intended to run on a distribution that comes with an older version (e.g. RHEL 5.x has Python 2.4, or Ubuntu 12.04 has Python 3.2):<br />
<br />
* Python 3.5: {{AUR|python35}}<br />
* Python 3.4: {{AUR|python34}}<br />
* Python 3.3: {{AUR|python33}}<br />
* Python 3.2: {{AUR|python32}}<br />
* Python 3.0: {{AUR|python30}}<br />
* Python 2.6: {{AUR|python26}}<br />
* Python 2.5: {{AUR|python25}}<br />
* Python 1.5: {{AUR|python15}}<br />
<br />
Extra modules/libraries for old versions of Python may be found on the AUR by searching for {{ic|python<''version without period''>}}, e.g. searching for "python26" for 2.6 modules.<br />
<br />
== Package management ==<br />
<br />
Although a great number of Python packages are readily available in the [[official repositories]] and the [[AUR]], the Python ecosystem provides its own package managers for use with [https://pypi.python.org/ PyPI], the Python Package Index:<br />
<br />
* {{App|pip|The PyPA tool for installing Python packages.|https://pip.pypa.io/|{{Pkg|python-pip}}, {{Pkg|python2-pip}}}}<br />
* {{App|setuptools|Easily download, build, install, upgrade, and uninstall Python packages.|https://setuptools.readthedocs.io/|{{Pkg|python-setuptools}}, {{Pkg|python2-setuptools}}}}<br />
<br />
For a brief history and feature comparison between the two, see [https://packaging.python.org/pip_easy_install/#pip-vs-easy-install pip vs easy_install]. Authoritative best practices in Python package management are detailed [https://packaging.python.org/ here].<br />
<br />
If you must use ''pip'', use a [[#Virtual environment|virtual environment]] or with {{ic|pip install --user}} to avoid conflicting with packages in {{ic|/usr}}. It is always preferred to [[System maintenance#Use the package manager to install software|use pacman to install software]].<br />
<br />
{{Note|There are also tools integrating ''pip'' with ''pacman'' by automatically generating PKGBUILDs for specified pip-packages: see [[Creating packages#PKGBUILD generators]].}}<br />
<br />
== Widget bindings ==<br />
<br />
The following [[Wikipedia:Widget toolkit|widget toolkit]] bindings are available:<br />
<br />
* {{App|TkInter|Tk bindings|https://wiki.python.org/moin/TkInter|standard module}}<br />
* {{App|pyQt|[[Qt]] bindings|https://riverbankcomputing.com/software/pyqt/intro|{{Pkg|python2-pyqt4}} {{Pkg|python2-pyqt5}} {{Pkg|python-pyqt4}} {{Pkg|python-pyqt5}}}}<br />
* {{App|pySide|[[Qt]] bindings|https://wiki.qt.io/PySide|{{Pkg|python2-pyside}} {{Pkg|python-pyside}}}}<br />
* {{App|pyGTK|[[GTK+|GTK+ 2]] bindings|http://www.pygtk.org/|{{Pkg|pygtk}}}}<br />
* {{App|PyGObject|[[GTK+|GTK+ 2/3]] bindings via GObject Introspection|https://wiki.gnome.org/PyGObject/|{{Pkg|python2-gobject2}} {{Pkg|python2-gobject}} {{Pkg|python-gobject2}} {{Pkg|python-gobject}}}}<br />
* {{App|wxPython|wxWidgets bindings|https://wxpython.org/|{{Pkg|wxpython}}}}<br />
<br />
To use these with Python, you may need to install the associated widget kits.<br />
<br />
== Tips and tricks ==<br />
<br />
=== IPython ===<br />
[http://ipython.org/ IPython] is an enhanced Python command line available in the official repositories as {{Pkg|ipython}} and {{Pkg|ipython2}}. If you want the IPython notebook, install {{Pkg|jupyter-notebook}} for the IPython3 notebook and {{Pkg|ipython2-notebook}} for the IPython2 notebook. Run:<br />
<br />
$ jupyter notebook<br />
<br />
to autostart the browser and run the IPython kernel. You can select the ''python'' version when creating the notebook in the browser.<br />
<br />
[https://bpython-interpreter.org/ bpython] is a ncurses interface to the Python interpreter, available in the official repositories as {{Pkg|bpython}} and {{Pkg|bpython2}}.<br />
<br />
=== Virtual environment ===<br />
<br />
Python provides tools to create isolated environments in which you can install packages without interfering with the other virtual environments nor with the system Python's packages. It could change the ''python'' interpreter used for a specific application. <br />
<br />
See [[Python/Virtual environment]] for details.<br />
<br />
=== Tab completion in Python2 shell ===<br />
<br />
Since Python 3.4 [https://docs.python.org/3/tutorial/interactive.html tab completion] is enabled by default, for Python 2 you can manually enable it by adding the following lines to a file referenced by the {{ic|PYTHONSTARTUP}} environment variable: [https://algorithmicallyrandom.blogspot.co.at/2009/09/tab-completion-in-python-shell-how-to.html]<br />
<br />
import rlcompleter<br />
import readline<br />
readline.parse_and_bind("tab: complete")<br />
<br />
== Troubleshooting ==<br />
=== Dealing with version problem in build scripts ===<br />
<br />
Many projects' build scripts assume {{ic|python}} to be Python 2, and that would eventually result in an error — typically complaining that {{ic|print 'foo'}} is invalid syntax. Luckily, many of them call ''python'' from the {{ic|PATH}} environment variable instead of hardcoding {{ic|#!/usr/bin/python}} in the shebang line, and the Python scripts are all contained within the project tree. So, instead of modifying the build scripts manually, there is a workaround. Create {{ic|/usr/local/bin/python}} with content like this:<br />
<br />
{{hc|/usr/local/bin/python|<nowiki><br />
#!/bin/bash<br />
script=$(readlink -f -- "$1")<br />
case "$script" in (/path/to/project1/*|/path/to/project2/*|/path/to/project3*)<br />
exec python2 "$@"<br />
;;<br />
esac<br />
<br />
exec python3 "$@"<br />
</nowiki>}}<br />
<br />
Where {{ic|<nowiki>/path/to/project1/*|/path/to/project2/*|/path/to/project3*</nowiki>}} is a list of patterns separated by {{ic|<nowiki>|</nowiki>}} matching all project trees. For some scripts, the path may not be the first parameter, for example Google SDK it sends "-S" as the first parameter. The readlink command should change to {{ic|1=script=$(readlink -f -- "$1")}}.<br />
<br />
Do not forget to make it [[executable]]. Afterwards scripts within the specified project trees will be run with Python 2.<br />
<br />
== See also ==<br />
<br />
* [http://shop.oreilly.com/product/0636920028154.do O'Reilly's Learning Python, 5th edition] commercial<br />
* [http://www.diveintopython.net/ Dive Into Python], [http://getpython3.com/diveintopython3/ Dive Into Python3]<br />
* [https://python.swaroopch.com/ A Byte of Python]<br />
* [https://learnpythonthehardway.org/ Learn Python the Hard Way]<br />
* [https://learnpython.org/ Learn Python]<br />
* [https://stephensugden.com/crash_into_python/ Crash into Python] (assumes familiarity with other programming languages)<br />
* [https://www.apress.com/book/9781590598726 Beginning Game Development with Python and Pygame] commercial<br />
* [http://www.greenteapress.com/thinkpython/ Think Python]<br />
* [https://pythonspot.com Pythonspot]<br />
* [http://www.techbeamers.com/python-tutorial-step-by-step/ Learn Python Step by Step]<br />
* [https://github.com/vinta/awesome-python awesome-python] - A curated list of Python frameworks, libraries, software and resources.<br />
* [https://github.com/mahmoud/boltons boltons] - Constructs/recipes/snippets that would be handy in the standard library.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Python&diff=498007Python2017-11-23T14:10:38Z<p>Nodiscc: add Django to related articles</p>
<hr />
<div>[[Category:Programming languages]]<br />
[[de:Python]]<br />
[[es:Python]]<br />
[[ja:Python]]<br />
[[ko:Python]]<br />
[[ru:Python]]<br />
[[zh-hans:Python]]<br />
{{Related articles start}}<br />
{{Related|Python package guidelines}}<br />
{{Related|Python/Virtual environment}}<br />
{{Related|mod_wsgi}}<br />
{{Related|Django}}<br />
{{Related articles end}}<br />
From [[Wikipedia:Python (programming language)|Wikipedia]]:<br />
<br />
:Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than possible in languages such as C++ or Java. The language provides constructs intended to enable writing clear programs on both a small and large scale.<br />
:Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system and automatic memory management and has a large and comprehensive standard library.<br />
<br />
== Installation ==<br />
<br />
=== Python 3 ===<br />
<br />
Python 3 is the latest version of the language, and is incompatible with Python 2. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Also, the standard library has been reorganized in a few prominent places. For an overview of the differences, visit [https://wiki.python.org/moin/Python2orPython3 Python2orPython3] and their relevant [http://getpython3.com/diveintopython3/porting-code-to-python-3-with-2to3.html chapter] in Dive into Python 3.<br />
<br />
To install the latest version of Python 3, [[install]] the {{Pkg|python}} package.<br />
<br />
If you would like to build the latest RC/betas from source, visit [https://www.python.org/downloads/ Python Downloads]. The [[Arch User Repository]] also contains good [[PKGBUILD]]s. If you do decide to build the RC, note that the binary (by default) installs to {{ic|/usr/local/bin/python3.x}}.<br />
<br />
=== Python 2 ===<br />
<br />
To get the latest version of Python 2, [[install]] the {{Pkg|python2}} package.<br />
<br />
Python 2 will happily run alongside Python 3. You need to specify {{ic|python2}} in order to run this version.<br />
<br />
Any program requiring Python 2 needs to point to {{ic|/usr/bin/python2}}, instead of {{ic|/usr/bin/python}}, which points to Python 3. To do so, open the program or script in a [[List of applications/Documents#Text editors|text editor]] and change the first line. The line will show one of the following:<br />
<br />
#!/usr/bin/env python<br />
<br />
or<br />
<br />
#!/usr/bin/python<br />
<br />
In both cases, just change {{ic|python}} to {{ic|python2}} and the program will then use Python 2 instead of Python 3.<br />
<br />
Another way to force the use of python2 without altering the scripts is to call it explicitly with {{ic|python2}}:<br />
<br />
$ python2 ''myScript.py''<br />
<br />
Finally, you may not be able to control the script calls, but there is a way to trick the environment. It only works if the scripts use {{ic|#!/usr/bin/env python}}. It will not work with {{ic|#!/usr/bin/python}}. This trick relies on {{ic|env}} searching for the first corresponding entry in the {{ic|PATH}} variable.<br />
<br />
First create a dummy folder:<br />
<br />
$ mkdir ~/bin<br />
<br />
Then add a symlink {{ic|python}} to ''python2'' and the config scripts in it:<br />
<br />
$ ln -s /usr/bin/python2 ~/bin/python<br />
$ ln -s /usr/bin/python2-config ~/bin/python-config<br />
<br />
Finally put the new folder ''at the beginning'' of your {{ic|PATH}} variable:<br />
<br />
$ export PATH=~/bin:$PATH<br />
<br />
{{Note|This method of changing [[environment variables]] is not permanent and is only active in the current terminal session.}}<br />
<br />
To check which python interpreter is being used by {{ic|env}}, use the following command:<br />
<br />
$ which python<br />
<br />
A similar approach in tricking the environment, which also relies on {{ic|#!/usr/bin/env python}} to be called by the script in question, is to use a [[#Virtual environment|virtual environment]].<br />
<br />
=== Old versions ===<br />
<br />
{{warning|Python versions before 2.7 and 3.4 have not received any updates&mdash;including security patches&mdash;since at least 2014. Using older versions for Internet-facing applications or untrusted code may be dangerous and is not recommended.}}<br />
<br />
Old versions of Python are available via the [[AUR]] and may be useful for historical curiosity, old applications that do not run on current versions, or for testing Python programs intended to run on a distribution that comes with an older version (e.g. RHEL 5.x has Python 2.4, or Ubuntu 12.04 has Python 3.2):<br />
<br />
* Python 3.5: {{AUR|python35}}<br />
* Python 3.4: {{AUR|python34}}<br />
* Python 3.3: {{AUR|python33}}<br />
* Python 3.2: {{AUR|python32}}<br />
* Python 3.0: {{AUR|python30}}<br />
* Python 2.6: {{AUR|python26}}<br />
* Python 2.5: {{AUR|python25}}<br />
* Python 1.5: {{AUR|python15}}<br />
<br />
Extra modules/libraries for old versions of Python may be found on the AUR by searching for {{ic|python<''version without period''>}}, e.g. searching for "python26" for 2.6 modules.<br />
<br />
== Package management ==<br />
<br />
Although a great number of Python packages are readily available in the [[official repositories]] and the [[AUR]], the Python ecosystem provides its own package managers for use with [https://pypi.python.org/ PyPI], the Python Package Index:<br />
<br />
* {{App|pip|The PyPA tool for installing Python packages.|https://pip.pypa.io/|{{Pkg|python-pip}}, {{Pkg|python2-pip}}}}<br />
* {{App|setuptools|Easily download, build, install, upgrade, and uninstall Python packages.|https://setuptools.readthedocs.io/|{{Pkg|python-setuptools}}, {{Pkg|python2-setuptools}}}}<br />
<br />
For a brief history and feature comparison between the two, see [https://packaging.python.org/pip_easy_install/#pip-vs-easy-install pip vs easy_install]. Authoritative best practices in Python package management are detailed [https://packaging.python.org/ here].<br />
<br />
If you must use ''pip'', use a [[#Virtual environment|virtual environment]] or with {{ic|pip install --user}} to avoid conflicting with packages in {{ic|/usr}}. It is always preferred to [[System maintenance#Use the package manager to install software|use pacman to install software]].<br />
<br />
{{Note|There are also tools integrating ''pip'' with ''pacman'' by automatically generating PKGBUILDs for specified pip-packages: see [[Creating packages#PKGBUILD generators]].}}<br />
<br />
== Widget bindings ==<br />
<br />
The following [[Wikipedia:Widget toolkit|widget toolkit]] bindings are available:<br />
<br />
* {{App|TkInter|Tk bindings|https://wiki.python.org/moin/TkInter|standard module}}<br />
* {{App|pyQt|[[Qt]] bindings|https://riverbankcomputing.com/software/pyqt/intro|{{Pkg|python2-pyqt4}} {{Pkg|python2-pyqt5}} {{Pkg|python-pyqt4}} {{Pkg|python-pyqt5}}}}<br />
* {{App|pySide|[[Qt]] bindings|https://wiki.qt.io/PySide|{{Pkg|python2-pyside}} {{Pkg|python-pyside}}}}<br />
* {{App|pyGTK|[[GTK+|GTK+ 2]] bindings|http://www.pygtk.org/|{{Pkg|pygtk}}}}<br />
* {{App|PyGObject|[[GTK+|GTK+ 2/3]] bindings via GObject Introspection|https://wiki.gnome.org/PyGObject/|{{Pkg|python2-gobject2}} {{Pkg|python2-gobject}} {{Pkg|python-gobject2}} {{Pkg|python-gobject}}}}<br />
* {{App|wxPython|wxWidgets bindings|https://wxpython.org/|{{Pkg|wxpython}}}}<br />
<br />
To use these with Python, you may need to install the associated widget kits.<br />
<br />
== Tips and tricks ==<br />
<br />
=== IPython ===<br />
[http://ipython.org/ IPython] is an enhanced Python command line available in the official repositories as {{Pkg|ipython}} and {{Pkg|ipython2}}. If you want the IPython notebook, install {{Pkg|jupyter-notebook}} for the IPython3 notebook and {{Pkg|ipython2-notebook}} for the IPython2 notebook. Run:<br />
<br />
$ jupyter notebook<br />
<br />
to autostart the browser and run the IPython kernel. You can select the ''python'' version when creating the notebook in the browser.<br />
<br />
[https://bpython-interpreter.org/ bpython] is a ncurses interface to the Python interpreter, available in the official repositories as {{Pkg|bpython}} and {{Pkg|bpython2}}.<br />
<br />
=== Virtual environment ===<br />
<br />
Python provides tools to create isolated environments in which you can install packages without interfering with the other virtual environments nor with the system Python's packages. It could change the ''python'' interpreter used for a specific application. <br />
<br />
See [[Python/Virtual environment]] for details.<br />
<br />
=== Tab completion in Python2 shell ===<br />
<br />
Since Python 3.4 [https://docs.python.org/3/tutorial/interactive.html tab completion] is enabled by default, for Python 2 you can manually enable it by adding the following lines to a file referenced by the {{ic|PYTHONSTARTUP}} environment variable: [https://algorithmicallyrandom.blogspot.co.at/2009/09/tab-completion-in-python-shell-how-to.html]<br />
<br />
import rlcompleter<br />
import readline<br />
readline.parse_and_bind("tab: complete")<br />
<br />
== Troubleshooting ==<br />
=== Dealing with version problem in build scripts ===<br />
<br />
Many projects' build scripts assume {{ic|python}} to be Python 2, and that would eventually result in an error — typically complaining that {{ic|print 'foo'}} is invalid syntax. Luckily, many of them call ''python'' from the {{ic|PATH}} environment variable instead of hardcoding {{ic|#!/usr/bin/python}} in the shebang line, and the Python scripts are all contained within the project tree. So, instead of modifying the build scripts manually, there is a workaround. Create {{ic|/usr/local/bin/python}} with content like this:<br />
<br />
{{hc|/usr/local/bin/python|<nowiki><br />
#!/bin/bash<br />
script=$(readlink -f -- "$1")<br />
case "$script" in (/path/to/project1/*|/path/to/project2/*|/path/to/project3*)<br />
exec python2 "$@"<br />
;;<br />
esac<br />
<br />
exec python3 "$@"<br />
</nowiki>}}<br />
<br />
Where {{ic|<nowiki>/path/to/project1/*|/path/to/project2/*|/path/to/project3*</nowiki>}} is a list of patterns separated by {{ic|<nowiki>|</nowiki>}} matching all project trees. For some scripts, the path may not be the first parameter, for example Google SDK it sends "-S" as the first parameter. The readlink command should change to {{ic|1=script=$(readlink -f -- "$1")}}.<br />
<br />
Do not forget to make it [[executable]]. Afterwards scripts within the specified project trees will be run with Python 2.<br />
<br />
== See also ==<br />
<br />
* [http://shop.oreilly.com/product/0636920028154.do O'Reilly's Learning Python, 5th edition] commercial<br />
* [http://www.diveintopython.net/ Dive Into Python], [http://getpython3.com/diveintopython3/ Dive Into Python3]<br />
* [https://python.swaroopch.com/ A Byte of Python]<br />
* [https://learnpythonthehardway.org/ Learn Python the Hard Way]<br />
* [https://learnpython.org/ Learn Python]<br />
* [https://stephensugden.com/crash_into_python/ Crash into Python] (assumes familiarity with other programming languages)<br />
* [https://www.apress.com/book/9781590598726 Beginning Game Development with Python and Pygame] commercial<br />
* [http://www.greenteapress.com/thinkpython/ Think Python]<br />
* [https://pythonspot.com Pythonspot]<br />
* [http://www.techbeamers.com/python-tutorial-step-by-step/ Learn Python Step by Step]<br />
* [https://github.com/vinta/awesome-python awesome-python] - A curated list of Python frameworks, libraries, software and resources.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Python&diff=498006Python2017-11-23T14:09:47Z<p>Nodiscc: /* See also */ add link to https://github.com/vinta/awesome-python</p>
<hr />
<div>[[Category:Programming languages]]<br />
[[de:Python]]<br />
[[es:Python]]<br />
[[ja:Python]]<br />
[[ko:Python]]<br />
[[ru:Python]]<br />
[[zh-hans:Python]]<br />
{{Related articles start}}<br />
{{Related|Python package guidelines}}<br />
{{Related|Python/Virtual environment}}<br />
{{Related|mod_wsgi}}<br />
{{Related articles end}}<br />
From [[Wikipedia:Python (programming language)|Wikipedia]]:<br />
<br />
:Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than possible in languages such as C++ or Java. The language provides constructs intended to enable writing clear programs on both a small and large scale.<br />
:Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system and automatic memory management and has a large and comprehensive standard library.<br />
<br />
== Installation ==<br />
<br />
=== Python 3 ===<br />
<br />
Python 3 is the latest version of the language, and is incompatible with Python 2. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Also, the standard library has been reorganized in a few prominent places. For an overview of the differences, visit [https://wiki.python.org/moin/Python2orPython3 Python2orPython3] and their relevant [http://getpython3.com/diveintopython3/porting-code-to-python-3-with-2to3.html chapter] in Dive into Python 3.<br />
<br />
To install the latest version of Python 3, [[install]] the {{Pkg|python}} package.<br />
<br />
If you would like to build the latest RC/betas from source, visit [https://www.python.org/downloads/ Python Downloads]. The [[Arch User Repository]] also contains good [[PKGBUILD]]s. If you do decide to build the RC, note that the binary (by default) installs to {{ic|/usr/local/bin/python3.x}}.<br />
<br />
=== Python 2 ===<br />
<br />
To get the latest version of Python 2, [[install]] the {{Pkg|python2}} package.<br />
<br />
Python 2 will happily run alongside Python 3. You need to specify {{ic|python2}} in order to run this version.<br />
<br />
Any program requiring Python 2 needs to point to {{ic|/usr/bin/python2}}, instead of {{ic|/usr/bin/python}}, which points to Python 3. To do so, open the program or script in a [[List of applications/Documents#Text editors|text editor]] and change the first line. The line will show one of the following:<br />
<br />
#!/usr/bin/env python<br />
<br />
or<br />
<br />
#!/usr/bin/python<br />
<br />
In both cases, just change {{ic|python}} to {{ic|python2}} and the program will then use Python 2 instead of Python 3.<br />
<br />
Another way to force the use of python2 without altering the scripts is to call it explicitly with {{ic|python2}}:<br />
<br />
$ python2 ''myScript.py''<br />
<br />
Finally, you may not be able to control the script calls, but there is a way to trick the environment. It only works if the scripts use {{ic|#!/usr/bin/env python}}. It will not work with {{ic|#!/usr/bin/python}}. This trick relies on {{ic|env}} searching for the first corresponding entry in the {{ic|PATH}} variable.<br />
<br />
First create a dummy folder:<br />
<br />
$ mkdir ~/bin<br />
<br />
Then add a symlink {{ic|python}} to ''python2'' and the config scripts in it:<br />
<br />
$ ln -s /usr/bin/python2 ~/bin/python<br />
$ ln -s /usr/bin/python2-config ~/bin/python-config<br />
<br />
Finally put the new folder ''at the beginning'' of your {{ic|PATH}} variable:<br />
<br />
$ export PATH=~/bin:$PATH<br />
<br />
{{Note|This method of changing [[environment variables]] is not permanent and is only active in the current terminal session.}}<br />
<br />
To check which python interpreter is being used by {{ic|env}}, use the following command:<br />
<br />
$ which python<br />
<br />
A similar approach in tricking the environment, which also relies on {{ic|#!/usr/bin/env python}} to be called by the script in question, is to use a [[#Virtual environment|virtual environment]].<br />
<br />
=== Old versions ===<br />
<br />
{{warning|Python versions before 2.7 and 3.4 have not received any updates&mdash;including security patches&mdash;since at least 2014. Using older versions for Internet-facing applications or untrusted code may be dangerous and is not recommended.}}<br />
<br />
Old versions of Python are available via the [[AUR]] and may be useful for historical curiosity, old applications that do not run on current versions, or for testing Python programs intended to run on a distribution that comes with an older version (e.g. RHEL 5.x has Python 2.4, or Ubuntu 12.04 has Python 3.2):<br />
<br />
* Python 3.5: {{AUR|python35}}<br />
* Python 3.4: {{AUR|python34}}<br />
* Python 3.3: {{AUR|python33}}<br />
* Python 3.2: {{AUR|python32}}<br />
* Python 3.0: {{AUR|python30}}<br />
* Python 2.6: {{AUR|python26}}<br />
* Python 2.5: {{AUR|python25}}<br />
* Python 1.5: {{AUR|python15}}<br />
<br />
Extra modules/libraries for old versions of Python may be found on the AUR by searching for {{ic|python<''version without period''>}}, e.g. searching for "python26" for 2.6 modules.<br />
<br />
== Package management ==<br />
<br />
Although a great number of Python packages are readily available in the [[official repositories]] and the [[AUR]], the Python ecosystem provides its own package managers for use with [https://pypi.python.org/ PyPI], the Python Package Index:<br />
<br />
* {{App|pip|The PyPA tool for installing Python packages.|https://pip.pypa.io/|{{Pkg|python-pip}}, {{Pkg|python2-pip}}}}<br />
* {{App|setuptools|Easily download, build, install, upgrade, and uninstall Python packages.|https://setuptools.readthedocs.io/|{{Pkg|python-setuptools}}, {{Pkg|python2-setuptools}}}}<br />
<br />
For a brief history and feature comparison between the two, see [https://packaging.python.org/pip_easy_install/#pip-vs-easy-install pip vs easy_install]. Authoritative best practices in Python package management are detailed [https://packaging.python.org/ here].<br />
<br />
If you must use ''pip'', use a [[#Virtual environment|virtual environment]] or with {{ic|pip install --user}} to avoid conflicting with packages in {{ic|/usr}}. It is always preferred to [[System maintenance#Use the package manager to install software|use pacman to install software]].<br />
<br />
{{Note|There are also tools integrating ''pip'' with ''pacman'' by automatically generating PKGBUILDs for specified pip-packages: see [[Creating packages#PKGBUILD generators]].}}<br />
<br />
== Widget bindings ==<br />
<br />
The following [[Wikipedia:Widget toolkit|widget toolkit]] bindings are available:<br />
<br />
* {{App|TkInter|Tk bindings|https://wiki.python.org/moin/TkInter|standard module}}<br />
* {{App|pyQt|[[Qt]] bindings|https://riverbankcomputing.com/software/pyqt/intro|{{Pkg|python2-pyqt4}} {{Pkg|python2-pyqt5}} {{Pkg|python-pyqt4}} {{Pkg|python-pyqt5}}}}<br />
* {{App|pySide|[[Qt]] bindings|https://wiki.qt.io/PySide|{{Pkg|python2-pyside}} {{Pkg|python-pyside}}}}<br />
* {{App|pyGTK|[[GTK+|GTK+ 2]] bindings|http://www.pygtk.org/|{{Pkg|pygtk}}}}<br />
* {{App|PyGObject|[[GTK+|GTK+ 2/3]] bindings via GObject Introspection|https://wiki.gnome.org/PyGObject/|{{Pkg|python2-gobject2}} {{Pkg|python2-gobject}} {{Pkg|python-gobject2}} {{Pkg|python-gobject}}}}<br />
* {{App|wxPython|wxWidgets bindings|https://wxpython.org/|{{Pkg|wxpython}}}}<br />
<br />
To use these with Python, you may need to install the associated widget kits.<br />
<br />
== Tips and tricks ==<br />
<br />
=== IPython ===<br />
[http://ipython.org/ IPython] is an enhanced Python command line available in the official repositories as {{Pkg|ipython}} and {{Pkg|ipython2}}. If you want the IPython notebook, install {{Pkg|jupyter-notebook}} for the IPython3 notebook and {{Pkg|ipython2-notebook}} for the IPython2 notebook. Run:<br />
<br />
$ jupyter notebook<br />
<br />
to autostart the browser and run the IPython kernel. You can select the ''python'' version when creating the notebook in the browser.<br />
<br />
[https://bpython-interpreter.org/ bpython] is a ncurses interface to the Python interpreter, available in the official repositories as {{Pkg|bpython}} and {{Pkg|bpython2}}.<br />
<br />
=== Virtual environment ===<br />
<br />
Python provides tools to create isolated environments in which you can install packages without interfering with the other virtual environments nor with the system Python's packages. It could change the ''python'' interpreter used for a specific application. <br />
<br />
See [[Python/Virtual environment]] for details.<br />
<br />
=== Tab completion in Python2 shell ===<br />
<br />
Since Python 3.4 [https://docs.python.org/3/tutorial/interactive.html tab completion] is enabled by default, for Python 2 you can manually enable it by adding the following lines to a file referenced by the {{ic|PYTHONSTARTUP}} environment variable: [https://algorithmicallyrandom.blogspot.co.at/2009/09/tab-completion-in-python-shell-how-to.html]<br />
<br />
import rlcompleter<br />
import readline<br />
readline.parse_and_bind("tab: complete")<br />
<br />
== Troubleshooting ==<br />
=== Dealing with version problem in build scripts ===<br />
<br />
Many projects' build scripts assume {{ic|python}} to be Python 2, and that would eventually result in an error — typically complaining that {{ic|print 'foo'}} is invalid syntax. Luckily, many of them call ''python'' from the {{ic|PATH}} environment variable instead of hardcoding {{ic|#!/usr/bin/python}} in the shebang line, and the Python scripts are all contained within the project tree. So, instead of modifying the build scripts manually, there is a workaround. Create {{ic|/usr/local/bin/python}} with content like this:<br />
<br />
{{hc|/usr/local/bin/python|<nowiki><br />
#!/bin/bash<br />
script=$(readlink -f -- "$1")<br />
case "$script" in (/path/to/project1/*|/path/to/project2/*|/path/to/project3*)<br />
exec python2 "$@"<br />
;;<br />
esac<br />
<br />
exec python3 "$@"<br />
</nowiki>}}<br />
<br />
Where {{ic|<nowiki>/path/to/project1/*|/path/to/project2/*|/path/to/project3*</nowiki>}} is a list of patterns separated by {{ic|<nowiki>|</nowiki>}} matching all project trees. For some scripts, the path may not be the first parameter, for example Google SDK it sends "-S" as the first parameter. The readlink command should change to {{ic|1=script=$(readlink -f -- "$1")}}.<br />
<br />
Do not forget to make it [[executable]]. Afterwards scripts within the specified project trees will be run with Python 2.<br />
<br />
== See also ==<br />
<br />
* [http://shop.oreilly.com/product/0636920028154.do O'Reilly's Learning Python, 5th edition] commercial<br />
* [http://www.diveintopython.net/ Dive Into Python], [http://getpython3.com/diveintopython3/ Dive Into Python3]<br />
* [https://python.swaroopch.com/ A Byte of Python]<br />
* [https://learnpythonthehardway.org/ Learn Python the Hard Way]<br />
* [https://learnpython.org/ Learn Python]<br />
* [https://stephensugden.com/crash_into_python/ Crash into Python] (assumes familiarity with other programming languages)<br />
* [https://www.apress.com/book/9781590598726 Beginning Game Development with Python and Pygame] commercial<br />
* [http://www.greenteapress.com/thinkpython/ Think Python]<br />
* [https://pythonspot.com Pythonspot]<br />
* [http://www.techbeamers.com/python-tutorial-step-by-step/ Learn Python Step by Step]<br />
* [https://github.com/vinta/awesome-python awesome-python] - A curated list of Python frameworks, libraries, software and resources.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Django&diff=498004Django2017-11-23T14:01:32Z<p>Nodiscc: /* See also */ add link to https://devel.tech/features/django-vs-flask/</p>
<hr />
<div>[[Category:Web frameworks]]<br />
[[Category:Development]]<br />
[[fr:Django]]<br />
[[ja:Django]]<br />
[http://www.djangoproject.com Django] is a high-level [[Python]] Web framework which follows the model–view–template (MVT) architectural pattern.<br />
<br />
== Installation ==<br />
<br />
Two packages of Django are currently available in the [[official repositories]]. They can be [[Pacman|installed]] with the following packages:<br />
* {{Pkg|python-django}} - Latest python support, with documentation in the {{aur|django-docs}} package from [[AUR]].<br />
* {{Pkg|python2-django}} - Python 2 legacy support<br />
<br />
=== Database driver ===<br />
If you intend to use a [[MySQL]]/MariaDB database as backend, also install the {{AUR|python-mysqlclient}} package.<br />
<br />
== Usage ==<br />
<br />
If you wish to start a Django project, use {{ic|django-admin}} command<br />
$ django-admin startproject mysite<br />
<br />
This will create a ''mysite'' directory in your current directory. It will also create a ''manage.py'' script, which will let you interact with your project.<br />
<br />
More information you will find in the [https://docs.djangoproject.com/en/1.8/intro/tutorial01/ official Django tutorial] and [https://docs.djangoproject.com/en/ Django documentation].<br />
<br />
== See also ==<br />
<br />
*[https://github.com/rosarior/awesome-django awesome-django] - A curated list of Django apps, projects and resources.<br />
*[https://devel.tech/features/django-vs-flask/ Django vs Flask] - Comparison of Django and Flask frameworks.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Django&diff=498003Django2017-11-23T13:59:54Z<p>Nodiscc: add 'See also' section, add link to https://github.com/rosarior/awesome-django</p>
<hr />
<div>[[Category:Web frameworks]]<br />
[[Category:Development]]<br />
[[fr:Django]]<br />
[[ja:Django]]<br />
[http://www.djangoproject.com Django] is a high-level [[Python]] Web framework which follows the model–view–template (MVT) architectural pattern.<br />
<br />
== Installation ==<br />
<br />
Two packages of Django are currently available in the [[official repositories]]. They can be [[Pacman|installed]] with the following packages:<br />
* {{Pkg|python-django}} - Latest python support, with documentation in the {{aur|django-docs}} package from [[AUR]].<br />
* {{Pkg|python2-django}} - Python 2 legacy support<br />
<br />
=== Database driver ===<br />
If you intend to use a [[MySQL]]/MariaDB database as backend, also install the {{AUR|python-mysqlclient}} package.<br />
<br />
== Usage ==<br />
<br />
If you wish to start a Django project, use {{ic|django-admin}} command<br />
$ django-admin startproject mysite<br />
<br />
This will create a ''mysite'' directory in your current directory. It will also create a ''manage.py'' script, which will let you interact with your project.<br />
<br />
More information you will find in the [https://docs.djangoproject.com/en/1.8/intro/tutorial01/ official Django tutorial] and [https://docs.djangoproject.com/en/ Django documentation].<br />
<br />
== See also ==<br />
<br />
*[https://github.com/rosarior/awesome-django awesome-django] - A curated list of Django apps, projects and resources.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Simple_stateful_firewall&diff=497930Simple stateful firewall2017-11-22T22:16:28Z<p>Nodiscc: add inline link to Wikipedia:Stateful firewall</p>
<hr />
<div>[[Category:Firewalls]]<br />
[[es:Simple stateful firewall]]<br />
[[ja:シンプルなステートフルファイアウォール]]<br />
[[ru:Simple stateful firewall]]<br />
[[zh-hans:Simple stateful firewall]]<br />
{{Related articles start}}<br />
{{Related|Firewalls}}<br />
{{Related|Internet sharing}}<br />
{{Related|Nftables#Simple stateful firewall}}<br />
{{Related|Router}}<br />
{{Related|Uncomplicated Firewall}}<br />
{{Related articles end}}<br />
This page explains how to set up a [[Wikipedia:Stateful firewall|stateful]] firewall using [[iptables]]. It also explains what the rules mean and why they are needed. For simplicity, it is split into two major sections. The first section deals with a firewall for a single machine, the second sets up a NAT gateway in addition to the firewall from the first section.<br />
<br />
{{Warning| The rules below are given in the order they are executed and should only be followed while logged in locally. If you are logged into a remote machine, you may be locked out of the machine while setting up the rules. To get around this problem in a remote setup, the [[#Example iptables.rules file|example config file]] can be used.}}<br />
<br />
== Prerequisites ==<br />
<br />
{{Note|Your kernel needs to be compiled with iptables support. All stock Arch Linux kernels have iptables support.}}<br />
<br />
First, install the userland utilities {{Pkg|iptables}} or verify that they are already installed.<br />
<br />
This article assumes that there are currently no iptables rules set. To check the current ruleset and verify that there are currently no rules run the following:<br />
<br />
{{hc|# iptables-save|<nowiki><br />
# Generated by iptables-save v1.4.19.1 on Thu Aug 1 19:28:53 2013<br />
*filter<br />
:INPUT ACCEPT [50:3763]<br />
:FORWARD ACCEPT [0:0]<br />
:OUTPUT ACCEPT [30:3472]<br />
COMMIT<br />
# Completed on Thu Aug 1 19:28:53 2013<br />
</nowiki>}}<br />
<br />
or<br />
<br />
{{hc|# iptables -nvL --line-numbers|<nowiki><br />
Chain INPUT (policy ACCEPT 156 packets, 12541 bytes)<br />
num pkts bytes target prot opt in out source destination<br />
<br />
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)<br />
num pkts bytes target prot opt in out source destination<br />
<br />
Chain OUTPUT (policy ACCEPT 82 packets, 8672 bytes)<br />
num pkts bytes target prot opt in out source destination<br />
</nowiki>}}<br />
<br />
If there are rules, you may be able to reset the rules by loading a default rule set:<br />
<br />
# iptables-restore < /etc/iptables/empty.rules<br />
<br />
Otherwise, see [[Iptables#Resetting rules]].<br />
<br />
== Firewall for a single machine ==<br />
<br />
{{Note|Because iptables processes rules in linear order, from top to bottom within a chain, it is advised to put frequently-hit rules near the start of the chain. Of course there is a limit, depending on the logic that is being implemented. Also, rules have an associated runtime cost, so rules should not be reordered solely based upon empirical observations of the byte/packet counters.}}<br />
<br />
=== Creating necessary chains ===<br />
<br />
For this basic setup, we will create two user-defined chains that we will use to open up ports in the firewall.<br />
<br />
# iptables -N TCP<br />
# iptables -N UDP<br />
<br />
The chains can of course have arbitrary names. We pick these just to match the protocols we want handle with them in the later rules, which are specified with the protocol options, e.g. {{ic|-p tcp}}, always.<br />
<br />
=== The FORWARD chain ===<br />
<br />
If you want to set up your machine as a NAT gateway, please look at [[#Setting up a NAT gateway]]. For a single machine, however, we simply set the policy of the '''FORWARD''' chain to '''DROP''' and move on:<br />
<br />
# iptables -P FORWARD DROP<br />
<br />
=== The OUTPUT chain ===<br />
<br />
We have no intention of filtering any outgoing traffic, as this would make the setup much more complicated and would require some extra thought. In this simple case, we set the '''OUTPUT''' policy to '''ACCEPT'''.<br />
<br />
# iptables -P OUTPUT ACCEPT<br />
<br />
=== The INPUT chain ===<br />
<br />
Similar to the previous chains, we set the default policy for the '''INPUT''' chain to '''DROP''' in case something somehow slips by our rules. Dropping all traffic and specifying what is allowed is the best way to make a secure firewall.<br />
<br />
{{Warning|If you are logged in via SSH, the following will immediately disconnect the SSH session. To avoid it: (1) add the first INPUT chain rule below (it will keep the session open), (2) add a regular rule to allow inbound SSH (to be able to reconnect in case of a connection drop) and (3) set the policy.}}<br />
<br />
# iptables -P INPUT DROP<br />
<br />
Every packet that is received by any network interface will pass the '''INPUT''' chain first, if it is destined for this machine. In this chain, we make sure that only the packets that we want are accepted.<br />
<br />
The first rule added to the INPUT chain will allow traffic that belongs to established connections, or new valid traffic that is related to these connections such as ICMP errors, or echo replies (the packets a host returns when pinged). '''ICMP''' stands for '''Internet Control Message Protocol'''. Some ICMP messages are very important and help to manage congestion and MTU, and are accepted by this rule. <br />
<br />
The connection state {{ic|ESTABLISHED}} implies that either another rule previously allowed the initial ({{ic|--ctstate NEW}}) connection attempt or the connection was already active (for example an active remote SSH connection) when setting the rule: <br />
<br />
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br />
<br />
The second rule will accept all traffic from the "loopback" (lo) interface, which is necessary for many applications and services.<br />
<br />
{{Note|You can add more trusted interfaces here such as "eth1" if you do not want/need the traffic filtered by the firewall, but be warned that if you have a NAT setup that redirects any kind of traffic to this interface from anywhere else in the network (let's say a router), it will get through, regardless of any other settings you may have.}}<br />
<br />
# iptables -A INPUT -i lo -j ACCEPT<br />
<br />
The third rule will drop all traffic with an "INVALID" state match. Traffic can fall into four "state" categories: NEW, ESTABLISHED, RELATED or INVALID and this is what makes this a "stateful" firewall rather than a less secure "stateless" one. States are tracked using the "nf_conntrack_*" kernel modules which are loaded automatically by the kernel as you add rules.<br />
<br />
{{Note|<br />
* This rule will drop all packets with invalid headers or checksums, invalid TCP flags, invalid ICMP messages (such as a port unreachable when we did not send anything to the host), and out of sequence packets which can be caused by sequence prediction or other similar attacks. The "DROP" target will drop a packet without any response, contrary to REJECT which politely refuses the packet. We use DROP because there is no proper "REJECT" response to packets that are INVALID, and we do not want to acknowledge that we received these packets.<br />
* ICMPv6 Neighbor Discovery packets remain untracked, and will always be classified "INVALID" though they are not corrupted or the like. Keep this in mind, and accept them before this rule! iptables -A INPUT -p 41 -j ACCEPT<br />
}}<br />
<br />
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP<br />
<br />
The next rule will accept all new incoming '''ICMP echo requests''', also known as pings. Only the first packet will count as NEW, the others will be handled by the RELATED, ESTABLISHED rule. Since the computer is not a router, no other ICMP traffic with state NEW needs to be allowed.<br />
<br />
# iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
<br />
Now we attach the TCP and UDP chains to the INPUT chain to handle all new incoming connections. Once a connection is accepted by either TCP or UDP chain, it is handled by the RELATED/ESTABLISHED traffic rule. The TCP and UDP chains will either accept new incoming connections, or politely reject them. New TCP connections must be started with SYN packets.<br />
<br />
{{Note| NEW but not SYN is the only invalid TCP flag not covered by the INVALID state. This is because they are rarely malicious packets and should not just be dropped. Instead, they are simply rejected with a TCP RESET by the next rule.}}<br />
<br />
# iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP<br />
# iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP<br />
<br />
We reject TCP connections with TCP RESET packets and UDP streams with ICMP port unreachable messages if the ports are not opened. This imitates default Linux behavior (RFC compliant), and it allows the sender to quickly close the connection and clean up.<br />
<br />
# iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable<br />
# iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset<br />
<br />
For other protocols, we add a final rule to the INPUT chain to reject all remaining incoming traffic with icmp protocol unreachable messages. This imitates Linux's default behavior.<br />
<br />
# iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
<br />
=== Resulting iptables.rules file===<br />
<br />
Example of {{ic|iptables.rules}} file after running all the commands from above:<br />
<br />
{{hc|/etc/iptables/iptables.rules|<br />
# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013<br />
*filter<br />
:INPUT DROP [0:0]<br />
:FORWARD DROP [0:0]<br />
:OUTPUT ACCEPT [0:0]<br />
:TCP - [0:0]<br />
:UDP - [0:0]<br />
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br />
-A INPUT -i lo -j ACCEPT<br />
-A INPUT -m conntrack --ctstate INVALID -j DROP<br />
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP<br />
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP<br />
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable<br />
-A INPUT -p tcp -j REJECT --reject-with tcp-reset<br />
-A INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
COMMIT<br />
# Completed on Sun Mar 17 14:21:12 2013<br />
}}<br />
<br />
This file can be generated and saved with:<br />
<br />
# iptables-save > /etc/iptables/iptables.rules<br />
<br />
and can be used to continue with the following sections. If you are setting up the firewall remotely via SSH, append the following rule to allow new SSH connections before continuing (adjust port as required):<br />
<br />
-A TCP -p tcp --dport 22 -j ACCEPT<br />
<br />
=== The TCP and UDP chains ===<br />
<br />
The TCP and UDP chains contain rules for accepting new incoming TCP connections and UDP streams to specific ports.<br />
<br />
{{Note|This is where you need to add rules to accept incoming connections, such as SSH, HTTP or other services that you want to access remotely.}}<br />
<br />
==== Opening ports to incoming connections ====<br />
<br />
To accept incoming TCP connections on port 80 for a web server:<br />
<br />
# iptables -A TCP -p tcp --dport 80 -j ACCEPT<br />
<br />
To accept incoming TCP connections on port 443 for a web server (HTTPS):<br />
<br />
# iptables -A TCP -p tcp --dport 443 -j ACCEPT<br />
<br />
To allow remote SSH connections (on port 22):<br />
<br />
# iptables -A TCP -p tcp --dport 22 -j ACCEPT<br />
<br />
To accept incoming TCP/UDP requests for a DNS server (port 53):<br />
<br />
# iptables -A TCP -p tcp --dport 53 -j ACCEPT<br />
# iptables -A UDP -p udp --dport 53 -j ACCEPT<br />
<br />
See {{man|8|iptables}} for more advanced rules, like matching multiple ports.<br />
<br />
==== Port knocking ====<br />
Port knocking is a method to externally open ports that, by default, the firewall keeps closed. It works by requiring connection attempts to a series of predefined closed ports. When the correct sequence of port "knocks" (connection attempts) is received, the firewall opens certain port(s) to allow a connection. See [[Port knocking]] for more information.<br />
<br />
=== Protection against spoofing attacks ===<br />
<br />
{{Note|{{ic|rp_filter}} is currently set to {{ic|1}} by default in {{ic|/usr/lib/sysctl.d/50-default.conf}}, so the following step is not necessary.}}<br />
<br />
Blocking reserved local addresses incoming from the internet or local network is normally done through setting {{Ic|rp_filter}} (Reverse Path Filter) in sysctl to 1. To do so, add the following line to your {{Ic|/etc/sysctl.d/90-firewall.conf}} file (see [[sysctl]] for details) to enable source address verification which is built into Linux kernel itself. The verification by the kernel will handle spoofing better than individual iptables rules for each case.<br />
<br />
net.ipv4.conf.all.rp_filter=1<br />
<br />
This can be done with netfilter instead if statistics (and better logging) are desired:<br />
<br />
# iptables -t raw -I PREROUTING -m rpfilter --invert -j DROP<br />
<br />
{{Note|There is no reason to enable this in both places. The netfilter method is the modern choice and works with IPv6 too.}}<br />
<br />
For niche setups where asynchronous routing is used, the {{ic|1=rp_filter=2}} sysctl option needs to be used instead. Passing the {{ic|--loose}} switch to the {{ic|rpfilter}} module will accomplish the same thing with netfilter.<br />
<br />
=== "Hide" your computer ===<br />
<br />
If you are running a desktop machine, it might be a good idea to block some incoming requests.<br />
<br />
==== Block ping request ====<br />
<br />
A 'Ping' request is an ICMP packet sent to the destination address to ensure connectivity between the devices. If your network works well, you can safely block all ping requests. It is important to note that this ''does not'' actually hide your computer — any packet sent to you is rejected, so you will still show up in a simple nmap "ping scan" of an IP range.<br />
<br />
This is rudimentary "protection" and makes life difficult when debugging issues in the future. You should only do this for education purposes.<br />
<br />
To block echo requests, add the following line to your {{Ic|/etc/sysctl.d/90-firewall.conf}} file (see [[sysctl]] for details):<br />
<br />
net.ipv4.icmp_echo_ignore_all = 1<br />
<br />
More information is in the iptables man page, or reading the docs and examples on the webpage http://www.snowman.net/projects/ipt_recent/<br />
<br />
==== Tricking port scanners ====<br />
<br />
{{Note|<br />
* This opens you up to a form of [[Wikipedia:Denial-of-service attack|DoS]]. An attack can send packets with spoofed IPs and get them blocked from connecting to your services.<br />
* This trick may block a legitimate IP address if some packets from this address to the destination port are regarded as INVALID by module conntrack. To avoid blacklisting, a turnaround is to allow all packets directed to that particular destination port.}}<br />
<br />
Port scans are used by attackers to identify open ports on your computer. This allows them to identify and fingerprint your running services and possibly launch exploits against them.<br />
<br />
The INVALID state rule will take care of every type of port scan except UDP, ACK and SYN scans (-sU, -sA and -sS in nmap respectively). <br />
<br />
''ACK scans'' are not used to identify open ports, but to identify ports filtered by a firewall. Due to the SYN check for all TCP connections with the state NEW, every single packet sent by an ACK scan will be correctly rejected by a TCP RESET packet. Some firewalls drop these packets instead, and this allows an attacker to map out the firewall rules.<br />
<br />
The recent module can be used to trick the remaining two types of port scans. The recent module is used to add hosts to a "recent" list which can be used to fingerprint and stop certain types of attacks. Current recent lists can be viewed in {{Ic|/proc/net/xt_recent/}}.<br />
<br />
===== SYN scans =====<br />
<br />
In a SYN scan, the port scanner sends a SYN (synchronization) packet to every port to initiate a TCP connection. Closed ports return a TCP RESET packet, or get dropped by a strict firewall, while open ports return a SYN ACK packet.<br />
<br />
The {{ic|recent}} module can be used to keep track of hosts with rejected connection attempts and return a TCP RESET for any SYN packet they send to open ports as if the port was closed. If an open port is the first to be scanned, a SYN ACK will still be returned, so running applications such as ssh on non-standard ports is required for this to work consistently.<br />
<br />
First, insert a rule at the top of the TCP chain. This rule responds with a TCP RESET to any host that got onto the {{ic|TCP-PORTSCAN}} list in the past sixty seconds. The {{Ic|--update}} switch causes the recent list to be updated, meaning the 60 second counter is reset.<br />
<br />
# iptables -I TCP -p tcp -m recent --update --rsource --seconds 60 --name TCP-PORTSCAN -j REJECT --reject-with tcp-reset<br />
<br />
Next, the rule for rejecting TCP packets need to be modified to add hosts with rejected packets to the {{ic|TCP-PORTSCAN}} list.<br />
<br />
# iptables -D INPUT -p tcp -j REJECT --reject-with tcp-reset<br />
# iptables -A INPUT -p tcp -m recent --set --rsource --name TCP-PORTSCAN -j REJECT --reject-with tcp-reset<br />
<br />
===== UDP scans =====<br />
<br />
UDP port scans are similar to TCP SYN scans except that UDP is a "connectionless" protocol. There are no handshakes or acknowledgements. Instead, the scanner sends UDP packets to each UDP port. Closed ports should return ICMP port unreachable messages, and open ports do not return a response. Since UDP is not a "reliable" protocol, the scanner has no way of knowing if packets were lost, and has to do multiple checks for each port that does not return a response.<br />
<br />
The Linux kernel sends out ICMP port unreachable messages very slowly, so a full UDP scan against a Linux machine would take over 10 hours. However, common ports could still be identified, so applying the same countermeasures against UDP scans as SYN scans is a good idea.<br />
<br />
First, add a rule to reject packets from hosts on the {{ic|UDP-PORTSCAN}} list to the top of the UDP chain.<br />
<br />
# iptables -I UDP -p udp -m recent --update --rsource --seconds 60 --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable<br />
<br />
Next, modify the reject packets rule for UDP:<br />
<br />
# iptables -D INPUT -p udp -j REJECT --reject-with icmp-port-unreachable<br />
# iptables -A INPUT -p udp -m recent --set --rsource --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable<br />
<br />
===== Restore the Final Rule =====<br />
<br />
If either or both of the portscanning tricks above were used the final default rule is no longer the last rule in the INPUT chain. It needs to be the last rule otherwise it will intercept the trick port scanner rules you just added and they will never be used. Simply delete the rule (-D), then add it once again using append (-A) which will place it at the end of the chain.<br />
<br />
# iptables -D INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
# iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable<br />
<br />
=== Protection against other attacks ===<br />
<br />
See the [[sysctl#TCP/IP stack hardening]] for relevant kernel parameters.<br />
<br />
==== Bruteforce attacks ====<br />
<br />
Unfortunately, bruteforce attacks on services accessible via an external IP address are common. One reason for this is that the attacks are easy to perform with the many tools available. Fortunately, there are a number of ways to protect the services against them. One is the use of appropriate {{ic|iptables}} rules which activate and blacklist an IP after a set number of packets attempt to initiate a connection. Another is the use of specialised daemons that monitor the logfiles for failed attempts and blacklist accordingly. <br />
{{Warning| Using an IP blacklist will stop trivial attacks but it relies on an additional daemon and successful logging (the partition containing /var can become full, especially if an attacker is pounding on the server). Additionally, with the knowledge of your IP address, the attacker can send packets with a spoofed source header and get you locked out of the server. [[SSH keys]] provide an elegant solution to the problem of brute forcing without these problems.}}<br />
Two packages that ban IPs after too many password failures are [[Fail2ban]] or, for {{ic|sshd}} in particular, [[Sshguard]]. These two applications update iptables rules to reject temporarily or permanently future connections from attackers.<br />
<br />
The following rules give an example configuration to mitigate SSH bruteforce attacks using {{ic|iptables}}.<br />
<br />
# iptables -N IN_SSH<br />
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH<br />
# iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP<br />
# iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP <br />
# iptables -A IN_SSH -m recent --name sshbf --set -j ACCEPT<br />
<br />
Most of the rules should be self-explanatory: the first one allows for a maximum of three connection packets in ten seconds and drops further attempts from this IP. The next rule adds a quirk by allowing a maximum of four hits in 30 minutes. This is done because some bruteforce attacks are actually performed slow and not in a burst of attempts. The rules employ a number of additional options. To read more about them, check the original reference for this example in [http://compilefailure.blogspot.com/2011/04/better-ssh-brute-force-prevention-with.html compilefailure.blogspot.com]<br />
<br />
The above rules can be used to protect any service, though the SSH daemon is probably the most often required one.<br />
<br />
In terms of order, one must ensure that {{ic|-A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH}} is at the right position in the iptables sequence: it should come before the TCP chain is attached to INPUT in order to catch new SSH connections first. If all the previous steps of this wiki have been completed, the following positioning works:<br />
...<br />
-A INPUT -m conntrack --ctstate INVALID -j DROP<br />
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT<br />
'''-A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j IN_SSH'''<br />
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP<br />
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP<br />
...<br />
<br />
{{Tip|For self-testing the rules after setup, the actual blacklisting can slow the test, making it difficult to fine-tune parameters. One can watch the incoming attempts via {{ic|cat /proc/net/xt_recent/sshbf}}. To unblock the own IP during testing, root is needed {{ic|# echo / > /proc/net/xt_recent/sshbf}}}}<br />
<br />
=== Saving the rules ===<br />
<br />
The ruleset is now finished and should be saved to your hard drive so that it can be loaded on every boot.<br />
<br />
The systemd unit file points to the location where the rule configuration will be saved:<br />
<br />
iptables=/etc/iptables/iptables.rules<br />
ip6tables=/etc/iptables/ip6tables.rules<br />
<br />
Save the rules with this command:<br />
<br />
# iptables-save > /etc/iptables/iptables.rules<br />
<br />
Then [[enable]] and [[start]] {{ic|iptables.service}}. Check the status of the service to make sure the rules load correctly.<br />
<br />
=== IPv6 ===<br />
<br />
If you do not use IPv6 (most ISPs do not support it), you should [[Disabling IPv6|disable it]]. <br />
<br />
Otherwise, you should enable the firewall rules for IPv6. After copying the IPv4 rules as a base: <br />
<br />
# cp /etc/iptables/iptables.rules /etc/iptables/ip6tables.rules<br />
the first step is to change IPs referenced in the rules from IPv4 format to IPv6 format. <br />
<br />
Next, a few of the rules (built as example in this article for IPv4) have to be adapted. IPv6 obtained a new ICMPv6 protocol, replacing ICMP. Hence, the reject error return codes {{ic|--reject-with icmp-port-unreachable}} and {{ic|--reject-with icmp-proto-unreachable}} have to be converted to ICMPv6 codes. <br />
<br />
The available ICMPv6 error codes are listed in [https://tools.ietf.org/html/rfc4443#section-3.1 RFC 4443], which specifies connection attempts blocked by a firewall rule should use {{ic|--reject-with icmp6-adm-prohibited}}. Doing so will basically inform the remote system that the connection was rejected by a firewall, rather than a listening service. <br />
<br />
If it is preferred not to explicitly inform about the existence of a firewall filter, the packet may also be rejected without the message: <br />
<br />
-A INPUT -j REJECT<br />
<br />
The above will reject with the default return error of {{ic|--reject-with icmp6-port-unreachable}}. You should note though, that identifying a firewall is a basic feature of port scanning applications and most will identify it regardless. <br />
<br />
{{Expansion|Which ICMPv6 peculiarities should be added to bring the rules at par with the IPv4 rules this article uses?|Talk:Simple_stateful_firewall#ICMP blocking}}<br />
<br />
In the next step make sure the protocol and extension are changed to be IPv6 appropriate for the rule regarding all new incoming ICMP echo requests (pings):<br />
<br />
# ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT<br />
<br />
Netfilter conntrack does not appear to track ICMPv6 Neighbor Discovery Protocol (the IPv6 equivalent of ARP), so we need to allow ICMPv6 traffic regardless of state for all directly attached subnets. The following should be inserted after dropping {{ic|--ctstate INVALID}}, but before any other DROP or REJECT targets, along with a corresponding line for each directly attached subnet:<br />
<br />
# ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT<br />
<br />
Since there is no kernel reverse path filter for IPv6, you may want to enable one in ''ip6tables'' with the following:<br />
<br />
# ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT<br />
# ip6tables -t raw -A PREROUTING -j DROP<br />
<br />
After the configuration is done, [[enable]] the '''ip6tables''' service, it is meant to run in parallel to ''iptables''.<br />
<br />
== Setting up a NAT gateway ==<br />
<br />
This section of the guide deals with NAT gateways. It is assumed that you already read the [[#Firewall for a single machine|first part of the guide]] and set up the '''INPUT''', '''OUTPUT''', '''TCP''' and '''UDP''' chains like described above. All rules so far have been created in the '''filter''' table. In this section, we will also have to use the '''nat''' table.<br />
<br />
=== Setting up the filter table ===<br />
<br />
==== Creating necessary chains ====<br />
<br />
In our setup, we will use another two chains in the filter table, the '''fw-interfaces''' and '''fw-open''' chains. Create them with the commands<br />
<br />
# iptables -N fw-interfaces<br />
# iptables -N fw-open<br />
<br />
==== Setting up the FORWARD chain ====<br />
<br />
Setting up the '''FORWARD''' chain is similar to the '''INPUT''' chain in the first section.<br />
<br />
Now we set up a rule with the '''conntrack''' match, identical to the one in the '''INPUT''' chain:<br />
<br />
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br />
<br />
The next step is to enable forwarding for trusted interfaces and to make all packets pass the '''fw-open''' chain.<br />
<br />
# iptables -A FORWARD -j fw-interfaces <br />
# iptables -A FORWARD -j fw-open <br />
<br />
The remaining packets are denied with an '''ICMP''' message:<br />
<br />
# iptables -A FORWARD -j REJECT --reject-with icmp-host-unreachable<br />
# iptables -P FORWARD DROP<br />
<br />
==== Setting up the fw-interfaces and fw-open chains ====<br />
<br />
The meaning of the '''fw-interfaces''' and '''fw-open''' chains is explained later, when we deal with the '''POSTROUTING''' and '''PREROUTING''' chains in the '''nat''' table, respectively.<br />
<br />
=== Setting up the nat table ===<br />
<br />
All over this section, we assume that the outgoing interface (the one with the public internet IP) is '''ppp0'''. Keep in mind that you have to change the name in all following rules if your outgoing interface has another name.<br />
<br />
==== Setting up the POSTROUTING chain ====<br />
<br />
Now, we have to define who is allowed to connect to the internet. Let's assume we have the subnet '''192.168.0.0/24''' (which means all addresses that are of the form 192.168.0.*) on '''eth0'''. We first need to accept the machines on this interface in the FORWARD table, that is why we created the '''fw-interfaces''' chain above:<br />
<br />
# iptables -A fw-interfaces -i eth0 -j ACCEPT<br />
<br />
Now, we have to alter all outgoing packets so that they have our public IP address as the source address, instead of the local LAN address. To do this, we use the '''MASQUERADE''' target:<br />
<br />
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
Do not forget the '''-o ppp0''' parameter above. If you omit it, your network will be screwed up.<br />
<br />
Let's assume we have another subnet, '''10.3.0.0/16''' (which means all addresses 10.3.*.*), on the interface '''eth1'''. We add the same rules as above again:<br />
<br />
# iptables -A fw-interfaces -i eth1 -j ACCEPT<br />
# iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -o ppp0 -j MASQUERADE<br />
<br />
The last step is to [[Internet_sharing#Enable_packet_forwarding|enable packet forwarding]] (if it is not already enabled).<br />
<br />
Machines from these subnets can now use your new NAT machine as their gateway. Note that you may want to set up a DNS and DHCP server like '''dnsmasq''' or a combination of '''bind''' and '''dhcpd''' to simplify network settings DNS resolution on the client machines. This is not the topic of this guide.<br />
<br />
==== Setting up the PREROUTING chain ====<br />
<br />
Sometimes, we want to change the address of an incoming packet from the gateway to a LAN machine. To do this, we use the '''fw-open''' chain defined above, as well as the '''PREROUTING''' chain in the '''nat''' table in the following two simple examples. <br />
<br />
First, we want to change all incoming SSH packets (port 22) to the ssh server of the machine '''192.168.0.5''':<br />
<br />
# iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 22 -j DNAT --to 192.168.0.5<br />
# iptables -A fw-open -d 192.168.0.5 -p tcp --dport 22 -j ACCEPT<br />
<br />
The second example will show you how to change packets to a different port than the incoming port. We want to change any incoming connection on port '''8000''' to our web server on '''192.168.0.6''', port '''80''':<br />
<br />
# iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8000 -j DNAT --to 192.168.0.6:80<br />
# iptables -A fw-open -d 192.168.0.6 -p tcp --dport 80 -j ACCEPT<br />
<br />
The same setup also works with udp packets.<br />
<br />
=== Saving the rules ===<br />
<br />
Save the rules:<br />
<br />
# iptables-save > /etc/iptables/iptables.rules<br />
<br />
and make sure your rules are loaded when you boot enabling the '''iptables''' systemd service.<br />
<br />
== See Also ==<br />
<br />
*[http://www.webhostingtalk.com/showthread.php?t=456571 Methods to block SSH attacks]<br />
*[http://www.ducea.com/2006/06/28/using-iptables-to-block-brute-force-attacks/ Using iptables to block brute force attacks]<br />
*[http://linuxconfig.org/collection-of-basic-linux-firewall-iptables-rules 20 Iptables Examples For New SysAdmins]<br />
*[http://www.thegeekstuff.com/2011/06/iptables-rules-examples/ 25 Most Frequently Used Linux IPTables Rules Examples]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Oracle_Database&diff=497927Oracle Database2017-11-22T22:11:00Z<p>Nodiscc: summary: add inline wikipedia:Oracle Database link</p>
<hr />
<div>[[Category:Database management systems]]<br />
[[ja:Oracle]]<br />
[[nl:Oracle]]<br />
[[zh-hans:Oracle]]<br />
{{out of date|1=Installation: Packages and AUR reference too old, Dutch version is up-to-date. Berlios is no more. See [https://wiki.archlinux.org/index.php?title=Oracle&oldid=455394] for an updated [[ArchWiki:Contributing#Do_not_make_complex_edits_at_once|complex edit]]}}<br />
{{Related articles start}}<br />
{{Related|Oracle client}}<br />
{{Related articles end}}<br />
This document will help you install [[Wikipedia:Oracle Database|Oracle Database]] 11gR1 on Arch Linux. If you only want to connect to Oracle databases running elsewhere, see the instructions for installing the [[Oracle client]]. For installation of Oracle Express Edition, see {{AUR|oracle-xe}} and get back to method 2 for after-install configurations.<br />
<br />
By using the install method 2 you will be able to finalize the long installation process with only a few steps.<br />
<br />
== Install method 1 - manual ==<br />
<br />
This section will guide you through installing Oracle onto a fresh installation of archlinux. This is a general approach that has been tested with kernel 2.6.28.ARCH x86_64 and Oracle 11g R1 64-bit. '''''This should in principle work with other versions of Oracle'''''.<br />
<br />
=== Pre installation ===<br />
<br />
=== AUR helper ===<br />
<br />
To ease the installation process you may find useful to install an AUR helper:<br />
# pacman -U ftp://ftp.berlios.de/pub/aurbuild/aurbuild-1.8.4-1-any.pkg.tar.gz<br />
<br />
==== Required packages for Oracle database installation ====<br />
<br />
[[Install]] packages {{Pkg|unzip}} {{Pkg|sudo}} {{Grp|base-devel}} {{Pkg|icu}} {{Pkg|gawk}} {{Pkg|gdb}} {{Pkg|elfutils}} {{Pkg|sysstat}} {{Pkg|libstdc++5}}.<br />
<br />
Install a [[Java]] runtime environment, like {{Pkg|jre7-openjdk}} and {{Pkg|jdk7-openjdk}}.<br />
<br />
From the [[AUR]], install {{AUR|ksh}} (other implementations like [[ksh|these]] may work), {{AUR|beecrypt}}, {{AUR|rpm-org}} and {{Pkg|libaio}}.<br />
<br />
Oracle database 32-bit requires {{Pkg|unixodbc}}.<br />
<br />
Optional lib32 packages on x86_64 are: {{Pkg|lib32-libstdc++5}} {{Pkg|lib32-glibc}} {{Pkg|lib32-gcc-libs}}.<br />
<br />
Oracle database require 32-bit libaio and unixodbc on x86_64 but is not necessary under Arch linux.<br />
<br />
{{Note|The following step is not required in newer Arch Linux installation after the binary directories merge}}<br />
Some prerequisite symbolic links for Oracle Universal Installer.<br />
# ln -s /usr/bin/rpm /bin/rpm<br />
# ln -s /usr/bin/ksh /bin/ksh<br />
# ln -s /bin/awk /usr/bin/awk<br />
# ln -s /bin/tr /usr/bin/tr<br />
# ln -s /usr/bin/basename /bin/basename<br />
Arch x86_64:<br />
# ln -s /usr/lib /usr/lib64<br />
<br />
==== Configuration ====<br />
<br />
Create users and group for Oracle database:<br />
# groupadd oinstall<br />
# groupadd dba<br />
# useradd -m -g oinstall -G dba oracle<br />
<br />
Set password for the user oracle:<br />
# passwd oracle<br />
<br />
Optional: Add oracle to the {{ic|sshd_config}} file.<br />
# pacman -S openssh<br />
Add this line to {{ic|/etc/ssh/sshd_config}}:<br />
AllowUsers oracle<br />
<br />
Add oracle to {{ic|/etc/sudoers}}. This will give oracle super user privilege.<br />
oracle ALL=(ALL) ALL<br />
<br />
Add these lines to {{ic|/etc/sysctl.d/99-sysctl.conf}} ('''''Review Oracle documentation to adjust these settings''''').<br />
# oracle kernel settings<br />
fs.file-max = 6553600<br />
kernel.shmall = 2097152<br />
kernel.shmmax = 2147483648<br />
kernel.shmmni = 4096<br />
kernel.sem = 250 32000 100 128<br />
net.ipv4.ip_local_port_range = 1024 65535<br />
net.core.rmem_default = 4194304<br />
net.core.rmem_max = 4194304<br />
net.core.wmem_default = 262144<br />
net.core.wmem_max = 262144<br />
<br />
Add these lines to {{ic|/etc/security/limits.conf}} ('''''Review Oracle documentation to adjust these settings''''')<br />
# oracle settings<br />
oracle soft nproc 2047<br />
oracle hard nproc 16384<br />
oracle soft nofile 1024<br />
oracle hard nofile 65536<br />
<br />
Optional: You may reboot now if you want the changes to take effect.<br />
<br />
Create some directories for Oracle database. You can chose the directory path. Here is an example.<br />
mkdir -p /oracle/inventory /oracle/recovery /oracle/product/db<br />
<br />
Set permissions for the directories.<br />
chown -R oracle:dba /oracle<br />
chmod 777 /tmp<br />
<br />
Create or update oracle bashrc {{ic|/home/oracle/.bashrc}}. Here is an example of the oracle user settings.<br />
export ORACLE_BASE=/oracle<br />
export ORACLE_HOME=/oracle/product/db<br />
export ORACLE_SID=xdb<br />
export ORACLE_INVENTORY=/oracle/inventory<br />
export ORACLE_BASE ORACLE_SID ORACLE_HOME<br />
export PATH=$ORACLE_HOME/bin:$PATH<br />
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH<br />
export EDITOR=nano<br />
export VISUAL=nano<br />
<br />
=== Graphical installation ===<br />
<br />
==== Installing Oracle database software ====<br />
<br />
Download the Oracle database from here:<br />
http://www.oracle.com/technology/software/products/database/index.html<br />
<br />
Unzip the Oracle database.<br />
unzip linux.x64_11gR1_database_1013.zip -d /media<br />
<br />
Optional: Arch x86_64 (only required if the installer will not launch automatically ... at the time of this writing there was an issue with the packaged unzip in the 64-bit Oracle installer):<br />
cd /media/database/install<br />
mv unzip unzipx<br />
ln -s /usr/bin/unzip <br />
<br />
Change the permissions for the extracted Oracle database.<br />
chmod -R 777 /media/database<br />
chown -R oracle:oinstall /media/database<br />
<br />
Enter the directory where you extracted the Oracle database.<br />
<br />
In oder to run oracle installation script you need to export the X display as a normal user:<br />
DISPLAY=:0.0; export DISPLAY; xhost +<br />
<br />
Login as the user oracle and export the X display:<br />
su oracle<br />
DISPLAY=:0.0; export DISPLAY<br />
<br />
Enter the database directory and run the Oracle Universal Installer as the user oracle.<br />
cd /media/database<br />
./runInstaller -ignoreSysPrereqs<br />
<br />
During the Graphical installation:<br />
# Click on "Next". <br />
# Choose "Enterprise Edition" Installation Type and click on "Next"<br />
# Oracle Base should be: /oracle. Don't change it, unless you know what you're doing. <br />
## Change the default "Name" to orarch or something else. <br />
## The predefined path in {{ic|/etc/rc.d/oracledb}} is "db", ie: /oracle/product/db. If you want to use a different path you'll have to change {{ic|/etc/rc.d/oracledb}}, so that the startup script can locate ORACLE_HOME directory.<br />
## After changing the defaults, click on "Next". <br />
# Since Oracle database requires certain distro requirement, you'll have to manually check them and then click on "Next".<br />
# Chose "Software Install Only" and click on "Next".<br />
# There is only one DBA group for oracle database. Click on "Next".<br />
# Install "Summary" shows what's going to be installed. Click on "Install".<br />
# The installation will take some time, especially the "Linking" part. Be patient! If you get an error message ignore it by clicking on "Continue".<br />
## At the end of the installation you'll have to open another terminal, and execute {{ic|/oracle/product/db/root.sh}} as root. '''Don't click on "OK" yet'''.<br />
## When running root.sh, you'll be offered to use /usr/local/bin as the full pathname. Press the "Enter" key here.<br />
## Now you can click on "OK"<br />
# Installation is finished, click on "Exit" and "Yes", you really want to exit.<br />
<br />
=== Oracle Enterprise Manager installation (optional) ===<br />
<br />
This section describes how to install the web based OEM available in 10g+. <br />
<br />
''Depending on your settings the OUI may have already installed this''.<br />
<br />
Login or su to oracle, then run the following commands (answering the prompts approriately). '''''This may take a while'''''.<br />
cd ${ORACLE_HOME}/bin<br />
./emca -repos create<br />
./emca -config dbcontrol db<br />
<br />
Test this out by navigating to the enterprise manager (adjust the servername (localhost) apporpriately). <br />
<nowiki>https://localhost:1158/em/console</nowiki><br />
<br />
You can control OEM with the following commands.<br />
emctl status dbconsole<br />
emctl stop dbconsole<br />
emctl start dbconsole<br />
<br />
== Install method 2 - AUR ==<br />
<br />
=== Installation ===<br />
<br />
{{Note| This installation method creates a database automatically. The Oracle database will therefore be ready to be used after the installation.}}<br />
<br />
'''Step 1.'''<br />
Download the Arch Linux package {{AUR|oracle}}{{Broken package link|{{aur-mirror|oracle}}}} from AUR.<br />
Download the Oracle database 11gR1: http://www.oracle.com/technology/software/products/database/index.html<br />
<br />
'''Step 2.'''<br />
Extract the Arch Linux package into a directory. Copy the Oracle database 11gR1 into that directory as well.<br />
<br />
INFO: The default install configuration in {{ic| ee.rsp.patch}} is:<br />
ORACLE_BASE="/home/oracle/app/oracle"<br />
ORACLE_HOME="/home/oracle/app/oracle/product/11.1.0/orarch"<br />
ORACLE_HOME_NAME="orarch"<br />
s_globalDBName="archlinux"<br />
s_dbSid="archlinux"<br />
s_superAdminSamePasswd="orarchdbadmin"<br />
s_superAdminSamePasswdAgain="orarchdbadmin"<br />
<br />
Optional: You can either change the default password now or later after the installation. If you change the ee.rsp.patch file, you need to update the md5sums in the PKGBUILD file. To obtain the md5sum, run (makepkg -g) or:<br />
md5sum ee.rsp.patch <br />
<br />
Create the Oracle database package by using makepkg:<br />
makepkg -s<br />
<br />
'''Step 3.'''<br />
Install the package that makepkg has created by using pacman. You may get an error stating "/bin/ksh already exists", just remove that file and pacman will continue.<br />
<br />
Pacman will now install the Oracle database by executing Oracle's own installation script(./runInstaller -silent -ignoreSysPrereqs). <br />
<br />
The installation will take som time, please be patient. Do not exit terminal during database installation, especially when the installation script is executing configuration assistants:<br />
.... <br />
Starting to execute configuration assistants<br />
Configuration assistant "Oracle Net Configuration Assistant" succeeded <br />
...<br />
<br />
The installation script ends something like this:<br />
The following configuration scripts need to be executed as the "root" user.<br />
#!/bin/sh<br />
#Root script to run<br />
/home/oracle/oraInventory/orainstRoot.sh<br />
/home/oracle/app/oracle/product/11.1.0/orarch/root.sh<br />
To execute the configuration scripts:<br />
1. Open a terminal window<br />
2. Log in as "root"<br />
3. Run the scripts<br />
<br />
The installation of Oracle Database 11g was successful.<br />
Please check '/home/oracle/oraInventory/logs/silentInstall2009-03-03_07-24-10PM.log'<br />
for more details.<br />
<br />
'''Step 4.'''<br />
Run these scripts as root:<br />
<br />
# cd /home/oracle/oraInventory<br />
# ./orainstRoot.sh<br />
# cd /home/oracle/app/oracle/product/11.1.0/orarch<br />
# ./root.sh<br />
<br />
'''Step 5.'''<br />
The default user for the Oracle database is "oracle". Since the password is not set for the user oracle, you need to run passwd as root:<br />
passwd oracle<br />
<br />
'''Step 6.'''<br />
Login as the user oracle.<br />
su oracle<br />
<br />
Create the file /home/oracle/.bashrc and add these lines to the .bashrc file:<br />
export ORACLE_SID=archlinux<br />
export ORACLE_HOME=/home/oracle/app/oracle/product/11.1.0/orarch<br />
export PATH=$PATH:$ORACLE_HOME/bin<br />
<br />
'''Step 7.'''<br />
If you haven't altered the {{ic| ee.rsp.patch}} file, you need to '''change the administration password for SYS and SYSTEM'''. <br />
<br />
{{Note| If the database isn't mounted or opened. Login as the user oracle and try this first:}}<br />
su oracle<br />
<br />
sqlplus '/as sysdba'<br />
<br />
SQL> startup mount;<br />
SQL> alter database open; <br />
<br />
Changing the password for the '''SYSTEM''' user:<br />
{{bc|<nowiki><br />
sqlplus '/as sysdba'<br />
<br />
SQL> show user<br />
USER is "SYS"<br />
<br />
SQL> passw system<br />
Changing password for system<br />
New password:<br />
Retype new password:<br />
Password changed<br />
<br />
SQL> quit<br />
</nowiki>}}<br />
<br />
Changing the password for the '''SYS''' user:<br />
{{bc|<nowiki><br />
sqlplus system/secretpassword<br />
<br />
SQL> show user;<br />
USER is "SYSTEM"<br />
<br />
SQL> passw sys<br />
Changing password for sys<br />
New password: <br />
Retype new password: <br />
Password changed<br />
<br />
SQL> quit<br />
</nowiki>}}<br />
<br />
== Post installation ==<br />
<br />
===Creating initial database ===<br />
<br />
==== Graphical ====<br />
<br />
You have only installed the Oracle database software. Now you need to create a database. Login as the user oracle:<br />
su oracle<br />
<br />
Export the ORACLE_HOME binary directory:<br />
export ORACLE_HOME=/oracle/product/db<br />
export PATH=$PATH:$ORACLE_HOME/bin<br />
<br />
Run database installation script:<br />
dbca<br />
<br />
During the graphical installation:<br />
<br />
# Click on "Next".<br />
# Check "Create a Database" and click on "Next".<br />
# Check "General Purpose or Transaction Processing" and click on "Next".<br />
# Chose a database name and SID. Example: Global Database Name: {{Ic|archlinux}}, SID: {{Ic|archlinux}}. And then click on "Next".<br />
# Uncheck "Configure Enterprise Manager", leave it empty and click on "Next".<br />
# Check "Use the Same Administrative Password for All Accounts", set password and click on "Next". <br />
# Check "File System" and click on "Next".<br />
# Check "Use Database File Locations from Template" and click on "Next".<br />
# Uncheck "Specify Flash Recovery Area" and click on "Next".<br />
# No need for "Sample Schemas", click on "Next".<br />
# If you do not know what you're doing, check "Typical" and click on "Next"<br />
# Check "Keep the enhanced 11g default security settings" and click on "Next".<br />
# Uncheck "Enable automatic maintenance tasks" if you wish to do it by yourself and click on "Next".<br />
# View your filesystem layout and click on "Next".<br />
# "Create Database" is checked by default. Click on "Finish" to create database.<br />
# Summary of following operations to be performed, click on "OK".<br />
# When database creation is complete, click on "Exit".<br />
<br />
==== Scripted ====<br />
<br />
This section walks you through doing a scripted initial database creation.<br />
<br />
{{Note|The scripts assume they are the first database to be installed on this system. If this is not the case review the xdb-create.sh script and comment out the portions which deal with the *.ora files.}}<br />
<br />
Download the following tar file with a set of scripted database installation scripts.<br />
wget http://sites.google.com/site/mbasil77/Home/instanceCreateXdb.tgz<br />
<br />
Extract the directory<br />
tar xzf instanceCreateXdb.tgz<br />
<br />
Move into instanceCreateXdb directory<br />
cd instanceCreateXdb<br />
<br />
File list<br />
* CreateDB.sql<br />
* CreateDBCatalog.sql<br />
* initxdb.dbs.ora<br />
* initxdb.ora<br />
* listener.ora<br />
* postDBCreation.sql<br />
* sqlnet.ora<br />
* sysObjects.sql<br />
* tnsnames.ora<br />
* xdb-create.sh<br />
* xdb-create.sql<br />
* xdb-secfix.sh<br />
<br />
Script notes<br />
* the files assume a database sid of '''xdb'''<br />
* the files assume an oracle base of '''/oracle/product/db'''<br />
* '''''review all memory and storage parameters against Oracle documentation'''''<br />
<br />
Setup filesystem (as root)<br />
./xdb-create.sh<br />
<br />
Install database from script ('''''this will take a long time''''')<br />
su oracle<br />
sqlplus / as sysdba @/oracle/admin/xdb/scripts/xdb-create.sql<br />
<br />
==== Testing database ====<br />
<br />
Login as the user oracle and run export ORACLE_SID="yourSID" etc., ie:<br />
export ORACLE_SID=xdb<br />
export ORACLE_HOME=/oracle/product/db<br />
export PATH=$PATH:$ORACLE_HOME/bin<br />
<br />
Running oraenv should confirm the exported configuration:<br />
oraenv<br />
<br />
ORACLE_SID = [xdb] ? <br />
The Oracle base for ORACLE_HOME=/oracle/product/db <br />
is /oracle<br />
<br />
Check if the database is shutting down or starting:<br />
sqlplus '/as sysdba'<br />
<br />
SQL> shutdown immediate;<br />
Database closed.<br />
Database dismounted.<br />
ORACLE instance shut down.<br />
<br />
SQL> startup mount;<br />
<br />
ORACLE instance started.<br />
<br />
Total System Global Area 385003520 bytes<br />
Fixed Size 1300100 bytes<br />
Variable Size 234883452 bytes<br />
Database Buffers 142606336 bytes<br />
Redo Buffers 6213632 bytes<br />
Database mounted.<br />
Database opened.<br />
<br />
Type "quit" when you want to leave SQL prompt:<br />
SQL> quit<br />
<br />
=== Starting oracle during the boot ===<br />
<br />
If you want to start with your oracle SID, replace ":N" with ":Y" in {{ic|/etc/oratab}}:<br />
<your sid>:<oracle home>:N<br />
<your sid>:<oracle home>:Y<br />
<br />
Example from Scripted database creation (/etc/oratab):<br />
xdb:/oracle/product/db:Y<br />
<br />
To start the oracle database daemon during boot, add "oracledb" in your /etc/rc.conf:<br />
<br />
DAEMONS=(oracledb syslog-ng dbus !network netfs crond ntpd alsa hal wicd fam)<br />
<br />
Note: If the daemon doesn't start, please check that the {{ic|ORACLE_HOME}} path matches your current oracle directory in /etc/rc.d/oracledb:<br />
export ORACLE_HOME=/oracle/product/db<br />
<br />
$ pwd<br />
/oracle/product/db<br />
<br />
Test starting the daemon as root:<br />
/etc/rc.d/oracledb start<br />
<br />
Starting Oracle: <br />
LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 27-FEB-2009 23:14:45<br />
...<br />
The command completed successfully<br />
Processing Database instance "archlinux": log file <br />
/oracle/product/db/startup.log<br />
OK<br />
<br />
Now you'll login to your oracle database each time you reboot:<br />
su oracle<br />
export ORACLE_SID=xdb<br />
oraenv<br />
sqlplus '/as sysdba'<br />
<br />
Install Method 2:<br />
su oracle<br />
export ORACLE_SID=archlinux<br />
oraenv<br />
sqlplus '/as sysdba'<br />
<br />
=== Setting permissions for normal users ===<br />
<br />
Since there is only one user(oracle) that has access to the oracle database, you need to add your normal user to the group "dba". In this case "joe" is the normal user:<br />
# gpasswd -a joe dba<br />
<br />
The group changes will take effect after you logout and login again. The user oracle has the permissions to access the oracle home directory, ie /home/oracle:<br />
drwx------ 6 oracle dba 4096 2009-02-27 23:27 oracle<br />
<br />
You need to grant the group "dba" permission to execute the binary files in the oracle home directory:<br />
chmod -R g+x /home/oracle<br />
<br />
Now you'll be able to run the oracle database as the normal user.<br />
<br />
== Transfer existing Oracle installation ==<br />
<br />
Moving or transferring Oracle can be quite useful in the following conditions:<br />
* replacing hardware<br />
* setting up several dev machines<br />
* running lean system (no desktop manager, java, etc)<br />
<br />
The installation of Oracle requires several packages. However, just running an Oracle database is much simpler and has far fewer requirements, as shown below. <br />
<br />
''In principle transferring Oracle should work across distros. Transferring from RHEL/Centos 5.2 to ARCH 2009.02 has been tested successfully.''<br />
<br />
To prep Oracle for a move shutdown database services<br />
dbstop ${ORACLE_HOME}<br />
lsnrctl stop<br />
<br />
Optional: stop OEM if it is running<br />
emctl stop dbconsole<br />
<br />
'''''If you are running other Oracle daemons stop them as well'''''<br />
<br />
This section assumes the following conditions about the existing Oracle installation:<br />
* oracle root is /oracle<br />
* oracle data is at /oracle/oradata/<sid><br />
<br />
Tar up entire Oracle installation and data.<br />
cd /<br />
tar czf oracle.tgz /oracle<br />
<br />
Using ssh and sftp or your method of choice transfer oracle.tgz to the root (/) of the target system.<br />
<br />
Login to target system as root and unpack the tar<br />
cd /<br />
tar xzf oracle.tgz<br />
chmod 755 -R /oracle<br />
chown -R oracle:dba /oracle<br />
<br />
Update the system:<br />
pacman -Syu python unzip sudo<br />
pacman -U ftp://ftp.berlios.de/pub/aurbuild/aurbuild-1.8.4-1-any.pkg.tar.gz<br />
<br />
Install required package run Oracle database and ''required'' daemons<br />
aurbuild -s libaio<br />
pacman -S sysstat<br />
<br />
Configure server for oracle [[#Configuration]]<br />
<br />
Setup OEM (optional) [[#Oracle Enterprise Manager installation (optional)]]<br />
<br />
Execute appropriate/desired post installation steps [[#Post installation]]<br />
<br />
== Known issues ==<br />
<br />
The Oracle Universal Installer (ie, in silent mode) seems create errors when installing on other paths than "../app/oracle/..".<br />
<br />
Two consistent errors using the current libraries will occur. The first one can be ignored:<br />
<br />
INFO: / usr/lib64/libstdc + + so.5:. Undefined reference to `memcpy@GLIBC_2.14 '<br />
collect2: error: ld returned 1 exit status<br />
<br />
Ignore this message by clicking the "Continue" button. Unfortunately,this has the consequence of the Lexical Compiler not working. The Lexical Compiler is used to generate the Chinese and Japanese dictionaries. <br />
<br />
<br />
The second error needs to be fixed as it can cause the emconsole to fail eventually. Fortunately, the fix is easy:<br />
<br />
su oracle<br />
cd $ORACLE_HOME/sysman/lib<br />
make -f ins_emagent.mk "agent"<br />
<br />
The last gcc call fails, which is what is causing the error. We need to add the -lnnz11 flag after the -lcore11 flag for this to make successfully, therefore, enter the following into the terminal:<br />
<br />
gcc -o $ORACLE_HOME/sysman/lib/emdctl -L$ORACLE_HOME/lib/ -L$ORACLE_HOME/sysman/lib/ -L$ORACLE_HOME/lib/stubs/ `cat $ORACLE_HOME/lib/sysliblist` -Wl,-rpath,$ORACLE_HOME/lib -lm `cat $ORACLE_HOME/lib/sysliblist` -ldl -lm -L$ORACLE_HOME/lib $ORACLE_HOME/sysman/lib//s0nmectl.o -lnmectl -lclntsh -L$ORACLE_HOME/lib -L$ORACLE_HOME/sysman/lib/ -lnmemso -lcore11 -lnnz11 -Wl,-rpath,$ORACLE_HOME/lib/:$ORACLE_HOME/sysman/lib/:$ORACLE_HOME/jdk/jre/lib/amd64/server:$ORACLE_HOME/jdk/jre/lib/amd64 -L$ORACLE_HOME/jdk/jre/lib/amd64/server -L$ORACLE_HOME/jdk/jre/lib/amd64 -z lazyload -ljava -ljvm -lverify -z nolazyload -Wl,-rpath,$ORACLE_HOME/lib/:$ORACLE_HOME/sysman/lib/:$ORACLE_HOME/jdk/jre/lib/amd64/server:$ORACLE_HOME/jdk/jre/lib/amd64 -Wl,--allow-shlib-undefined `cat $ORACLE_HOME/lib/sysliblist` -ldl -lm<br />
<br />
The make will succeed and you can now choose continue in the Oracle installer.<br />
<br />
== See also ==<br />
<br />
Most of the steps are based on this oracle installation guide for ubuntu users. This guide includes step by step graphical examples:<br />
http://www.pythian.com/blogs/1355/installing-oracle-11gr1-on-ubuntu-810-intrepid-ibex</div>Nodiscchttps://wiki.archlinux.org/index.php?title=RAID&diff=497922RAID2017-11-22T22:02:39Z<p>Nodiscc: /* See also */ add link to Wikipedia:Non-RAID drive architectures</p>
<hr />
<div>[[Category:File systems]]<br />
[[es:RAID]]<br />
[[it:RAID]]<br />
[[ja:RAID]]<br />
[[ru:RAID]]<br />
[[zh-hans:RAID]]<br />
{{Related articles start}}<br />
{{Related|Software RAID and LVM}}<br />
{{Related|Installing with Fake RAID}}<br />
{{Related|Convert a single drive system to RAID}}<br />
{{Related|ZFS}}<br />
{{Related|Experimenting with ZFS}}<br />
{{Related|Swap#Striping}}<br />
{{Related|Btrfs#RAID}}<br />
{{Related articles end}}<br />
{{Style|Non-standard headers, other [[Help:Style]] issues}}<br />
This article explains what RAID is and how to create/manage a software RAID array using mdadm.<br />
<br />
== Introduction ==<br />
<br />
See also [[Wikipedia:RAID]].<br />
<br />
Redundant Array of Independent Disks (RAID) is a storage technology that combines multiple disk drive components (typically disk drives or partitions thereof) into a logical unit. Depending on the RAID implementation, this logical unit can be a file system or an additional transparent layer that can hold several partitions. Data is distributed across the drives in one of several ways called "RAID levels", depending on the level of redundancy and performance required. The RAID level chosen can thus prevent data loss in the event of a hard disk failure, increase performance or be a combination of both.<br />
<br />
Despite redundancy implied by most RAID levels, RAID does not guarantee that data is safe. A RAID will not protect data if there is a fire, the computer is stolen or multiple hard drives fail at once. Furthermore, installing a system with RAID is a complex process that may destroy data. {{Warning|Therefore, be sure [[Backup programs|to back up]] all data before proceeding.}}<br />
<br />
{{Note|Users considering a RAID array for data storage/redundancy should also consider RAIDZ which is implemented via [[ZFS]], a more modern and powerful alternative to software RAID.}}<br />
<br />
===Standard RAID levels===<br />
There are many different [[Wikipedia:Standard RAID levels|levels of RAID]], please find hereafter the most commonly used ones.<br />
<br />
; [[Wikipedia:Standard RAID levels#RAID 0|RAID 0]]<br />
: Uses striping to combine disks. Even though it ''does not provide redundancy'', it is still considered RAID. It does, however, ''provide a big speed benefit''. If the speed increase is worth the possibility of data loss (for [[swap]] partition for example), choose this RAID level. On a server, RAID 1 and RAID 5 arrays are more appropriate. The size of a RAID 0 array block device is the size of the smallest component partition times the number of component partitions.<br />
; [[Wikipedia:Standard RAID levels#RAID 1|RAID 1]]<br />
: The most straightforward RAID level: straight mirroring. As with other RAID levels, it only makes sense if the partitions are on different physical disk drives. If one of those drives fails, the block device provided by the RAID array will continue to function as normal. The example will be using RAID 1 for everything except [[swap]] and temporary data. Please note that with a software implementation, the RAID 1 level is the only option for the boot partition, because bootloaders reading the boot partition do not understand RAID, but a RAID 1 component partition can be read as a normal partition. The size of a RAID 1 array block device is the size of the smallest component partition.<br />
; [[Wikipedia:Standard RAID levels#RAID 5|RAID 5]]<br />
: Requires 3 or more physical drives, and provides the redundancy of RAID 1 combined with the speed and size benefits of RAID 0. RAID 5 uses striping, like RAID 0, but also stores parity blocks ''distributed across each member disk''. In the event of a failed disk, these parity blocks are used to reconstruct the data on a replacement disk. RAID 5 can withstand the loss of one member disk.<br />
: {{Note|RAID 5 is a common choice due to its combination of speed and data redundancy. The caveat is that if one drive were to fail and another drive failed before that drive was replaced, all data will be lost. Furthermore, with modern disk sizes and expected unrecoverable read error (URE) rates on consumer disks, the rebuild of a 4TiB array is '''expected''' (i.e. higher than 50% chance) to have at least one URE. Because of this, RAID 5 is no longer advised by the storage industry.}}<br />
; [[Wikipedia:Standard RAID levels#RAID 6|RAID 6]]<br />
: Requires 4 or more physical drives, and provides the benefits of RAID 5 but with security against two drive failures. RAID 6 also uses striping, like RAID 5, but stores two distinct parity blocks ''distributed across each member disk''. In the event of a failed disk, these parity blocks are used to reconstruct the data on a replacement disk. RAID 6 can withstand the loss of two member disks. The robustness against unrecoverable read errors is somewhat better, because the array still has parity blocks when rebuilding from a single failed drive. However, given the overhead, RAID 6 is costly and in most settings RAID 10 in far2 layout (see below) provides better speed benefits and robustness, and is therefore preferred.<br />
<br />
===Nested RAID levels===<br />
; [[Wikipedia:Nested RAID levels#RAID 1 + 0|RAID 1+0]]<br />
: RAID1+0 is a nested RAID that combines two of the standard levels of RAID to gain performance and additional redundancy. It is commonly referred to as ''RAID10'', however, Linux MD RAID10 is slightly different from simple RAID layering, see below.<br />
<br />
; [[Wikipedia:Non-standard_RAID_levels#Linux_MD_RAID_10|RAID 10]]<br />
: RAID10 under Linux is built on the concepts of RAID1+0, however, it implements this as a single layer, with multiple possible layouts.<br />
<br />
: The ''near X'' layout on Y disks repeats each chunk X times on Y/2 stripes, but does not need X to divide Y evenly. The chunks are placed on almost the same location on each disk they're mirrored on, hence the name. It can work with any number of disks, starting at 2. Near 2 on 2 disks is equivalent to RAID1, near 2 on 4 disks to RAID1+0.<br />
<br />
: The ''far X'' layout on Y disks is designed to offer striped read performance on a mirrored array. It accomplishes this by dividing each disk in two sections, say front and back, and what is written to disk 1 front is mirrored in disk 2 back, and vice versa. This has the effect of being able to stripe sequential reads, which is where RAID0 and RAID5 get their performance from. The drawback is that sequential writing has a very slight performance penalty because of the distance the disk needs to seek to the other section of the disk to store the mirror. RAID10 in far 2 layout is, however, preferable to layered RAID1+0 '''and''' RAID5 whenever read speeds are of concern and availability / redundancy is crucial. However, it is still not a substitute for backups. See the wikipedia page for more information.<br />
<br />
=== RAID level comparison ===<br />
{| class="wikitable"<br />
! RAID level!!Data redundancy!!Physical drive utilization!!Read performance!!Write performance!!Min drives<br />
|-<br />
| '''0'''||{{No}}||100%||nX<br />
<br />
'''Best'''<br />
||nX<br />
<br />
'''Best'''<br />
||2<br />
|-<br />
| '''1'''||{{Yes}}||50%||Up to nX if multiple processes are reading, otherwise 1X<br />
||1X||2<br />
|-<br />
| '''5'''||{{Yes}}||67% - 94%||(n−1)X<br />
<br />
'''Superior'''<br />
||(n−1)X<br />
<br />
'''Superior'''<br />
||3<br />
|-<br />
| '''6'''||{{Yes}}||50% - 88%||(n−2)X||(n−2)X||4<br />
|-<br />
| '''10,far2'''||{{Yes}}||50%||nX<br />
'''Best;''' on par with RAID0 but redundant<br />
||(n/2)X||2<br />
|-<br />
| '''10,near2'''||{{Yes}}||50%||Up to nX if multiple processes are reading, otherwise 1X||(n/2)X||2<br />
|}<br />
<nowiki>*</nowiki> Where ''n'' is standing for the number of dedicated disks.<br />
<br />
== Implementation ==<br />
The RAID devices can be managed in different ways:<br />
<br />
; Software RAID<br />
: This is the easiest implementation as it does not rely on obscure proprietary firmware and software to be used. The array is managed by the operating system either by:<br />
:* by an abstraction layer (e.g. [[#Installation|mdadm]]); {{Note|This is the method we will use later in this guide.}}<br />
:* by a logical volume manager (e.g. [[LVM]]);<br />
:* by a component of a file system (e.g. [[ZFS]], [[Btrfs]]).<br />
<br />
; Hardware RAID<br />
: The array is directly managed by a dedicated hardware card installed in the PC to which the disks are directly connected. The RAID logic runs on an on-board processor independently of [[Wikipedia:Central processing unit|the host processor (CPU)]]. Although this solution is independent of any operating system, the latter requires a driver in order to function properly with the hardware RAID controller. The RAID array can either be configured via an option rom interface or, depending on the manufacturer, with a dedicated application when the OS has been installed. The configuration is transparent for the Linux kernel: it doesn't see the disks separately.<br />
<br />
; [[Fakeraid|FakeRAID]]<br />
: This type of RAID is properly called BIOS or Onboard RAID, but is falsely advertised as hardware RAID. The array is managed by pseudo-RAID controllers where the RAID logic is implemented in an option rom or in the firmware itself [http://www.win-raid.com/t19f13-Intel-EFI-RAID-quot-SataDriver-quot-BIOS-Modules.html with a EFI SataDriver] (in case of [[UEFI]]), but are not full hardware RAID controllers with ''all'' RAID features implemented. Therefore, this type of RAID is sometimes called FakeRAID. {{Pkg|dmraid}} from the [[official repositories]], will be used to deal with these controllers. Here are some examples of FakeRAID controllers: [[Wikipedia:Intel Rapid Storage Technology|Intel Rapid Storage]], JMicron JMB36x RAID ROM, AMD RAID, ASMedia 106x, and NVIDIA MediaShield.<br />
<br />
===Which type of RAID do I have?===<br />
<br />
Since software RAID is implemented by the user, the type of RAID is easily known to the user.<br />
<br />
However, discerning between FakeRAID and true hardware RAID can be more difficult. As stated, manufacturers often incorrectly distinguish these two types of RAID and false advertising is always possible. The best solution in this instance is to run the {{ic|lspci}} command and looking through the output to find the RAID controller. Then do a search to see what information can be located about the RAID controller. Hardware RAID controllers appear in this list, but FakeRAID implementations do not. Also, true hardware RAID controller are often rather expensive (~$400+), so if someone customized the system, then it is very likely that choosing a hardware RAID setup made a very noticeable change in the computer's price.<br />
<br />
== Installation ==<br />
<br />
Install {{Pkg|mdadm}} from the [[official repositories]]. ''mdadm'' is used for administering pure software RAID using plain block devices: the underlying hardware does not provide any RAID logic, just a supply of disks. ''mdadm'' will work with any collection of block devices. Even if unusual. For example, one can thus make a RAID array from a collection of thumb drives.<br />
<br />
===Prepare the Devices===<br />
<br />
{{Warning|These steps erase everything on a device, so type carefully!}}<br />
<br />
If the device is being reused or re-purposed from an existing array, erase any old RAID configuration information:<br />
# mdadm --misc --zero-superblock /dev/<drive><br />
<br />
or if a particular partition on a drive is to be deleted:<br />
# mdadm --misc --zero-superblock /dev/<partition><br />
<br />
{{Note|<br />
* Zapping a partition's superblock should not affect the other partitions on the disk.<br />
* Due to the nature of RAID functionality it is very difficult to [[Securely wipe disk]]s fully on a running array. Consider whether it is useful to do so before creating it.}}<br />
<br />
===Create the Partition Table (GPT)===<br />
<br />
It is highly recommended to pre-partition the disks to be used in the array. Since most RAID users are selecting HDDs >2 TB, GPT partition tables are required and recommended. Disks are easily partitioned using {{Pkg|gptfdisk}} or cgdisk if you're running from archiso.<br />
<br />
* After created, the partition type should be assigned hex code FD00.<br />
* If a larger disk array is employed, consider assigning [[Persistent_block_device_naming#by-label|disk labels]] or [[Persistent_block_device_naming#by-partlabel|partition labels]] to make it easier to identify an individual disk later. <br />
* Creating partitions that are of the same size on each of the devices is preferred.<br />
* A good tip is to leave approx 100 MB at the end of the device when partitioning. See below for rationale.<br />
<br />
<br />
<br />
====Partitions Types for MBR====<br />
<br />
For those creating partitions on HDDs with a MBR partition table, the partition types available for use are:<br />
<br />
* 0xDA (for non-fs data -- current recommendation by [https://raid.wiki.kernel.org/index.php/Partition_Types kernel.org])<br />
* 0xFD (for raid autodetect arrays -- was useful before booting an initrd to load kernel modules)<br />
<br />
{{Note|It is also possible to create a RAID directly on the raw disks (without partitions), but not recommended because it can cause problems when swapping a failed disk.}}<br />
<br />
When replacing a failed disk of a RAID, the new disk has to be exactly the same size as the failed disk or bigger — otherwise the array recreation process will not work. Even hard drives of the same manufacturer and model can have small size differences. By leaving a little space at the end of the disk unallocated one can compensate for the size differences between drives, which makes choosing a replacement drive model easier. Therefore, '''it is good practice to leave about 100 MB of unallocated space at the end of the disk.'''<br />
<br />
=== Build the Array ===<br />
<br />
{{Warning|Kernel versions 4.2.x and 4.3.x currently have an active bug that prevents them from assembling a RAID10 array; users needing this layout are encouraged to use kernel version 4.1.x series provided by {{pkg|linux-lts}} until this bug is fixed. References are provided in the [[#See also]] section.}}<br />
<br />
Use {{ic|mdadm}} to build the array. Several examples are given below.<br />
<br />
{{Warning|Do not simply copy/paste the examples below; use your brain and substitute the correct options/drive letters!}}<br />
<br />
{{Note|If this is a RAID1 array which is intended to boot from [[Syslinux]] a limitation in syslinux v4.07 requires the metadata value to be 1.0 rather than the default of 1.2.}}<br />
<br />
The following example shows building a 2-device RAID1 array:<br />
<br />
# mdadm --create --verbose --level=1 --metadata=1.2 --raid-devices=2 /dev/md0 /dev/sdb1 /dev/sdc1<br />
<br />
The following example shows building a RAID5 array with 4 active devices and 1 spare device:<br />
<br />
# mdadm --create --verbose --level=5 --metadata=1.2 --chunk=256 --raid-devices=4 /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1<br />
<br />
:{{Tip|{{ic|--chunk}} was used in the previous example to change the chunk size from the default value. See [http://www.zdnet.com/article/chunks-the-hidden-key-to-raid-performance/ Chunks: the hidden key to RAID performance] for more on chunk size optimisation.}}<br />
<br />
The following example shows building a RAID10,far2 array with 2 devices:<br />
<br />
# mdadm --create --verbose --level=10 --metadata=1.2 --chunk=512 --raid-devices=2 --layout=f2 /dev/md0 /dev/sdb1 /dev/sdc1<br />
<br />
{{Tip| The {{ic|--homehost}} and {{ic|--name}} options can be used for a custom raid device name. They are delimited by a colon in the resulting name.}}<br />
<br />
The array is created under the virtual device {{ic|/dev/mdX}}, assembled and ready to use (in degraded mode). One can directly start using it while mdadm resyncs the array in the background. It can take a long time to restore parity. Check the progress with:<br />
<br />
$ cat /proc/mdstat<br />
<br />
=== Update configuration file ===<br />
<br />
By default, most of {{ic|mdadm.conf}} is commented out, and it contains just the following:<br />
<br />
{{hc|/etc/mdadm.conf|DEVICE partitions}}<br />
<br />
This directive tells mdadm to examine the devices referenced by {{ic|/proc/partitions}} and assemble as many arrays as possible. This is fine if you really do want to start all available arrays and are confident that no unexpected superblocks will be found (such as after installing a new storage device). A more precise approach is as follows:<br />
# echo 'DEVICE partitions' > /etc/mdadm.conf<br />
# mdadm --detail --scan >> /etc/mdadm.conf<br />
<br />
This results in something like the following:<br />
{{hc|/etc/mdadm.conf|2=<br />
DEVICE partitions<br />
ARRAY /dev/md/0 metadata=1.2 name=pine:0 UUID=27664f0d:111e493d:4d810213:9f291abe<br />
}}<br />
<br />
This also causes mdadm to examine the devices referenced by {{ic|/proc/partitions}}. However, only devices that have superblocks with a UUID of {{ic|27664…}} are assembled in to active arrays.<br />
<br />
See {{ic|mdadm.conf(5)}} for more information.<br />
<br />
===Assemble the Array===<br />
<br />
Once the configuration file has been updated the array can be assembled using mdadm:<br />
<br />
# mdadm --assemble --scan<br />
<br />
===Format the RAID Filesystem===<br />
<br />
The array can now be formatted like any other disk, just keep in mind that:<br />
* Due to the large volume size not all filesystems are suited (see: [[Wikipedia:Comparison of file systems#Limits|File system limits]]).<br />
* The filesystem should support growing and shrinking while online (see: [[Wikipedia:Comparison of file systems#Features|File system features]]).<br />
* One should calculate the correct stride and stripe-width for optimal performance.<br />
<br />
==== Calculating the Stride and Stripe Width ====<br />
<br />
Two parameters are required to optimise the filesystem structure to fit optimally within the underlying RAID structure: the ''stride'' and ''stripe width''. These are derived from the RAID ''chunk size'', the filesystem ''block size'', and the ''number of "data disks"''.<br />
<br />
The chunk size is a property of the RAID array, decided at the time of its creation. {{ic|mdadm}}'s current default is 512 KiB. It can be found with {{ic|mdadm}}:<br />
<br />
# mdadm --detail /dev/mdX | grep 'Chunk Size'<br />
<br />
The block size is a property of the filesystem, decided at ''its'' creation. The default for many filesystems, including ext4, is 4 KiB. See {{ic|/etc/mke2fs.conf}} for details on ext4.<br />
<br />
The number of "data disks" is the minimum number of devices in the array required to completely rebuild it without data loss. For example, this is N for a raid0 array of N devices and N-1 for raid5.<br />
<br />
Once you have these three quantities, the stride and the stripe width can be calculated using the following formulas:<br />
<br />
stride = chunk size / block size<br />
stripe width = number of data disks * stride<br />
<br />
<br />
===== Example 1. RAID0 =====<br />
<br />
Example formatting to ext4 with the correct stripe width and stride:<br />
* Hypothetical RAID0 array is composed of 2 physical disks.<br />
* Chunk size is 64 KiB.<br />
* Block size is 4 KiB.<br />
<br />
stride = chunk size / block size.<br />
In this example, the math is 64/4 so the stride = 16.<br />
<br />
stripe width = # of physical '''data''' disks * stride.<br />
In this example, the math is 2*16 so the stripe width = 32.<br />
<br />
# mkfs.ext4 -v -L myarray -m 0.5 -b 4096 -E stride=16,stripe-width=32 /dev/md0<br />
<br />
===== Example 2. RAID5 =====<br />
<br />
Example formatting to ext4 with the correct stripe width and stride:<br />
* Hypothetical RAID5 array is composed of 4 physical disks; 3 data discs and 1 parity disc.<br />
* Chunk size is 512 KiB.<br />
* Block size is 4 KiB.<br />
<br />
stride = chunk size / block size.<br />
In this example, the math is 512/4 so the stride = 128.<br />
<br />
stripe width = # of physical '''data''' disks * stride.<br />
In this example, the math is 3*128 so the stripe width = 384.<br />
<br />
# mkfs.ext4 -v -L myarray -m 0.01 -b 4096 -E stride=128,stripe-width=384 /dev/md0<br />
<br />
For more on stride and stripe width, see: [http://wiki.centos.org/HowTos/Disk_Optimization RAID Math].<br />
<br />
===== Example 3. RAID10,far2 =====<br />
<br />
Example formatting to ext4 with the correct stripe width and stride:<br />
* Hypothetical RAID10 array is composed of 2 physical disks. Because of the properties of RAID10 in far2 layout, both count as data disks.<br />
* Chunk size is 512 KiB.<br />
# mdadm --detail /dev/md0 | grep 'Chunk Size'<br />
Chunk Size : 512K<br />
* Block size is 4 KiB.<br />
<br />
stride = chunk size / block size.<br />
In this example, the math is 512/4 so the stride = 128.<br />
<br />
stripe width = # of physical '''data''' disks * stride.<br />
In this example, the math is 2*128 so the stripe width = 256.<br />
<br />
# mkfs.ext4 -v -L myarray -m 0.01 -b 4096 -E stride=128,stripe-width=256 /dev/md0<br />
<br />
== Mounting from a Live CD ==<br />
<br />
Users wanting to mount the RAID partition from a Live CD, use:<br />
<br />
# mdadm --assemble /dev/<disk1> /dev/<disk2> /dev/<disk3> /dev/<disk4><br />
<br />
If your RAID 1 that's missing a disk array was wrongly auto-detected as RAID 1 (as per {{ic|mdadm --detail /dev/md<number>}}) and reported as inactive (as per {{ic|cat /proc/mdstat}}), stop the array first:<br />
<br />
# mdadm --stop /dev/md<number><br />
<br />
== Installing Arch Linux on RAID ==<br />
{{Note|The following section is applicable only if the root filesystem resides on the array. Users may skip this section if the array holds a data partition(s).}}<br />
You should create the RAID array between the [[Partitioning]] and [[File systems#Format a device|formatting]]{{Broken section link}} steps of the Installation Procedure. Instead of directly formatting a partition to be your root file system, it will be created on a RAID array.<br />
Follow the section [[#Setup]]{{Broken section link}} to create the RAID array. Then continue with the installation procedure until the pacstrap step is completed.<br />
When using [[Unified Extensible Firmware Interface|UEFI boot]], also read [[EFI System Partition#ESP on RAID|ESP on RAID]].<br />
<br />
=== Update configuration file ===<br />
{{Note|This should be done outside of the chroot, hence the prefix /mnt to the filepath.}}<br />
After the base system is installed the default configuration file, {{ic|mdadm.conf}}, must be updated like so:<br />
# mdadm --detail --scan >> /mnt/etc/mdadm.conf<br />
<br />
Always check the mdadm.conf configuration file using a text editor after running this command to ensure that its contents look reasonable.<br />
{{Note|To prevent failure of '''mdmonitor''' at boot (enabled by default), you will need to uncomment '''MAILADDR''' and provide an e-mail address and/or application to handle notification of problems with your array at the bottom of mdadm.conf.}}<br />
Continue with the installation procedure until you reach the step “Create initial ramdisk environment”, then follow the next section.<br />
<br />
=== Add mdadm hook to mkinitcpio.conf ===<br />
<br />
{{Accuracy|1=[[Mkinitcpio#Common hooks]] also suggests adding {{ic|mdmon}} to the {{ic|BINARIES}} section. See also [https://bbs.archlinux.org/viewtopic.php?id=148947] and [http://unix.stackexchange.com/questions/57440/cant-remount-local-file-systems-for-read-write-raid1].}}<br />
<br />
{{Note|This should be done whilst chrooted.}}<br />
<br />
Add {{ic|mdadm_udev}} to the [[Mkinitcpio#HOOKS|HOOKS]] section of the {{ic|mkinitcpio.conf}} to add support for mdadm directly into the init image:<br />
<br />
HOOKS="base udev autodetect block '''mdadm_udev''' filesystems usbinput fsck"<br />
<br />
Then [[Mkinitcpio#Image creation and activation|Regenerate the initramfs image]].<br />
<br />
=== Configure the boot loader ===<br />
<br />
{{Accuracy|1=[[Mkinitcpio#Using_RAID]] says kernel parameters are no longer needed. Also can refer to the RAID device via {{ic|/dev/md/label\:0}}}}<br />
<br />
Add an {{ic|md}} [[kernel parameter]] for each RAID array; also point the {{ic|root}} parameter to the correct mapped device. The following example accommodates three RAID 1 arrays and sets the second one as root:<br />
<br />
root=/dev/md1 md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
If booting from a software raid partition fails using the kernel device node method above, an alternative and more reliable way is to use [[Persistent block device naming]], for example:<br />
<br />
root=LABEL=Root_Label<br />
<br />
See also [[GRUB#RAID]].<br />
<br />
== RAID Maintenance ==<br />
=== Scrubbing ===<br />
It is good practice to regularly run data [[wikipedia:Data_scrubbing|scrubbing]] to check for and fix errors. Depending on the size/configuration of the array, a scrub may take multiple hours to complete.<br />
<br />
To initiate a data scrub:<br />
# echo check > /sys/block/md0/md/sync_action<br />
<br />
The check operation scans the drives for bad sectors and automatically repairs them. If it finds good sectors that contain bad data (the data in a sector does not agree with what the data from another disk indicates that it should be, for example the parity block + the other data blocks would cause us to think that this data block is incorrect), then no action is taken, but the event is logged (see below). This "do nothing" allows admins to inspect the data in the sector and the data that would be produced by rebuilding the sectors from redundant information and pick the correct data to keep.<br />
<br />
As with many tasks/items relating to mdadm, the status of the scrub can be queried by reading {{ic|/proc/mdstat}}.<br />
<br />
Example:<br />
{{hc|$ cat /proc/mdstat|<nowiki><br />
Personalities : [raid6] [raid5] [raid4] [raid1] <br />
md0 : active raid1 sdb1[0] sdc1[1]<br />
3906778112 blocks super 1.2 [2/2] [UU]<br />
[>....................] check = 4.0% (158288320/3906778112) finish=386.5min speed=161604K/sec<br />
bitmap: 0/30 pages [0KB], 65536KB chunk<br />
</nowiki>}}<br />
<br />
To stop a currently running data scrub safely:<br />
# echo idle > /sys/block/md0/md/sync_action<br />
<br />
{{Note|If the system is rebooted after a partial scrub has been suspended, the scrub will start over.}}<br />
<br />
When the scrub is complete, admins may check how many blocks (if any) have been flagged as bad:<br />
# cat /sys/block/md0/md/mismatch_cnt<br />
<br />
==== General Notes on Scrubbing ====<br />
{{Note|Users may alternatively echo '''repair''' to /sys/block/md0/md/sync_action but this is ill-advised since if a mismatch in the data is encountered, it would be automatically updated to be consistent. The danger is that we really don't know whether it's the parity or the data block that's correct (or which data block in case of RAID1). It's luck-of-the-draw whether or not the operation gets the right data instead of the bad data.}}<br />
<br />
It is a good idea to set up a cron job as root to schedule a periodic scrub. See {{AUR|raid-check}} which can assist with this. To perform a periodic scrub using systemd timers instead of cron, See {{AUR|raid-check-systemd}} which contains the same script along with associated systemd timer unit files. (note: for typical platter drives, scrubbing can take approximately '''six seconds per gigabyte''' [that's one hour forty-five minutes per terabyte] so plan the start of your cron job or timer appropriately)<br />
<br />
==== RAID1 and RAID10 Notes on Scrubbing ====<br />
Due to the fact that RAID1 and RAID10 writes in the kernel are unbuffered, an array can have non-0 mismatch counts even when the array is healthy. These non-0 counts will only exist in transient data areas where they don't pose a problem. However, we can't tell the difference between a non-0 count that is just in transient data or a non-0 count that signifies a real problem. This fact is a source of false positives for RAID1 and RAID10 arrays. It is however still recommended to scrub regularly in order to catch and correct any bad sectors that might be present in the devices.<br />
<br />
===Removing Devices from an Array===<br />
One can remove a device from the array after marking it as faulty:<br />
# mdadm --fail /dev/md0 /dev/sdxx<br />
<br />
Now remove it from the array:<br />
# mdadm --remove /dev/md0 /dev/sdxx<br />
<br />
Remove device permanently (for example, to use it individually from now on):<br />
Issue the two commands described above then:<br />
<br />
# mdadm --zero-superblock /dev/sdxx<br />
<br />
{{Warning | '''DO NOT''' issue this command on linear or RAID0 arrays or data '''LOSS''' will occur!}}<br />
{{Warning | Reusing the removed disk without zeroing the superblock '''WILL CAUSE LOSS OF ALL DATA''' on the next boot. (After mdadm will try to use it as the part of the raid array).}}<br />
<br />
Stop using an array:<br />
# Umount target array<br />
# Stop the array with: {{ic|mdadm --stop /dev/md0}}<br />
# Repeat the three command described in the beginning of this section on each device.<br />
# Remove the corresponding line from /etc/mdadm.conf<br />
<br />
=== Adding a New Device to an Array ===<br />
Adding new devices with mdadm can be done on a running system with the devices mounted.<br />
Partition the new device using the same layout as one of those already in the arrays as discussed above.<br />
<br />
Assemble the RAID array if it is not already assembled:<br />
# mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1<br />
<br />
Add the new device the array:<br />
# mdadm --add /dev/md0 /dev/sdc1<br />
<br />
This should not take long for mdadm to do. Again, check the progress with:<br />
# cat /proc/mdstat<br />
<br />
Check that the device has been added with the command:<br />
# mdadm --misc --detail /dev/md0<br />
<br />
{{Note|For RAID0 arrays you may get the following error message:<br />
mdadm: add new device failed for /dev/sdc1 as 2: Invalid argument<br />
This is because the above commands will add the new disk as a "spare" but RAID0 doesn't have spares. If you want to add a device to a RAID0 array, you need to "grow" and "add" in the same command. This is demonstrated below:<br />
# mdadm --grow /dev/md0 --raid-devices<nowiki>=</nowiki>3 --add /dev/sdc1<br />
}}<br />
<br />
=== Increasing Size of a RAID Volume ===<br />
<br />
If larger disks are installed in a RAID array or partition size has been increased, it may be desirable to increase the size of the RAID volume to fill the larger available space. This process may be begun by first following the above sections pertaining to replacing disks. Once the RAID volume has been rebuilt onto the larger disks it must be "grown" to fill the space.<br />
# mdadm --grow /dev/md0 --size=max<br />
Next, partitions present on the RAID volume {{ic|/dev/md0}} may need to be resized. See [[Partitioning]] for details. Finally, the filesystem on the above mentioned partition will need to be resized. If partitioning was performed with {{ic|gparted}} this will be done automatically. If other tools were used, unmount and then resize the filesystem manually.<br />
{{bc|<br />
# umount /storage<br />
# fsck.ext4 -f /dev/md0p1<br />
# resize2fs /dev/md0p1<br />
}}<br />
<br />
=== Change sync speed limits ===<br />
<br />
Syncing can take a while. If the machine is not needed for other tasks the speed limit can be increased.<br />
<br />
{{hc|# cat /proc/mdstat|<nowiki><br />
Personalities : [raid1] <br />
md0 : active raid1 sda3[2] sdb3[1]<br />
155042219 blocks super 1.2 [2/1] [_U]<br />
[>....................] recovery = 0.0% (77696/155042219) finish=265.8min speed=9712K/sec<br />
<br />
unused devices: <none><br />
</nowiki>}}<br />
<br />
Check the current speed limit.<br />
<br />
{{hc|# cat /proc/sys/dev/raid/speed_limit_min|<br />
1000<br />
}}<br />
{{hc|# cat /proc/sys/dev/raid/speed_limit_max|<br />
200000<br />
}}<br />
<br />
Increase the limits.<br />
<br />
# echo 400000 >/proc/sys/dev/raid/speed_limit_min<br />
# echo 400000 >/proc/sys/dev/raid/speed_limit_max<br />
<br />
Then check out the syncing speed and estimated finish time.<br />
<br />
{{hc|# cat /proc/mdstat|<nowiki><br />
Personalities : [raid1] <br />
md0 : active raid1 sda3[2] sdb3[1]<br />
155042219 blocks super 1.2 [2/1] [_U]<br />
[>....................] recovery = 1.3% (2136640/155042219) finish=158.2min speed=16102K/sec<br />
<br />
unused devices: <none><br />
</nowiki>}}<br />
<br />
<br />
See also [[sysctl#MDADM]].<br />
<br />
== Monitoring ==<br />
A simple one-liner that prints out the status of the RAID devices:<br />
{{hc|awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}' </proc/mdstat<br />
|md1: [UU]<br />
md0: [UU]<br />
}}<br />
<br />
===Watch mdstat===<br />
{{bc|watch -t 'cat /proc/mdstat'}}<br />
Or preferably using {{pkg|tmux}}<br />
{{bc|tmux split-window -l 12 "watch -t 'cat /proc/mdstat'"}}<br />
<br />
===Track IO with iotop===<br />
The {{pkg|iotop}} package displays the input/output stats for processes. Use this command to view the IO for raid threads.<br />
<br />
{{bc|<nowiki>iotop -a -p $(sed 's, , -p ,g' <<<`pgrep "_raid|_resync|jbd2"`)</nowiki>}}<br />
<br />
===Track IO with iostat===<br />
<br />
The ''iostat'' utility from {{Pkg|sysstat}} package displays the input/output statistics for devices and partitions.<br />
<br />
iostat -dmy 1 /dev/md0<br />
iostat -dmy 1 # all<br />
<br />
===Mailing on events===<br />
A smtp mail server (sendmail) or at least an email forwarder (ssmtp/msmtp) is required to accomplish this. Perhaps the most simplistic solution is to use {{AUR|dma}} which is very tiny (installs to 0.08 MiB) and requires no setup.<br />
<br />
Edit {{ic|/etc/mdadm.conf}} defining the email address to which notifications will be received. <br />
{{Note|If using dma as mentioned above, users may simply mail directly to the username on the localhost rather than to an external email address.}}<br />
<br />
To test the configuration:<br />
# mdadm --monitor --scan --oneshot --test<br />
<br />
[[mdadm]] includes a systemd service (mdmonitor.service) to perform the monitoring task, so at this point, you have nothing left to do. If you do not set a mail address in {{ic|/etc/mdadm.conf}}, that service will fail. If you do not want to receive mail on mdadm events, the failure can be ignored; if you don't want notifications and are sensitive about failure messages, you can mask the unit.<br />
<br />
==== Alternative method ====<br />
<br />
To avoid the installation of a smtp mail server or an email forwarder you can use the [[S-nail]] tool (don't forget to setup) already on your system.<br />
<br />
Create a file named {{ic|/etc/mdadm_warning.sh}} with:<br />
<br />
#!/bin/bash<br />
event=$1<br />
device=$2<br />
<br />
echo " " | /usr/bin/mailx -s "$event on $device" '''destination@email.com'''<br />
<br />
And give it execution permissions {{ic|chmod +x /etc/mdadm_warning.sh}}<br />
<br />
Then add this to the mdadm.conf<br />
<br />
PROGRAM /etc/mdadm_warning.sh<br />
<br />
To test and enable use the same as in the previous method.<br />
<br />
==Troubleshooting==<br />
If you are getting error when you reboot about "invalid raid superblock magic" and you have additional hard drives other than the ones you installed to, check that your hard drive order is correct. During installation, your RAID devices may be hdd, hde and hdf, but during boot they may be hda, hdb and hdc. Adjust your kernel line accordingly. This is what happened to me anyway.<br />
<br />
===Error: "kernel: ataX.00: revalidation failed"===<br />
If you suddenly (after reboot, changed BIOS settings) experience Error messages like:<br />
<br />
Feb 9 08:15:46 hostserver kernel: ata8.00: revalidation failed (errno=-5)<br />
<br />
Is doesn't necessarily mean that a drive is broken. You often find panic links on the web which go for the worst. In a word, No Panic. Maybe you just changed APIC or ACPI settings within your BIOS or Kernel parameters somehow. Change them back and you should be fine. Ordinarily, turning ACPI and/orACPI off should help.<br />
<br />
===Start arrays read-only===<br />
When an md array is started, the superblock will be written, and resync may begin. To start read-only set the kernel module {{ic|md_mod}} parameter {{ic|start_ro}}. When this is set, new arrays get an 'auto-ro' mode, which disables all internal io (superblock updates, resync, recovery) and is automatically switched to 'rw' when the first write request arrives.<br />
<br />
{{Note|The array can be set to true 'ro' mode using {{ic|mdadm --readonly}} before the first write request, or resync can be started without a write using {{ic|mdadm --readwrite}}.}}<br />
<br />
To set the parameter at boot, add {{ic|<nowiki>md_mod.start_ro=1</nowiki>}} to your kernel line.<br />
<br />
Or set it at module load time from {{ic|/etc/modprobe.d/}} file or from directly from {{ic|/sys/}}.<br />
{{bc|echo 1 > /sys/module/md_mod/parameters/start_ro}}<br />
<br />
===Recovering from a broken or missing drive in the raid===<br />
You might get the above mentioned error also when one of the drives breaks for whatever reason. In that case you will have to force the raid to still turn on even with one disk short. Type this (change where needed):<br />
# mdadm --manage /dev/md0 --run<br />
<br />
Now you should be able to mount it again with something like this (if you had it in fstab):<br />
# mount /dev/md0<br />
<br />
Now the raid should be working again and available to use, however with one disk short! So, to add that one disc partition it the way like described above in [[#Prepare the Devices|Prepare the device]]. Once that is done you can add the new disk to the raid by doing:<br />
# mdadm --manage --add /dev/md0 /dev/sdd1<br />
<br />
If you type:<br />
# cat /proc/mdstat<br />
you probably see that the raid is now active and rebuilding.<br />
<br />
You also might want to update your configuration (see: [[#Update configuration file]]).<br />
<br />
== Benchmarking ==<br />
There are several tools for benchmarking a RAID. The most notable improvement is the speed increase when multiple threads are reading from the same RAID volume.<br />
<br />
{{AUR|tiobench}} specifically benchmarks these performance improvements by measuring fully-threaded I/O on the disk.<br />
<br />
{{Pkg|bonnie++}} tests database type access to one or more files, and creation, reading, and deleting of small files which can simulate the usage of programs such as Squid, INN, or Maildir format e-mail. The enclosed [http://www.coker.com.au/bonnie++/zcav/ ZCAV] program tests the performance of different zones of a hard drive without writing any data to the disk.<br />
<br />
{{ic|hdparm}} should '''NOT''' be used to benchmark a RAID, because it provides very inconsistent results.<br />
<br />
== See also ==<br />
* [http://www.gentoo.org/doc/en/articles/software-raid-p1.xml Software RAID in the new Linux 2.4 kernel, Part 1] and [http://www.gentoo.org/doc/en/articles/software-raid-p2.xml Part 2] in the Gentoo Linux Docs<br />
* [http://raid.wiki.kernel.org/index.php/Linux_Raid Linux RAID wiki entry] on The Linux Kernel Archives<br />
* [https://raid.wiki.kernel.org/index.php/Write-intent_bitmap How Bitmaps Work]<br />
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-raid.html Chapter 15: Redundant Array of Independent Disks (RAID)] of Red Hat Enterprise Linux 6 Documentation<br />
* [http://tldp.org/FAQ/Linux-RAID-FAQ/x37.html Linux-RAID FAQ] on the Linux Documentation Project<br />
* [http://support.dell.com/support/topics/global.aspx/support/entvideos/raid?c=us&l=en&s=gen Dell.com Raid Tutorial] - Interactive Walkthrough of Raid<br />
* [http://www.miracleas.com/BAARF/ BAARF] including ''[http://www.miracleas.com/BAARF/RAID5_versus_RAID10.txt Why should I not use RAID 5?]'' by Art S. Kagel<br />
* [http://www.linux-mag.com/id/7924/ Introduction to RAID], [http://www.linux-mag.com/id/7931/ Nested-RAID: RAID-5 and RAID-6 Based Configurations], [http://www.linux-mag.com/id/7928/ Intro to Nested-RAID: RAID-01 and RAID-10], and [http://www.linux-mag.com/id/7932/ Nested-RAID: The Triple Lindy] in Linux Magazine<br />
* [http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html HowTo: Speed Up Linux Software Raid Building And Re-syncing]<br />
* [http://fomori.org/blog/?p=94 RAID5-Server to hold all your data]<br />
* [[Wikipedia:Non-RAID drive architectures]]<br />
<br />
'''Active bugs'''<br />
* [http://marc.info/?l=linux-raid&m=144960710718870&w=2 linux-raid ML #1]<br />
* [http://marc.info/?l=linux-raid&m=144830809503689&w=2 linux-raid ML #2]<br />
<br />
'''mdadm'''<br />
* [http://anonscm.debian.org/gitweb/?p=pkg-mdadm/mdadm.git;a=blob_plain;f=debian/FAQ;hb=HEAD Debian mdadm FAQ]<br />
* [http://www.kernel.org/pub/linux/utils/raid/mdadm/ mdadm source code]<br />
* [http://www.linux-mag.com/id/7939/ Software RAID on Linux with mdadm] in Linux Magazine<br />
* [[Wikipedia:mdadm|Wikipedia - mdadm]]<br />
<br />
'''Forum threads'''<br />
* [http://forums.overclockers.com.au/showthread.php?t=865333 Raid Performance Improvements with bitmaps]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=125445 GRUB and GRUB2]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=123698 Can't install grub2 on software RAID]<br />
* [http://forums.gentoo.org/viewtopic-t-888624-start-0.html Use RAID metadata 1.2 in boot and root partition]<br />
<br />
'''RAID with encryption'''<br />
* [http://www.shimari.com/dm-crypt-on-raid/ Linux/Fedora: Encrypt /home and swap over RAID with dm-crypt] by Justin Wells</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Java&diff=497908Java2017-11-22T21:51:48Z<p>Nodiscc: summary: add inline link to wikipedia:Java virtual machine</p>
<hr />
<div>[[Category:Programming languages]]<br />
[[cs:Java]]<br />
[[de:Java]]<br />
[[es:Java]]<br />
[[fa:Java]]<br />
[[fr:Java]]<br />
[[it:Java]]<br />
[[ja:Java]]<br />
[[pt:Java]]<br />
[[ru:Java]]<br />
[[tr:Java]]<br />
{{Related articles start}}<br />
{{Related|Java Package Guidelines}}<br />
{{Related|Java Runtime Environment Fonts}}<br />
{{Related articles end}}<br />
<br />
From the [[Wikipedia:Java (programming language)|Wikipedia article]]:<br />
<br />
:Java is a programming language originally developed by Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities. Java applications are typically compiled to bytecode that can run on any Java virtual machine ([[Wikipedia:Java virtual machine|JVM]]) regardless of computer architecture.<br />
<br />
Arch Linux officially supports the open source [http://openjdk.java.net/ OpenJDK] versions 7, 8, and 9. All these JVM can be installed without conflict and switched between using helper script {{Ic|archlinux-java}}. Several other Java environments are available in [[AUR]] but are not officially supported.<br />
<br />
== Installation ==<br />
<br />
{{Note|<br />
*Installing a JDK will automatically pull its JRE dependency.<br />
*After installation, the Java environment will need to be recognized by the shell ({{Ic|$PATH}} variable). This can be done by sourcing {{Ic|/etc/profile}} from the command line or by logging out/in again of a Desktop Environment.}}<br />
<br />
Two ''common'' packages are respectively pulled as dependency, named {{Pkg|java-runtime-common}} (containing common files for Java Runtime Environments) and {{Pkg|java-environment-common}} (containing common files for Java Development Kits). The provided environment file {{Ic|/etc/profile.d/jre.sh}} points to a linked location {{Ic|/usr/lib/jvm/default/bin}}, set by the {{ic|archlinux-java}} helper script. The links {{Ic|/usr/lib/jvm/default}} and {{Ic|/usr/lib/jvm/default-runtime}} should '''always''' be edited with {{Ic|archlinux-java}}. This is used to display and point to a working default Java environment in {{Ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}</nowiki>}} or a Java runtime in {{Ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre</nowiki>}}.<br />
<br />
Most executables of the Java installation are provided by direct links in {{Ic|/usr/bin}}, while others are available in {{Ic|$PATH}}.<br />
<br />
{{Warning|File {{Ic|/etc/profile.d/jdk.sh}} is not provided any more by any package.}}<br />
<br />
The following packages are available:<br />
<br />
{{App|OpenJDK 7|The open-source implementation of the seventh edition of Java SE.|http://openjdk.java.net/projects/jdk7/|{{Pkg|jre7-openjdk-headless}} {{Pkg|jre7-openjdk}} {{Pkg|jdk7-openjdk}} {{Pkg|openjdk7-doc}} {{Pkg|openjdk7-src}}}}<br />
{{App|OpenJDK 8|The open-source implementation of the eight edition of Java SE.|http://openjdk.java.net/projects/jdk8/|{{Pkg|jre8-openjdk-headless}} {{Pkg|jre8-openjdk}} {{Pkg|jdk8-openjdk}} {{Pkg|openjdk8-doc}} {{Pkg|openjdk8-src}}}}<br />
{{App|OpenJFX 8|The open-source implementation of JavaFX. You [https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases do not need] to install this package if you are making use of Java SE (the Oracle's implementation of JRE and JDK described below). This package only concerns users of the open source implementation of Java (OpenJDK project).|http://openjdk.java.net/projects/openjfx/|{{Pkg|java-openjfx}} {{Pkg|java-openjfx-doc}} {{Pkg|java-openjfx-src}}}}<br />
{{App|OpenJDK 9|The open-source implementation of the ninth edition of Java SE.|http://openjdk.java.net/projects/jdk9/|{{Pkg|jre9-openjdk-headless}} {{Pkg|jre9-openjdk}} {{Pkg|jdk9-openjdk}} {{Pkg|openjdk9-doc}} {{Pkg|openjdk9-src}}}}<br />
{{App|OpenJ9|Formerly IBM, now Eclipse's implementation of JRE.|https://www.eclipse.org/openj9/|{{AUR|jdk8-j9-bin}} {{AUR|jdk9-openj9-bin}}}}<br />
{{App|Java SE|Oracle's implementation of JRE and JDK.|http://www.oracle.com/technetwork/java/javase/downloads/index.html|{{AUR|jre}} {{AUR|jre6}} {{AUR|jre7}} {{AUR|jre8}} {{AUR|jre-devel}} {{AUR|jdk}} {{AUR|jdk5}} {{AUR|jdk6}} {{AUR|jdk7}} {{AUR|jdk8}} {{AUR|jdk-devel}}}}<br />
{{App|Parrot VM|a VM with experimental support for Java [http://trac.parrot.org/parrot/wiki/Languages] through two different methods: either as a [http://code.google.com/p/parrot-jvm/ Java VM bytecode translator], or as a [https://github.com/chrisdolan/perk Java compiler targeting the Parrot VM].|http://www.parrot.org/|{{Pkg|parrot}}}}<br />
<br />
{{Note|32-bit versions of Java SE can be found by prefixing {{ic|bin32-}}, e.g. {{AUR|bin32-jre}} and {{AUR|bin32-jdk}}. They use {{AUR|java32-runtime-common}}, which functions as {{Pkg|java-runtime-common}} by suffixing with {{ic|32}}, e.g. {{ic|java32}}.}}<br />
<br />
== Flagging packages as out-of-date ==<br />
<br />
Although the Arch Linux package releases may contain a reference to the proprietary versions the packages are based on, the open-source project has its own versioning scheme: <br />
<br />
* {{Pkg|jre7-openjdk}}, {{Pkg|jdk7-openjdk}}, and {{Pkg|jre7-openjdk-headless}} should be flagged as out-of-date based on the [http://icedtea.wildebeest.org/download/source ''IcedTea'' version] (e.g. {{ic|2.4.3}}), rather than on the Oracle reference version (e.g. {{ic|u45}} in the release {{ic|7.u45_2.4.3-1}}).<br />
* {{Pkg|icedtea-web}} should be flagged as out-of-date based on the [http://icedtea.wildebeest.org/download/source ''IcedTea Web'' version] (e.g. {{ic|1.4.1}}). This is independent of the ''IcedTea'' version.<br />
<br />
== Switching between JVM ==<br />
<br />
The helper script {{Ic|archlinux-java}} provides such functionalities:<br />
<br />
archlinux-java <COMMAND><br />
<br />
COMMAND:<br />
status List installed Java environments and enabled one<br />
get Return the short name of the Java environment set as default<br />
set <JAVA_ENV> Force <JAVA_ENV> as default<br />
unset Unset current default Java environment<br />
fix Fix an invalid/broken default Java environment configuration<br />
<br />
=== List compatible Java environments installed ===<br />
<br />
$ archlinux-java status<br />
<br />
Example:<br />
<br />
$ archlinux-java status<br />
Available Java environments:<br />
java-7-openjdk (default)<br />
java-8-openjdk/jre<br />
<br />
Note the ''(default)'' denoting that {{Ic|java-7-openjdk}} is currently set as default. Invocation of {{Ic|java}} and other binaries will rely on this Java install. Also note on the previous output that only the ''JRE'' part of OpenJDK 8 is installed here.<br />
<br />
=== Change default Java environment ===<br />
<br />
# archlinux-java set <JAVA_ENV_NAME><br />
<br />
Example:<br />
<br />
# archlinux-java set java-8-openjdk/jre<br />
<br />
{{Tip|To see possible {{ic|<JAVA_ENV_NAME>}} names, use {{ic|archlinux-java status}}.}}<br />
<br />
Note that {{Ic|archlinux-java}} will not let you set an invalid Java environment. In the previous example, {{pkg|jre8-openjdk}} is installed but {{pkg|jdk8-openjdk}} is '''not''' so trying to set {{Ic|java-8-openjdk}} will fail:<br />
<br />
# archlinux-java set java-8-openjdk<br />
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path<br />
<br />
=== Unsetting the default Java environment ===<br />
<br />
There should be no need to unset a Java environment as packages providing them should take care of this. Still should you want to do so, just use command {{Ic|unset}}:<br />
<br />
# archlinux-java unset<br />
<br />
=== Fixing the default Java environment ===<br />
<br />
If an invalid Java environment link is set, calling the {{Ic|archlinux-java fix}} command tries to fix these. Also note that if no default Java environment is set, this will look for valid ones and try to set it for you. Officially supported packages "OpenJDK 7" and "OpenJDK 8" will be considered first in this order, then un-official packages from [[AUR]].<br />
<br />
# archlinux-java fix<br />
<br />
=== Launching an application with the non-default java version ===<br />
<br />
If you want to launch an application with another version of java than the default one (for example if you have both version jre7 and jre8 installed on your system), you can wrap your application in a small bash script to locally change the default PATH of java. For example if the default version is jre7 and you want use jre8:<br />
<br />
#!/bin/sh <br />
<br />
export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH<br />
exec /path/to/application "$@"<br />
<br />
== Package pre-requisites to support {{Ic|archlinux-java}} ==<br />
<br />
This section is targeted at packager willing to provide packages in [[AUR]] for an alternate JVM and be able to integrate with Arch Linux JVM scheme to use {{Ic|archlinux-java}}. To do so, packages should:<br />
<br />
* Place all files under {{Ic|/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} }}<br />
* Ensure all executables for which [https://www.archlinux.org/packages/extra/any/java-runtime-common/files/ java-runtime-common] and [https://www.archlinux.org/packages/extra/any/java-environment-common/files/ java-environment-common] provide links are available in the corresponding package <br />
* Ship links from {{Ic|/usr/bin}} to executables, only if these links do not already belong to [https://www.archlinux.org/packages/extra/any/java-runtime-common/files/ java-runtime-common] and [https://www.archlinux.org/packages/extra/any/java-environment-common/files/ java-environment-common]<br />
* Suffix man pages with {{Ic|-${VENDOR_NAME}${JAVA_MAJOR_VERSION} }} to prevent conflicts (see [https://www.archlinux.org/packages/extra/x86_64/jre8-openjdk/files/ jre8-openjdk file list] where man pages are suffixed with {{Ic|-openjdk8}})<br />
* Do not declare any [[PKGBUILD#conflicts|conflicts]] nor [[PKGBUILD#replaces|replaces]] with other JDKs, {{Ic|java-runtime}}, {{Ic|java-runtime-headless}} nor {{Ic|java-environment}}<br />
* Use script {{Ic|archlinux-java}} in ''install functions'' to set the Java environment as default '''if no other valid Java environment is already set''' (ie: package should not '''force''' install as default). See [https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/java7-openjdk officially supported Java environment package sources] for examples<br />
<br />
Also please note that:<br />
* Packages that need '''any''' Java environment should declare dependency on {{Ic|java-runtime}}, {{Ic|java-runtime-headless}} or {{Ic|java-environment}} as usual<br />
* Packages that need a '''specific Java vendor''' should declare dependency on the corresponding package<br />
* OpenJDK packages now declare {{Ic|1=provides="java-runtime-openjdk=${pkgver}"}} etc. This enables a third-party package to declare dependency on an OpenJDK without specifying a version<br />
<br />
== Troubleshooting ==<br />
<br />
=== MySQL ===<br />
<br />
Due to the fact that the JDBC-drivers often use the port in the URL to establish a connection to the database, it is considered "remote" (i.e., MySQL does not listen to the port as per its default settings) despite the fact that they are possibly running on the same host, Thus, to use JDBC and MySQL you should enable remote access to MySQL, following the instructions in [[MySQL#Grant remote access]].<br />
<br />
=== Impersonate another window manager ===<br />
<br />
You may use the {{pkg|wmname}} from [http://tools.suckless.org/x/wmname suckless.org] to make the JVM believe you are running a different window manager. This may solve a rendering issue of Java GUIs occurring in window managers like [[Awesome]] or [[Dwm]] or [[Ratpoison]].<br />
<br />
$ wmname LG3D<br />
<br />
You must restart the application in question after issuing the wmname command.<br />
<br />
This works because the JVM contains a hard-coded list of known, non-re-parenting window managers. For maximum irony, some users prefer to impersonate {{ic|LG3D}}, the non-re-parenting window manager [[wikipedia:Project_Looking_Glass|written by Sun, in Java]].<br />
<br />
=== Illegible fonts ===<br />
<br />
In addition to the suggestions mentioned below in [[#Better font rendering]], some fonts may still not be legible afterwards. If this is the case, there is a good chance Microsoft fonts are being used. Install {{AUR|ttf-ms-fonts}} from the [[AUR]].<br />
<br />
=== Missing text in some applications ===<br />
<br />
If some applications are completely missing texts it may help to use the options under [[#Tips and tricks]] as suggested in {{Bug|40871}}.<br />
<br />
=== Applications not resizing with WM, menus immediately closing ===<br />
The standard Java GUI toolkit has a hard-coded list of "non-reparenting" window managers. If using one that is not on that list, there can be some problems with running some Java applications. One of the most common problems is "gray blobs", when the Java application renders as a plain gray box instead of rendering the GUI. Another one might be menus responding to your click, but closing immediately.<br />
<br />
There are several things that may help:<br />
<br />
* For {{Pkg|jre7-openjdk}} or {{Pkg|jre8-openjdk}}, append the line {{Ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} in {{ic|/etc/profile.d/jre.sh}}. Then, source the file {{ic|/etc/profile.d/jre.sh}} or log out and log back in.<br />
* For Oracle's JRE/JDK, use [https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Using_SetWMName SetWMName.] However, its effect may be canceled when also using {{ic|XMonad.Hooks.EwmhDesktops}}. In this case, appending<br />
<br />
>> setWMName "LG3D"<br />
<br />
to the {{ic|LogHook}} may help.<br />
<br />
See [http://wiki.haskell.org/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console] for more information.<br />
<br />
=== System freezes when debugging JavaFX Applications ===<br />
<br />
If your system freezes while debugging a JavaFX Application, you can try to supply the JVM option {{Ic|1=-Dsun.awt.disablegrab=true}}.<br />
<br />
See http://bugs.java.com/view_bug.do?bug_id=6714678<br />
<br />
== Tips and tricks ==<br />
<br />
{{Note|Suggestions in this section are applicable to all applications, using explicitly installed (external) Java runtime. Some applications are bundled with own (private) runtime or use own mechanics for GUI, font rendering, etc., so none of written below is guaranteed to work.}}<br />
<br />
Behavior of most Java applications can be controlled by supplying predefined variables to Java runtime. From [https://bbs.archlinux.org/viewtopic.php?id=72892 this forum post], a way to do it consists of adding the following line in your {{Ic|~/.bashrc}} (or {{Ic|/etc/profile.d/jre.sh}} to affect programs that are not run by sourcing {{Ic|~/.bashrc}}, e.g., launching a program from Gnome's Applications view):<br />
<br />
export _JAVA_OPTIONS="-D'''<option 1>''' -D'''<option 2>'''..."<br />
<br />
For example, to use system anti-aliased fonts and make swing use the GTK look and feel:<br />
<br />
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'<br />
<br />
=== Better font rendering ===<br />
<br />
Both closed source and open source implementations of Java are known to have improperly implemented anti-aliasing of fonts. This can be fixed with the following options: {{Ic|1=-Dawt.useSystemAAFontSettings=on}}, {{Ic|1=-Dswing.aatext=true}}<br />
<br />
See [[Java Runtime Environment fonts]] for more detailed information.<br />
<br />
=== Silence 'Picked up _JAVA_OPTIONS' message on command line ===<br />
<br />
Setting the _JAVA_OPTIONS environment variables makes java (openjdk) write to stderr messages of the form: 'Picked up _JAVA_OPTIONS=...'. To supress those mesages<br />
in your terminal you can unset the environment variable in your shell startup files and alias java to pass those same options as command line arguments:<br />
<br />
_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"<br />
unset _JAVA_OPTIONS<br />
alias java='java "$_SILENT_JAVA_OPTIONS"'<br />
<br />
=== GTK LookAndFeel ===<br />
<br />
If your Java programs look ugly, you may want to set up the default look and feel for the swing components:<br />
<br />
{{Ic|1=swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}.<br />
<br />
Some Java programs insist on using the cross platform Metal look and feel. In some of these cases you can force these apps to use the GTK look and feel by setting the following property:<br />
<br />
{{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}.<br />
<br />
{{Note|Forcing Java to use GTK may break some applications. The JRE/JDK is linked against GTK2 while many desktop applications use GTK3. If a GTK3 app has Java plugins with GUI, the app is likely to crash when opening the Java GUI, as mixing GTK2 and GTK3 in the same process is not supported. Libreoffice 5.0 is an example of this.}}<br />
<br />
=== Better 2D performance ===<br />
<br />
Switching to OpenGL-based hardware acceleration pipeline will improve 2D performance<br />
<br />
export _JAVA_OPTIONS='-Dsun.java2d.opengl=true'<br />
<br />
=== Non-reparenting window managers ===<br />
<br />
Non-reparenting window managers user should set the following environment variable in their {{Ic|.xinitrc}}<br />
<br />
export _JAVA_AWT_WM_NONREPARENTING=1<br />
<br />
== See also ==<br />
<br />
* [http://math.hws.edu/javanotes/ Introduction to Programming Using Java]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Mono&diff=497907Mono2017-11-22T21:48:26Z<p>Nodiscc: Summary: improved/more accurate description, quote wikipedia</p>
<hr />
<div>[[Category:Framework]]<br />
[[ja:Mono]]<br />
<br />
From [[Wikipedia:Mono (software)|Wikipedia]]:<br />
<br />
:''Mono is a [...] project to create a [[Wikipedia:.NET Framework|.NET Framework]]-compatible set of tools including, among others, a [[Wikipedia:C Sharp (programming language)|C#]] compiler and a [[Wikipedia:Common Language Runtime|Common Language Runtime]].''<br />
<br />
== Installation ==<br />
<br />
Mono can be [[pacman|installed]] with the package {{Pkg|mono}}.<br />
<br />
If you need VisualBasic.Net support you have to [[install]] the VisualBasic.Net interpreter with the package {{AUR|mono-basic}}.<br />
<br />
MonoDevelop calls [[xterm]] when you run your project. You might install it, when you're writing a console application.<br />
<br />
== Running Mono applications ==<br />
<br />
You can execute Mono binaries by calling {{ic|mono}} manually:<br />
<br />
$ mono programsname.exe<br />
<br />
You can also execute Mono binaries directly, just like native binaries:<br />
<br />
$ chmod 755 exefile.exe<br />
$ ./exefile.exe<br />
<br />
== Testing Mono ==<br />
<br />
Make a new file:<br />
{{hc|test.cs|<br />
using System;<br />
<br />
public class Test {<br />
public static void Main(string[] args) {<br />
Console.WriteLine("Hello World!");<br />
}<br />
}<br />
}}<br />
Then run:<br />
{{bc|<br />
$ mcs test.cs<br />
$ mono test.exe<br />
Hello world!<br />
}}<br />
<br />
== Development ==<br />
<br />
Starting to develop in Mono/C# is very easy. Just [[install]] the [http://monodevelop.com/ MonoDevelop IDE] with packages {{AUR|monodevelop}}.<br />
Alternatively, you can install the {{AUR|rider}} IDE.<br />
<br />
If you want the API documentation browser and some testing and development tools you have to install {{Pkg|mono-tools}}.<br />
<br />
== Troubleshooting ==<br />
<br />
=== I get an error "cannot execute "path/to/your/binary" file name has not been set." ===<br />
You might install [[xterm]], since MonoDevelop starts [[xterm]] when you press on run. This might be a <br />
possible dependency.<br />
<br />
=== I get an error when I try to run Mono binaries directly: "cannot execute binary file" ===<br />
<br />
The [[Wikipedia:Binfmt_misc|binfmt_misc]] handler for Mono has not yet been set up, as explained in detail on the [http://www.mono-project.com/Guide:Running_Mono_Applications#Registering_.exe_as_non-native_binaries_.28Linux_only.29 Mono Project website].<br />
<br />
To fix this, [[daemon|restart]] the {{ic|systemd-binfmt}} service.<br />
<br />
=== I get an TLS handshake (or similar certificate based) error ===<br />
<br />
Try {{ic|mozroots --import --ask-remove}} which should update monos certificates. {{ic|mozroots}} is part of the mono package.<br />
<br />
== See also ==<br />
<br />
* [http://www.mono-project.com Official Mono website]<br />
* [http://mono-project.com/Monkeyguide The Mono Handbook]<br />
* [http://go-mono.org/docs The API reference of Mono]<br />
* [http://www.ecma-international.org/publications/standards/ECMA-334.HTM ECMA-334: C# Language Specification]<br />
* [http://www.ecma-international.org/publications/standards/ECMA-335.HTM ECMA-335: Common Language Infrastructure (CLI)]<br />
* [http://www.mono-project.com/Guide:Running_Mono_Applications Instructions for running Mono applications]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Systemd&diff=497879Systemd2017-11-22T18:49:35Z<p>Nodiscc: /* Timers */ add inline link to cron</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Daemons and system services]]<br />
[[Category:Boot process]]<br />
[[Category:Init]]<br />
[[ar:Systemd]]<br />
[[de:Systemd]]<br />
[[el:Systemd]]<br />
[[es:Systemd]]<br />
[[fa:Systemd]]<br />
[[fr:Systemd]]<br />
[[it:Systemd]]<br />
[[ja:Systemd]]<br />
[[pt:Systemd]]<br />
[[ru:Systemd]]<br />
[[zh-hans:Systemd]]<br />
[[zh-hant:Systemd]]<br />
{{Related articles start}}<br />
{{Related|systemd/User}}<br />
{{Related|systemd/Timers}}<br />
{{Related|systemd FAQ}}<br />
{{Related|init}}<br />
{{Related|Daemons#List of daemons}}<br />
{{Related|udev}}<br />
{{Related|Improve boot performance}}<br />
{{Related|Allow users to shutdown}}<br />
{{Related articles end}}<br />
<br />
From the [http://freedesktop.org/wiki/Software/systemd project web page]:<br />
<br />
:''systemd'' is a suite of basic building blocks for a Linux system. It provides a system and service manager that runs as PID 1 and starts the rest of the system. systemd provides aggressive parallelization capabilities, uses socket and [[D-Bus]] activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux [[control groups]], maintains mount and automount points, and implements an elaborate transactional dependency-based service control logic. ''systemd'' supports SysV and LSB init scripts and works as a replacement for sysvinit. Other parts include a logging daemon, utilities to control basic system configuration like the hostname, date, locale, maintain a list of logged-in users and running containers and virtual machines, system accounts, runtime directories and settings, and daemons to manage simple network configuration, network time synchronization, log forwarding, and name resolution.<br />
<br />
{{Note|1=For a detailed explanation as to why Arch has moved to ''systemd'', see [https://bbs.archlinux.org/viewtopic.php?pid=1149530#p1149530 this forum post].}}<br />
<br />
== Basic systemctl usage ==<br />
<br />
The main command used to introspect and control ''systemd'' is ''systemctl''. Some of its uses are examining the system state and managing the system and services. See {{man|1|systemctl}} for more details.<br />
<br />
{{Tip|<br />
* You can use all of the following ''systemctl'' commands with the {{ic|-H ''user''@''host''}} switch to control a ''systemd'' instance on a remote machine. This will use [[SSH]] to connect to the remote ''systemd'' instance.<br />
* ''systemadm'' is the official graphical frontend for ''systemctl'' and is provided by the {{Pkg|systemd-ui}} package.<br />
* [[Plasma]] users can install {{Pkg|systemd-kcm}} as a graphical frontend for ''systemctl''. After installing the module will be added under ''System administration''.}}<br />
<br />
=== Analyzing the system state ===<br />
<br />
Show '''system status''' using:<br />
<br />
$ systemctl status<br />
<br />
'''List running''' units:<br />
<br />
$ systemctl<br />
<br />
or:<br />
<br />
$ systemctl list-units<br />
<br />
'''List failed''' units:<br />
<br />
$ systemctl --failed<br />
<br />
The available unit files can be seen in {{ic|/usr/lib/systemd/system/}} and {{ic|/etc/systemd/system/}} (the latter takes precedence). '''List installed''' unit files with:<br />
<br />
$ systemctl list-unit-files<br />
<br />
=== Using units ===<br />
<br />
Units can be, for example, services (''.service''), mount points (''.mount''), devices (''.device'') or sockets (''.socket'').<br />
<br />
When using ''systemctl'', you generally have to specify the complete name of the unit file, including its suffix, for example {{ic|sshd.socket}}. There are however a few short forms when specifying the unit in the following ''systemctl'' commands:<br />
<br />
* If you do not specify the suffix, systemctl will assume ''.service''. For example, {{ic|netctl}} and {{ic|netctl.service}} are equivalent.<br />
* Mount points will automatically be translated into the appropriate ''.mount'' unit. For example, specifying {{ic|/home}} is equivalent to {{ic|home.mount}}.<br />
* Similar to mount points, devices are automatically translated into the appropriate ''.device'' unit, therefore specifying {{ic|/dev/sda2}} is equivalent to {{ic|dev-sda2.device}}.<br />
<br />
See {{man|5|systemd.unit}} for details.<br />
<br />
{{Note|Some unit names contain an {{ic|@}} sign (e.g. {{ic|name@''string''.service}}): this means that they are [http://0pointer.de/blog/projects/instances.html instances] of a ''template'' unit, whose actual file name does not contain the {{ic|''string''}} part (e.g. {{ic|name@.service}}). {{ic|''string''}} is called the ''instance identifier'', and is similar to an argument that is passed to the template unit when called with the ''systemctl'' command: in the unit file it will substitute the {{ic|%i}} specifier. <br />
<br />
To be more accurate, ''before'' trying to instantiate the {{ic|name@.suffix}} template unit, ''systemd'' will actually look for a unit with the exact {{ic|name@string.suffix}} file name, although by convention such a "clash" happens rarely, i.e. most unit files containing an {{ic|@}} sign are meant to be templates. Also, if a template unit is called without an instance identifier, it will just fail, since the {{ic|%i}} specifier cannot be substituted.<br />
}}<br />
<br />
{{Tip|<br />
* Most of the following commands also work if multiple units are specified, see {{man|1|systemctl}} for more information.<br />
* The {{ic|--now}} switch can be used in conjunction with {{ic|enable}}, {{ic|disable}}, and {{ic|mask}} to respectively start, stop, or mask immediately the unit rather than after the next boot.<br />
* A package may offer units for different purposes. If you just installed a package, {{ic|pacman -Qql ''package'' <nowiki>|</nowiki> grep -Fe .service -e .socket}} can be used to check and find them.}}<br />
<br />
'''Start''' a unit immediately:<br />
<br />
# systemctl start ''unit''<br />
<br />
'''Stop''' a unit immediately:<br />
<br />
# systemctl stop ''unit''<br />
<br />
'''Restart''' a unit:<br />
<br />
# systemctl restart ''unit''<br />
<br />
Ask a unit to '''reload''' its configuration:<br />
<br />
# systemctl reload ''unit''<br />
<br />
Show the '''status''' of a unit, including whether it is running or not:<br />
<br />
$ systemctl status ''unit''<br />
<br />
'''Check''' whether a unit is already enabled or not:<br />
<br />
$ systemctl is-enabled ''unit''<br />
<br />
'''Enable''' a unit to be started on '''bootup''':<br />
<br />
# systemctl enable ''unit''<br />
<br />
'''Enable''' a unit to be started on '''bootup''' and '''Start''' immediately:<br />
<br />
# systemctl enable --now ''unit''<br />
<br />
'''Disable''' a unit to not start during bootup:<br />
<br />
# systemctl disable ''unit''<br />
<br />
'''Mask''' a unit to make it impossible to start it:<br />
<br />
# systemctl mask ''unit''<br />
<br />
'''Unmask''' a unit:<br />
<br />
# systemctl unmask ''unit''<br />
<br />
Show the '''manual page''' associated with a unit (this has to be supported by the unit file):<br />
<br />
$ systemctl help ''unit''<br />
<br />
Reload ''systemd'', scanning for '''new or changed units''':<br />
<br />
# systemctl daemon-reload<br />
<br />
=== Power management ===<br />
<br />
[[polkit]] is necessary for power management as an unprivileged user. If you are in a local ''systemd-logind'' user session and no other session is active, the following commands will work without root privileges. If not (for example, because another user is logged into a tty), ''systemd'' will automatically ask you for the root password.<br />
<br />
Shut down and reboot the system:<br />
<br />
$ systemctl reboot<br />
<br />
Shut down and power-off the system:<br />
<br />
$ systemctl poweroff<br />
<br />
Suspend the system:<br />
<br />
$ systemctl suspend<br />
<br />
Put the system into hibernation:<br />
<br />
$ systemctl hibernate<br />
<br />
Put the system into hybrid-sleep state (or suspend-to-both):<br />
<br />
$ systemctl hybrid-sleep<br />
<br />
== Writing unit files ==<br />
<br />
The syntax of ''systemd'''s [http://www.freedesktop.org/software/systemd/man/systemd.unit.html unit files] is inspired by XDG Desktop Entry Specification ''.desktop'' files, which are in turn inspired by Microsoft Windows ''.ini'' files. Unit files are loaded from two locations. From lowest to highest precedence they are:<br />
<br />
* {{ic|/usr/lib/systemd/system/}}: units provided by installed packages<br />
* {{ic|/etc/systemd/system/}}: units installed by the system administrator<br />
<br />
{{Note|<br />
* The load paths are completely different when running ''systemd'' in [[systemd/User#How it works|user mode]].<br />
* systemd unit names may only contain ASCII alphanumeric characters, underscores and periods. All other characters must be replaced by C-style "\x2d" escapes, or employ their pre defined semantics ('@', '-'). See {{man|5|systemd.unit}} and {{man|1|systemd-escape}} for more information.}}<br />
<br />
Look at the units installed by your packages for examples, as well as the [http://www.freedesktop.org/software/systemd/man/systemd.service.html#Examples annotated example section] of {{man|5|systemd.service}}.<br />
<br />
{{Tip|Comments prepended with {{ic|#}} may be used in unit-files as well, but only in new lines. Do not use end-line comments after ''systemd'' parameters or the unit will fail to activate.}}<br />
<br />
=== Handling dependencies ===<br />
<br />
With ''systemd'', dependencies can be resolved by designing the unit files correctly. The most typical case is that the unit ''A'' requires the unit ''B'' to be running before ''A'' is started. In that case add {{ic|1=Requires=''B''}} and {{ic|1=After=''B''}} to the {{ic|[Unit]}} section of ''A''. If the dependency is optional, add {{ic|1=Wants=''B''}} and {{ic|1=After=''B''}} instead. Note that {{ic|1=Wants=}} and {{ic|1=Requires=}} do not imply {{ic|1=After=}}, meaning that if {{ic|1=After=}} is not specified, the two units will be started in parallel.<br />
<br />
Dependencies are typically placed on services and not on [[#Targets]]. For example, {{ic|network.target}} is pulled in by whatever service configures your network interfaces, therefore ordering your custom unit after it is sufficient since {{ic|network.target}} is started anyway.<br />
<br />
=== Service types ===<br />
<br />
There are several different start-up types to consider when writing a custom service file. This is set with the {{ic|1=Type=}} parameter in the {{ic|[Service]}} section:<br />
<br />
* {{ic|1=Type=simple}} (default): ''systemd'' considers the service to be started up immediately. The process must not fork. Do not use this type if other services need to be ordered on this service, unless it is socket activated.<br />
* {{ic|1=Type=forking}}: ''systemd'' considers the service started up once the process forks and the parent has exited. For classic daemons use this type unless you know that it is not necessary. You should specify {{ic|1=PIDFile=}} as well so ''systemd'' can keep track of the main process.<br />
* {{ic|1=Type=oneshot}}: this is useful for scripts that do a single job and then exit. You may want to set {{ic|1=RemainAfterExit=yes}} as well so that ''systemd'' still considers the service as active after the process has exited.<br />
* {{ic|1=Type=notify}}: identical to {{ic|1=Type=simple}}, but with the stipulation that the daemon will send a signal to ''systemd'' when it is ready. The reference implementation for this notification is provided by ''libsystemd-daemon.so''.<br />
* {{ic|1=Type=dbus}}: the service is considered ready when the specified {{ic|BusName}} appears on DBus's system bus.<br />
* {{ic|1=Type=idle}}: ''systemd'' will delay execution of the service binary until all jobs are dispatched. Other than that behavior is very similar to {{ic|1=Type=simple}}. <br />
<br />
See the [http://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= systemd.service(5)] man page for a more detailed explanation of the {{ic|Type}} values.<br />
<br />
=== Editing provided units ===<br />
<br />
To avoid conflicts with pacman, unit files provided by packages should not be directly edited. There are two safe ways to modify a unit without touching the original file: create a new unit file which overrides the original unit or create drop-in snippets which are applied on top of the original unit. For both methods, you must reload the unit afterwards to apply your changes. This can be done either by editing the unit with {{ic|systemctl edit}} (which reloads the unit automatically) or by reloading all units with:<br />
<br />
# systemctl daemon-reload<br />
<br />
{{Tip|<br />
* You can use ''systemd-delta'' to see which unit files have been overridden or extended and what exactly has been changed.<br />
* Use {{ic|systemctl cat ''unit''}} to view the content of a unit file and all associated drop-in snippets.<br />
* Syntax highlighting for ''systemd'' unit files within [[Vim]] can be enabled by installing {{Pkg|vim-systemd}}.<br />
}}<br />
<br />
==== Replacement unit files ====<br />
<br />
To replace the unit file {{ic|/usr/lib/systemd/system/''unit''}}, create the file {{ic|/etc/systemd/system/''unit''}} and reenable the unit to update the symlinks:<br />
<br />
# systemctl reenable ''unit''<br />
<br />
Alternatively, run:<br />
<br />
# systemctl edit --full ''unit''<br />
<br />
This opens {{ic|/etc/systemd/system/''unit''}} in your editor (copying the installed version if it does not exist yet) and automatically reloads it when you finish editing.<br />
<br />
{{Note|Pacman does not update the replacement unit files when the originals are updated, so this method can make system maintenance more difficult. For this reason the next approach is recommended.}}<br />
<br />
==== Drop-in files ====<br />
<br />
To create drop-in files for the unit file {{ic|/usr/lib/systemd/system/''unit''}}, create the directory {{ic|/etc/systemd/system/''unit''.d/}} and place ''.conf'' files there to override or add new options. ''systemd'' will parse these ''.conf'' files and apply them on top of the original unit.<br />
<br />
The easiest way to do this is to run:<br />
<br />
# systemctl edit ''unit''<br />
<br />
This opens the file {{ic|/etc/systemd/system/''unit''.d/override.conf}} in your text editor (creating it if necessary) and automatically reloads the unit when you are done editing.<br />
<br />
==== Revert to vendor version ====<br />
<br />
To revert any changes to a unit made using {{ic|systemctl edit}} do:<br />
<br />
# systemctl revert ''unit''<br />
<br />
==== Examples ====<br />
<br />
For example, if you simply want to add an additional dependency to a unit, you may create the following file:<br />
<br />
{{hc|/etc/systemd/system/''unit''.d/customdependency.conf|2=<br />
[Unit]<br />
Requires=''new dependency''<br />
After=''new dependency''<br />
}}<br />
<br />
As another example, in order to replace the {{ic|ExecStart}} directive for a unit that is not of type {{ic|oneshot}}, create the following file:<br />
<br />
{{hc|/etc/systemd/system/''unit''.d/customexec.conf|2=<br />
[Service]<br />
ExecStart=<br />
ExecStart=''new command''<br />
}}<br />
<br />
Note how {{ic|ExecStart}} must be cleared before being re-assigned [https://bugzilla.redhat.com/show_bug.cgi?id=756787#c9]. The same holds for every item that can be specified multiple times, e.g. {{ic|OnCalendar}} for timers.<br />
<br />
One more example to automatically restart a service:<br />
<br />
{{hc|/etc/systemd/system/''unit''.d/restart.conf|2=<br />
[Service]<br />
Restart=always<br />
RestartSec=30<br />
}}<br />
<br />
== Targets ==<br />
<br />
{{Style|Unclear description, copy-pasted content (explicitly mentions "Fedora").|section=Make section "Targets" more clearly}}<br />
<br />
''systemd'' uses ''targets'' which serve a similar purpose as [[wikipedia:Runlevel|runlevels]] but act a little different. Each ''target'' is named instead of numbered and is intended to serve a specific purpose with the possibility of having multiple ones active at the same time. Some ''target''s are implemented by inheriting all of the services of another ''target'' and adding additional services to it. There are ''systemd'' ''target''s that mimic the common SystemVinit runlevels so you can still switch ''target''s using the familiar {{ic|telinit RUNLEVEL}} command.<br />
<br />
=== Get current targets ===<br />
<br />
The following should be used under ''systemd'' instead of running {{ic|runlevel}}:<br />
<br />
$ systemctl list-units --type=target<br />
<br />
=== Create custom target ===<br />
<br />
The runlevels that held a defined meaning under sysvinit (i.e., 0, 1, 3, 5, and 6); have a 1:1 mapping with a specific ''systemd'' ''target''. Unfortunately, there is no good way to do the same for the user-defined runlevels like 2 and 4. If you make use of those it is suggested that you make a new named ''systemd'' ''target'' as {{ic|/etc/systemd/system/''your target''}} that takes one of the existing runlevels as a base (you can look at {{ic|/usr/lib/systemd/system/graphical.target}} as an example), make a directory {{ic|/etc/systemd/system/''your target''.wants}}, and then symlink the additional services from {{ic|/usr/lib/systemd/system/}} that you wish to enable.<br />
<br />
=== Mapping between SysV runlevels and systemd targets ===<br />
<br />
{| class="wikitable"<br />
! SysV Runlevel !! systemd Target !! Notes<br />
|-<br />
| 0 || runlevel0.target, poweroff.target || Halt the system.<br />
|-<br />
| 1, s, single || runlevel1.target, rescue.target || Single user mode.<br />
|-<br />
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || User-defined/Site-specific runlevels. By default, identical to 3.<br />
|-<br />
| 3 || runlevel3.target, multi-user.target || Multi-user, non-graphical. Users can usually login via multiple consoles or via the network.<br />
|-<br />
| 5 || runlevel5.target, graphical.target || Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login.<br />
|-<br />
| 6 || runlevel6.target, reboot.target || Reboot<br />
|-<br />
| emergency || emergency.target || Emergency shell<br />
|-<br />
|}<br />
<br />
=== Change current target ===<br />
<br />
In ''systemd'' targets are exposed via ''target units''. You can change them like this:<br />
<br />
# systemctl isolate graphical.target<br />
<br />
This will only change the current target, and has no effect on the next boot. This is equivalent to commands such as {{ic|telinit 3}} or {{ic|telinit 5}} in Sysvinit.<br />
<br />
=== Change default target to boot into ===<br />
<br />
The standard target is {{ic|default.target}}, which is aliased by default to {{ic|graphical.target}} (which roughly corresponds to the old runlevel 5). To change the default target at boot-time, append one of the following [[kernel parameters]] to your bootloader:<br />
<br />
* {{ic|1=systemd.unit=multi-user.target}} (which roughly corresponds to the old runlevel 3),<br />
* {{ic|1=systemd.unit=rescue.target}} (which roughly corresponds to the old runlevel 1).<br />
<br />
Alternatively, you may leave the bootloader alone and change {{ic|default.target}}. This can be done using ''systemctl'':<br />
<br />
# systemctl set-default multi-user.target<br />
<br />
To be able to override the previously set {{ic|default.target}}, use the force option:<br />
<br />
# systemctl set-default -f multi-user.target<br />
<br />
The effect of this command is output by ''systemctl''; a symlink to the new default target is made at {{ic|/etc/systemd/system/default.target}}.<br />
<br />
== Temporary files ==<br />
<br />
"''systemd-tmpfiles'' creates, deletes and cleans up volatile and temporary files and directories." It reads configuration files in {{ic|/etc/tmpfiles.d/}} and {{ic|/usr/lib/tmpfiles.d/}} to discover which actions to perform. Configuration files in the former directory take precedence over those in the latter directory.<br />
<br />
Configuration files are usually provided together with service files, and they are named in the style of {{ic|/usr/lib/tmpfiles.d/''program''.conf}}. For example, the [[Samba]] daemon expects the directory {{ic|/run/samba}} to exist and to have the correct permissions. Therefore, the {{Pkg|samba}} package ships with this configuration:<br />
<br />
{{hc|/usr/lib/tmpfiles.d/samba.conf|<br />
D /run/samba 0755 root root}}<br />
<br />
Configuration files may also be used to write values into certain files on boot. For example, if you used {{ic|/etc/rc.local}} to disable wakeup from USB devices with {{ic|echo USBE > /proc/acpi/wakeup}}, you may use the following tmpfile instead:<br />
<br />
{{hc|/etc/tmpfiles.d/disable-usb-wake.conf|<br />
w /proc/acpi/wakeup - - - - USBE}}<br />
<br />
See the {{man|8|systemd-tmpfiles}} and {{man|5|tmpfiles.d}} man pages for details.<br />
<br />
{{Note|This method may not work to set options in {{ic|/sys}} since the ''systemd-tmpfiles-setup'' service may run before the appropriate device modules is loaded. In this case you could check whether the module has a parameter for the option you want to set with {{ic|modinfo ''module''}} and set this option with a [[Kernel modules#Setting module options|config file in /etc/modprobe.d]]. Otherwise you will have to write a [[Udev#About_udev_rules|udev rule]] to set the appropriate attribute as soon as the device appears.}}<br />
<br />
== Timers ==<br />
<br />
A timer is a unit configuration file whose name ends with ''.timer'' and encodes information about a timer controlled and supervised by ''systemd'', for timer-based activation. See [[systemd/Timers]].<br />
<br />
{{Note|Timers can replace [[cron]] functionality to a great extent. See [[systemd/Timers#As a cron replacement]].}}<br />
<br />
== Mounting ==<br />
<br />
Since systemd is a replacement for System V init, it is in charge of the mounts specified in {{ic|/etc/fstab}}. In fact, it goes beyond the usual {{ic|fstab}} capabilities, implementing special mount options prefixed with {{ic|x-systemd.}}. See [[Fstab#Automount with systemd]] for an example of ''automounting'' (mounting on-demand) using these extensions. See [https://www.freedesktop.org/software/systemd/man/systemd.mount.html#fstab] for the complete documentation of these extensions.<br />
<br />
== Journal ==<br />
<br />
''systemd'' has its own logging system called the journal; therefore, running a {{ic|syslog}} daemon is no longer required. To read the log, use:<br />
<br />
# journalctl<br />
<br />
In Arch Linux, the directory {{ic|/var/log/journal/}} is a part of the {{Pkg|systemd}} package, and the journal (when {{ic|1=Storage=}} is set to {{ic|auto}} in {{ic|/etc/systemd/journald.conf}}) will write to {{ic|/var/log/journal/}}. If you or some program delete that directory, ''systemd'' will '''not''' recreate it automatically and instead will write its logs to {{ic|/run/systemd/journal}} in a nonpersistent way. However, the folder will be recreated when you set {{ic|1=Storage=persistent}} and run {{ic|systemctl restart systemd-journald}} (or reboot).<br />
<br />
Systemd journal classifies messages by [[#Priority level|Priority level]] and [[#Facility|Facility]]. Logging classification corresponds to classic [[wikipedia:Syslog|Syslog]] protocol ([https://tools.ietf.org/html/rfc5424 RFC 5424]).<br />
<br />
===Priority level===<br />
<br />
A syslog severity code (in systemd called priority) is used to mark the importance of a message [https://tools.ietf.org/html/rfc5424#section-6.2.1 RFC 5424 Section 6.2.1].<br />
<br />
{| class="wikitable"<br />
|-<br />
! Value !! Severity !! Keyword !! Description || Examples<br />
|-<br />
| 0 || Emergency || emerg || System is unusable || Severe Kernel BUG, systemd dumped core.<br>This level should not be used by applications.<br />
|-<br />
| 1 || Alert || alert || Should be corrected immediately || Vital subsystem goes out of work. Data loss. <br>{{ic|kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc|}}.<br />
|-<br />
| 2 || Critical || crit || Critical conditions || Crashes, coredumps. Like familiar flash:<br>{{ic|systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core}}<br>Failure in the system primary application, like X11. <br />
|-<br />
| 3 || Error || err || Error conditions || Not severe error reported:<br>{{ic|kernel: usb 1-3: 3:1: cannot get freq at ep 0x84}},<br>{{ic|systemd[1]: Failed unmounting /var.}},<br>{{ic|libvirtd[1720]: internal error: Failed to initialize a valid firewall backend}}).<br />
|-<br />
| 4 || Warning || warning || May indicate that an error will occur if action is not taken. || A non-root file system has only 1GB free.<br>{{ic|org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale}}.<br />
|-<br />
| 5 || Notice || notice || Events that are unusual, but not error conditions. || {{ic|systemd[1]: var.mount: Directory /var to mount over is not empty, mounting anyway}}. {{ic|gcr-prompter[4997]: Gtk: GtkDialog mapped without a transient parent. This is discouraged}}.<br />
|-<br />
| 6 || Informational || info || Normal operational messages that require no action. || {{ic|lvm[585]: 7 logical volume(s) in volume group "archvg" now active}}.<br />
|-<br />
| 7 || Debug || debug || Information useful to developers for debugging the application. || {{ic|kdeinit5[1900]: powerdevil: Scheduling inhibition from ":1.14" "firefox" with cookie 13 and reason "screen"}}.<br />
|}<br />
<br />
If you cannot find a message on the expected priority level, also search a couple of levels above and below: these rules are recommendations, and the developer of the affected application may have a different perception of the issue's importance from yours.<br />
<br />
===Facility===<br />
<br />
A syslog facility code is used to specify the type of program that is logging the message [https://tools.ietf.org/html/rfc5424#section-6.2.1 RFC 5424 Section 6.2.1].<br />
<br />
{| class="wikitable"<br />
! Facility code !! Keyword !! Description !! Info<br />
|-<br />
| 0 || kern || kernel messages<br />
|-<br />
| 1 || user || user-level messages<br />
|-<br />
| 2 || mail || mail system || Archaic POSIX still supported and sometimes used system, for more {{man|1|mail}})<br />
|-<br />
| 3 || daemon || system daemons || All daemons, including systemd and its subsystems<br />
|-<br />
| 4 || auth || security/authorization messages || Also watch for different facility 10<br />
|-<br />
| 5 || syslog || messages generated internally by syslogd || As it standartized for syslogd, not used by systemd (see facility 3)<br />
|-<br />
| 6 || lpr || line printer subsystem (archaic subsystem)<br />
|-<br />
| 7 || news || network news subsystem (archaic subsystem)<br />
|-<br />
| 8 || uucp || UUCP subsystem (archaic subsystem)<br />
|-<br />
| 9 || || clock daemon || systemd-timesyncd<br />
|-<br />
| 10 || authpriv || security/authorization messages || Also watch for different facility 4<br />
|-<br />
| 11 || ftp || FTP daemon<br />
|-<br />
| 12 || - || NTP subsystem<br />
|-<br />
| 13 || - || log audit<br />
|-<br />
| 14 || - || log alert<br />
|-<br />
| 15 || cron || scheduling daemon<br />
|-<br />
| 16 || local0 || local use 0 (local0)<br />
|-<br />
| 17 || local1 || local use 1 (local1)<br />
|-<br />
| 18 || local2 || local use 2 (local2)<br />
|-<br />
| 19 || local3 || local use 3 (local3)<br />
|-<br />
| 20 || local4 || local use 4 (local4)<br />
|-<br />
| 21 || local5 || local use 5 (local5)<br />
|-<br />
| 22 || local6 || local use 6 (local6)<br />
|-<br />
| 23 || local7 || local use 7 (local7)<br />
|}<br />
<br />
So, useful facilities to watch: 0,1,3,4,9,10,15.<br />
<br />
=== Filtering output ===<br />
<br />
''journalctl'' allows you to filter the output by specific fields. Be aware that if there are many messages to display or filtering of large time span has to be done, the output of this command can be delayed for quite some time.<br />
<br />
{{Tip|While the journal is stored in a binary format, the content of stored messages is not modified. This means it is viewable with ''strings'', for example for recovery in an environment which does not have ''systemd'' installed. Example command:<br />
{{bc|$ strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal <nowiki>| grep -i</nowiki> ''message''}}<br />
}}<br />
<br />
Examples:<br />
<br />
* Show all messages from this boot: {{bc|# journalctl -b}} However, often one is interested in messages not from the current, but from the previous boot (e.g. if an unrecoverable system crash happened). This is possible through optional offset parameter of the {{ic|-b}} flag: {{ic|journalctl -b -0}} shows messages from the current boot, {{ic|journalctl -b -1}} from the previous boot, {{ic|journalctl -b -2}} from the second previous and so on. See {{man|1|journalctl}} for full description, the semantics is much more powerful.<br />
* Show all messages from date (and optional time): {{bc|1=# journalctl --since="2012-10-30 18:17:16"}}<br />
* Show all messages since 20 minutes ago: {{bc|1=# journalctl --since "20 min ago"}}<br />
* Follow new messages: {{bc|# journalctl -f}}<br />
* Show all messages by a specific executable: {{bc|# journalctl /usr/lib/systemd/systemd}}<br />
* Show all messages by a specific process: {{bc|1=# journalctl _PID=1}}<br />
* Show all messages by a specific unit: {{bc|# journalctl -u netcfg}}<br />
* Show kernel ring buffer: {{bc|1=# journalctl -k}}<br />
* Show only error, critical, and alert priority messages {{bc|# journalctl -p err..alert}} Numbers also can be used, {{ic|journalctl -p 3..1}}. If single number/keyword used, {{ic|journalctl -p 3}} - all higher priority levels also included.<br />
* Show auth.log equivalent by filtering on syslog facility: {{bc|1=# journalctl SYSLOG_FACILITY=10}}<br />
<br />
See {{man|1|journalctl}}, {{man|7|systemd.journal-fields}}, or Lennart's [http://0pointer.de/blog/projects/journalctl.html blog post] for details.<br />
<br />
{{Tip|1=<br />
By default, ''journalctl'' truncates lines longer than screen width, but in some cases, it may be better to enable wrapping instead of truncating. This can be controlled by the {{ic|SYSTEMD_LESS}} [[environment variable]], which contains options passed to [[Core utilities#less|less]] (the default pager) and defaults to {{ic|FRSXMK}} (see {{man|1|less}} and {{man|1|journalctl}} for details).<br />
<br />
By omitting the {{ic|S}} option, the output will be wrapped instead of truncated. For example, start ''journalctl'' as follows:<br />
<br />
$ SYSTEMD_LESS=FRXMK journalctl<br />
<br />
If you would like to set this behaviour as default, [[Environment variables#Per_user|export]] the variable from {{ic|~/.bashrc}} or {{ic|~/.zshrc}}.<br />
}}<br />
<br />
=== Journal size limit ===<br />
<br />
If the journal is persistent (non-volatile), its size limit is set to a default value of 10% of the size of the underlying file system but capped to 4 GiB. For example, with {{ic|/var/log/journal/}} located on a 20 GiB partition, journal data may take up to 2 GiB. On a 50 GiB partition, it would max at 4 GiB.<br />
<br />
The maximum size of the persistent journal can be controlled by uncommenting and changing the following:<br />
<br />
{{hc|/etc/systemd/journald.conf|2=<br />
SystemMaxUse=50M<br />
}}<br />
<br />
It is also possible to use the drop-in snippets configuration override mechanism rather than editing the global configuration file. In this case do not forget to place the overrides under the {{ic|[Journal]}} header:<br />
<br />
{{hc|/etc/systemd/journald.conf.d/00-journal-size.conf|2=<br />
[Journal]<br />
SystemMaxUse=50M<br />
}}<br />
<br />
See {{man|5|journald.conf}} for more info.<br />
<br />
=== Clean journal files manually ===<br />
<br />
Journal files can be globally removed from {{ic|/var/log/journal/}} using ''e.g.'' {{ic|rm}}, or can be trimmed according to various criteria using {{ic|journalctl}}. Examples:<br />
<br />
* Remove archived journal files until the disk space they use falls below 100M: {{bc|1=# journalctl --vacuum-size=100M}}<br />
* Make all journal files contain no data older than 2 weeks. {{bc|1=# journalctl --vacuum-time=2weeks}}<br />
<br />
See {{man|1|journalctl}} for more info.<br />
<br />
=== Journald in conjunction with syslog ===<br />
<br />
Compatibility with a classic, non-journald aware [[Syslog-ng|syslog]] implementation can be provided by letting ''systemd'' forward all messages via the socket {{ic|/run/systemd/journal/syslog}}. To make the syslog daemon work with the journal, it has to bind to this socket instead of {{ic|/dev/log}} ([http://lwn.net/Articles/474968/ official announcement]). <br />
<br />
The default {{ic|journald.conf}} for forwarding to the socket is {{ic|1=ForwardToSyslog=no}} to avoid system overhead, because [[rsyslog]] or [[syslog-ng]] pull the messages from the journal by [http://lists.freedesktop.org/archives/systemd-devel/2014-August/022295.html#journald itself]. <br />
<br />
See [[Syslog-ng#Overview]] and [[Syslog-ng#syslog-ng and systemd journal]], or [[rsyslog]] respectively, for details on configuration.<br />
<br />
=== Forward journald to /dev/tty12 ===<br />
<br />
Create a [[#Editing provided units|drop-in directory]] {{ic|/etc/systemd/journald.conf.d}} and create a {{ic|fw-tty12.conf}} file in it:<br />
<br />
{{hc|1=/etc/systemd/journald.conf.d/fw-tty12.conf|2=<br />
[Journal]<br />
ForwardToConsole=yes<br />
TTYPath=/dev/tty12<br />
MaxLevelConsole=info<br />
}}<br />
<br />
Then [[restart]] systemd-journald.<br />
<br />
=== Specify a different journal to view ===<br />
There may be a need to check the logs of another system that is dead in the water, like booting from a live system to recover a production system. In such case, one can mount the disk in e.g. {{ic|/mnt}}, and specify the journal path via {{ic|-D}}/{{ic|--directory}}, like so:<br />
<br />
$ journalctl -D ''/mnt''/var/log/journal -xe<br />
<br />
== Tips and tricks ==<br />
<br />
=== Enable installed units by default ===<br />
<br />
{{Expansion|How does it work with instantiated units?}}<br />
<br />
Arch Linux ships with {{ic|/usr/lib/systemd/system-preset/99-default.preset}} containing {{ic|disable *}}. This causes ''systemctl preset'' to disable all units by default, such that when a new package is installed, the user must manually enable the unit.<br />
<br />
If this behavior is not desired, simply create a symlink from {{ic|/etc/systemd/system-preset/99-default.preset}} to {{ic|/dev/null}} in order to override the configuration file. This will cause ''systemctl preset'' to enable all units that get installed—regardless of unit type—unless specified in another file in one ''systemctl preset'''s configuration directories. User units are not affected. See the manpage for {{ic|systemd.preset}} for more information.<br />
<br />
{{Note|Enabling all units by default may cause problems with packages that contain two or more mutually exclusive units. ''systemctl preset'' is designed to be used by distributions and spins or system administrators. In the case where two conflicting units would be enabled, you should explicitly specify which one is to be disabled in a preset configuration file as specified in the manpage for {{ic|systemd.preset}}.}}<br />
<br />
=== Sandboxing application environments ===<br />
A unit file can be created as a sandbox to isolate applications and their processes within a hardened virtual environment. systemd leverages [[wikipedia:Linux_namespaces|namespaces]], white-/blacklisting of [[Capabilities]], and [[control groups]] to container processes through an extensive [https://www.freedesktop.org/software/systemd/man/systemd.exec.html execution environment configuration].<br />
<br />
The enhancement of an existing systemd unit file with application sandboxing typically requires trial-and-error tests accompanied by the generous use of {{Pkg|strace}}, [[wikipedia:Standard_streams#Standard_error_.28stderr.29|stderr]] and [https://www.freedesktop.org/software/systemd/man/journalctl.html journalctl] error logging and output facilities. You may want to first search upstream documentation for already done tests to base trials on.<br />
<br />
Some examples on how sandboxing with systemd can be deployed:<br />
* {{Ic|CapabilityBoundingSet}} defines a whitelisted set of allowed capabilities, but may also be used to blacklist a specific capability for a unit.<br />
** The {{Ic|CAP_SYS_ADM}} capability, for example, which should be one of the [https://lwn.net/Articles/486306/ goals of a secure sandbox]: {{ic|1=CapabilityBoundingSet=~ CAP_SYS_ADM}}<br />
* [[Unbound#Sandboxing]]{{Broken section link}} shows a full-scale example of systemd features for sandboxing.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Investigating systemd errors ===<br />
<br />
As an example, we will investigate an error with {{ic|systemd-modules-load}} service:<br />
<br />
'''1.''' Lets find the ''systemd'' services which fail to start at boot time:<br />
<br />
{{hc|1=$ systemctl --state=failed|2=<br />
systemd-modules-load.service loaded '''failed failed''' Load Kernel Modules}}<br />
<br />
Another way is to live log ''systemd'' messages:<br />
<br />
$ journalctl -fp err<br />
<br />
'''2.''' Ok, we found a problem with {{ic|systemd-modules-load}} service. We want to know more:<br />
{{hc|$ systemctl status systemd-modules-load|2=<br />
systemd-modules-load.service - Load Kernel Modules<br />
Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)<br />
Active: '''failed''' (Result: exit-code) since So 2013-08-25 11:48:13 CEST; 32s ago<br />
Docs: man:systemd-modules-load.service(8).<br />
man:modules-load.d(5)<br />
Process: '''15630''' ExecStart=/usr/lib/systemd/systemd-modules-load ('''code=exited, status=1/FAILURE''')<br />
}}<br />
If the {{ic|Process ID}} is not listed, just restart the failed service with {{ic|systemctl restart systemd-modules-load}}<br />
<br />
'''3.''' Now we have the process id (PID) to investigate this error in depth. Enter the following command with the current {{ic|Process ID}} (here: 15630):<br />
{{hc|1=$ journalctl _PID=15630|2=<br />
-- Logs begin at Sa 2013-05-25 10:31:12 CEST, end at So 2013-08-25 11:51:17 CEST. --<br />
Aug 25 11:48:13 mypc systemd-modules-load[15630]: '''Failed to find module 'blacklist usblp''''<br />
Aug 25 11:48:13 mypc systemd-modules-load[15630]: '''Failed to find module 'install usblp /bin/false'''' <br />
}}<br />
<br />
'''4.''' We see that some of the kernel module configs have wrong settings. Therefore we have a look at these settings in {{ic|/etc/modules-load.d/}}:<br />
{{hc|$ ls -Al /etc/modules-load.d/|<br />
...<br />
-rw-r--r-- 1 root root 79 1. Dez 2012 blacklist.conf<br />
-rw-r--r-- 1 root root 1 2. Mär 14:30 encrypt.conf<br />
-rw-r--r-- 1 root root 3 5. Dez 2012 printing.conf<br />
-rw-r--r-- 1 root root 6 14. Jul 11:01 realtek.conf<br />
-rw-r--r-- 1 root root 65 2. Jun 23:01 virtualbox.conf<br />
...<br />
}}<br />
<br />
'''5.''' The {{ic|Failed to find module 'blacklist usblp'}} error message might be related to a wrong setting inside of {{ic|blacklist.conf}}. Lets deactivate it with inserting a trailing '''#''' before each option we found via step 3:<br />
{{hc|/etc/modules-load.d/blacklist.conf|<br />
'''#''' blacklist usblp<br />
'''#''' install usblp /bin/false<br />
}}<br />
<br />
'''6.''' Now, try to start {{ic|systemd-modules-load}}:<br />
$ systemctl start systemd-modules-load<br />
If it was successful, this should not prompt anything. If you see any error, go back to step 3 and use the new PID for solving the errors left.<br />
<br />
If everything is ok, you can verify that the service was started successfully with:<br />
{{hc|$ systemctl status systemd-modules-load|2=<br />
systemd-modules-load.service - Load Kernel Modules<br />
Loaded: '''loaded''' (/usr/lib/systemd/system/systemd-modules-load.service; static)<br />
Active: '''active (exited)''' since So 2013-08-25 12:22:31 CEST; 34s ago<br />
Docs: man:systemd-modules-load.service(8)<br />
man:modules-load.d(5)<br />
Process: 19005 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/SUCCESS)<br />
Aug 25 12:22:31 mypc systemd[1]: '''Started Load Kernel Modules'''.<br />
}}<br />
<br />
Often you can solve these kind of problems like shown above. For further investigation look at [[#Diagnosing boot problems]].<br />
<br />
=== Diagnosing boot problems ===<br />
<br />
''systemd'' has several options for diagnosing problems with the boot process. See [[boot debugging]] and the [http://freedesktop.org/wiki/Software/systemd/Debugging/ systemd debugging documentation].<br />
<br />
=== Diagnosing problems with a specific service ===<br />
<br />
{{Accuracy|This may not catch all errors such as missing libraries.|User talk:Alucryd#Plex}}<br />
<br />
If some ''systemd'' service misbehaves and you want to get more information about what is going on, set the {{ic|SYSTEMD_LOG_LEVEL}} [[environment variable]] to {{ic|debug}}. For example, to run the ''systemd-networkd'' daemon in debug mode:<br />
<br />
# systemctl stop systemd-networkd<br />
# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd<br />
<br />
Or, equivalently, modify the service file temporarily for gathering enough output. For example: <br />
<br />
{{hc|/usr/lib/systemd/system/systemd-networkd.service|2=<br />
[Service]<br />
...<br />
Environment=SYSTEMD_LOG_LEVEL=debug<br />
....<br />
}}<br />
<br />
If debug information is required long-term, add the variable the [[#Editing provided units|regular]] way.<br />
<br />
=== Shutdown/reboot takes terribly long ===<br />
<br />
If the shutdown process takes a very long time (or seems to freeze) most likely a service not exiting is to blame. ''systemd'' waits some time for each service to exit before trying to kill it. To find out if you are affected, see [http://freedesktop.org/wiki/Software/systemd/Debugging/#shutdowncompleteseventually this article].<br />
<br />
=== Short lived processes do not seem to log any output ===<br />
<br />
If {{ic|journalctl -u foounit}} does not show any output for a short lived service, look at the PID instead. For example, if {{ic|systemd-modules-load.service}} fails, and {{ic|systemctl status systemd-modules-load}} shows that it ran as PID 123, then you might be able to see output in the journal for that PID, i.e. {{ic|journalctl -b _PID&#61;123}}. Metadata fields for the journal such as {{ic|_SYSTEMD_UNIT}} and {{ic|_COMM}} are collected asynchronously and rely on the {{ic|/proc}} directory for the process existing. Fixing this requires fixing the kernel to provide this data via a socket connection, similar to {{ic|SCM_CREDENTIALS}}.<br />
<br />
=== Boot time increasing over time ===<br />
<br />
After using {{ic|systemd-analyze}} a number of users have noticed that their boot time has increased significantly in comparison with what it used to be. After using {{ic|systemd-analyze blame}} [[NetworkManager]] is being reported as taking an unusually large amount of time to start. <br />
<br />
The problem for some users has been due to {{ic|/var/log/journal}} becoming too large. This may have other impacts on performance, such as for {{ic|systemctl status}} or {{ic|journalctl}}. As such the solution is to remove every file within the folder (ideally making a backup of it somewhere, at least temporarily) and then setting a journal file size limit as described in [[#Journal size limit]].<br />
<br />
=== systemd-tmpfiles-setup.service fails to start at boot ===<br />
<br />
Starting with systemd 219, {{ic|/usr/lib/tmpfiles.d/systemd.conf}} specifies ACL attributes for directories under {{ic|/var/log/journal}} and, therefore, requires ACL support to be enabled for the filesystem the journal resides on.<br />
<br />
See [[Access Control Lists#Enabling ACL]] for instructions on how to enable ACL on the filesystem that houses {{ic|/var/log/journal}}.<br />
<br />
=== systemctl enable fails for symlinks in /etc/systemd/system ===<br />
<br />
If {{ic|/etc/systemd/system/''foo''.service}} is a symlink and {{ic|systemctl enable ''foo''.service}} is run, it will fail with this error:<br />
<br />
Failed to issue method call: No such file or directory<br />
<br />
This is a [https://bugzilla.redhat.com/show_bug.cgi?id=955379#c14 design choice] of systemd. As a workaround, enabling by absolute path works:<br />
<br />
# systemctl enable ''/absolute/path/foo''.service<br />
<br />
=== systemd version printed on boot is not the same as installed package version ===<br />
<br />
You need to [[Mkinitcpio#Image_creation_and_activation|regenerate your initramfs]] and the versions should match. <br />
<br />
{{Tip|1=A pacman hook can be used to automatically regenerate the initramfs every time {{pkg|systemd}} is upgraded. See [https://bbs.archlinux.org/viewtopic.php?id=215411 this forum thread] and [[Pacman#Hooks]].}}<br />
<br />
=== Disable emergency mode on remote machine ===<br />
<br />
You may want to disable emergency mode on a remote machine, for example, a virtual machine hosted at Azure or Google Cloud. It is because if emergency mode is triggered, the machine will be blocked from connecting to network.<br />
<br />
# systemctl mask emergency.service<br />
# systemctl mask emergency.target<br />
<br />
== See also ==<br />
<br />
*[[Wikipedia:systemd|Wikipedia article]]<br />
*[http://www.freedesktop.org/wiki/Software/systemd systemd Official web site]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/Optimizations systemd optimizations]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions systemd FAQ]<br />
*[http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks systemd Tips and tricks]<br />
*[http://wiki.gentoo.org/wiki/Systemd Gentoo Wiki systemd page]<br />
*[http://fedoraproject.org/wiki/Systemd Fedora Project - About systemd]<br />
*[http://fedoraproject.org/wiki/How_to_debug_Systemd_problems Fedora Project - How to debug systemd problems]<br />
*[http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet Fedora Project - SysVinit to systemd cheatsheet]<br />
*[[gentoo:Systemd|Gentoo Wiki systemd page]]<br />
*[[debian:systemd|Debian Wiki systemd page]]<br />
*[http://0pointer.de/public/systemd-man/ Manual pages]<br />
*[http://0pointer.de/blog/projects/systemd.html Lennart's blog story], [http://0pointer.de/blog/projects/systemd-update.html update 1], [http://0pointer.de/blog/projects/systemd-update-2.html update 2], [http://0pointer.de/blog/projects/systemd-update-3.html update 3], [http://0pointer.de/blog/projects/why.html summary]<br />
*[http://0pointer.de/public/systemd-ebook-psankar.pdf systemd for Administrators (PDF)]<br />
*[https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units How To Use Systemctl to Manage Systemd Services and Units ]<br />
*[https://dvdhrm.wordpress.com/2013/08/24/session-management-on-linux/ Session management with systemd-logind]<br />
*[[Emacs#Syntax highlighting for systemd Files|Emacs Syntax highlighting for Systemd files]]<br />
*[http://www.h-online.com/open/features/Control-Centre-The-systemd-Linux-init-system-1565543.html Two] [http://www.h-online.com/open/features/Booting-up-Tools-and-tips-for-systemd-1570630.html part] introductory article in ''The H Open'' magazine.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=PulseAudio&diff=497861PulseAudio2017-11-22T14:05:41Z<p>Nodiscc: /* On the server */ move below related note</p>
<hr />
<div>[[Category:Sound]]<br />
[[cs:PulseAudio]]<br />
[[es:PulseAudio]]<br />
[[fr:PulseAudio]]<br />
[[it:PulseAudio]]<br />
[[ja:PulseAudio]]<br />
[[pt:PulseAudio]]<br />
[[ru:PulseAudio]]<br />
[[tr:PulseAudio]]<br />
[[zh-hans:PulseAudio]]<br />
{{Related articles start}}<br />
{{Related|PulseAudio/Examples}}<br />
{{Related|PulseAudio/Troubleshooting}}<br />
{{Related articles end}}<br />
[[Wikipedia:PulseAudio|PulseAudio]] PulseAudio is a general purpose sound server intended to run as a middleware between your applications and your hardware devices, either using [[ALSA]] or [[OSS]]. It also offers easy network streaming accross local devices using [[Avahi]] if enabled. While its main purpose is to ease audio configuration, its modular design allows more advanced users to configure the daemon precisely to best suit their needs.<br />
<br />
== Installation ==<br />
<br />
Install the {{Pkg|pulseaudio}} package.<br />
<br />
Some PulseAudio modules have been [https://www.archlinux.org/news/pulseaudio-split/ split] from the main package and must be installed separately if needed:<br />
<br />
* {{Pkg|pulseaudio-bluetooth}}: Bluetooth (Bluez) support<br />
* {{Pkg|pulseaudio-equalizer}}: Equalizer sink (qpaeq)<br />
* {{Pkg|pulseaudio-gconf}}: GConf support (paprefs)<br />
* {{Pkg|pulseaudio-jack}}: [[JACK]] sink, source and jackdbus detection<br />
* {{Pkg|pulseaudio-lirc}}: Infrared (LIRC) volume control<br />
* {{Pkg|pulseaudio-zeroconf}}: Zeroconf (Avahi/DNS-SD) support<br />
<br />
{{Note|Some confusion may occur between [[ALSA]] and PulseAudio. ALSA includes a Linux kernel component with sound card drivers, as well as a userspace component, {{ic|libalsa}}.[http://www.alsa-project.org/main/index.php/Download] PulseAudio builds only on the kernel component, but offers compatibility with {{ic|libalsa}} through {{Pkg|pulseaudio-alsa}}.[http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/#index14h3]}}<br />
<br />
=== Front-ends ===<br />
<br />
There are a number of front-ends available for controlling the PulseAudio daemon:<br />
<br />
* Configuration/volume control (graphical): {{Pkg|pavucontrol}}<br />
* General daemon configuration (graphical): {{Pkg|paprefs}}<br />
* Volume control via mapped keyboard keys: {{AUR|pulseaudio-ctl}}, {{AUR|pavolume-git}}<br />
* Console (CLI) mixers: {{Pkg|ponymix}} and {{Pkg|pamixer}}<br />
* Console (curses) mixer: {{AUR|pulsemixer}}<br />
* Web volume control: [https://github.com/Siot/PaWebControl PaWebControl]<br />
* System tray icon: {{AUR|pasystray}}, {{AUR|pasystray-git}}, {{AUR|pasystray-gtk2-standalone}}, and {{AUR|pasystray-gtk3-standalone}}<br />
: {{Tip|The non-standalone versions of {{ic|pasystray}} can install both GTK2 and GTK3 versions and requires choosing which during build. The standalone versions install a single version.}}<br />
* KF5 plasma applet: {{Pkg|kmix}} and {{Pkg|plasma-pa}}<br />
* Xfce4 plugin: {{Pkg|xfce4-pulseaudio-plugin}}, {{AUR|pa-applet-git}}<br />
* If you want to use Bluetooth headsets or other Bluetooth audio devices with PulseAudio, see the [[Bluetooth headset]] article.<br />
<br />
== Configuration ==<br />
<br />
=== Configuration files ===<br />
<br />
{{Merge|PulseAudio/Configuration|Configuration should stay in the main article, so the linked page should be merged here.|section=Abandoned draft}}<br />
<br />
By default, PulseAudio is configured to automatically detect all sound cards and manage them. It takes control of all detected ALSA devices and redirects all audio streams to itself, making the PulseAudio daemon the central configuration point. The daemon should work mostly out of the box, only requiring a few minor tweaks. <br />
<br />
PulseAudio will first look for configuration files in the home directory {{ic|~/.config/pulse}}, then system-wide {{ic|/etc/pulse}}.<br />
<br />
PulseAudio runs as a server daemon that can run either system-wide or on per-user basis using a client/server architecture. The daemon by itself does nothing without its '''modules''' except to provide an API and host dynamically loaded modules. The audio routing and processing tasks are all handled by various modules. You can find a detailed list of all available modules at [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/ Pulseaudio Loadable Modules]. To enable them you can just add a line {{ic|load-module <module-name-from-list>}} to {{ic|~/.config/pulse/default.pa}}.<br />
<br />
{{Tip|<br />
* It is strongly suggested not to edit system-wide configuration files, but rather edit user ones. Create the {{ic|~/.config/pulse}} directory, then copy the system configuration files into it and edit according to your need.<br />
* Make sure you keep user configuration in sync with changes to the packaged files in {{ic|/etc/pulse/}}. Otherwise, PulseAudio may refuse to start due to configuration errors.<br />
* There is usually no need to add your user to the {{ic|audio}} group, as PulseAudio uses [[udev]] and ''logind'' to give access dynamically to the currently "active" user. Exceptions would include running the machine headless so that there is no currently "active" user.}}<br />
<br />
==== daemon.conf ====<br />
<br />
Defines base settings like the default sample rates used by modules, resampling methods, realtime scheduling and various other settings related to the server process. These can not be changed at runtime without restarting the PulseAudio daemon. The defaults are sensible for most users.<br />
<br />
{{Note|PulseAudio does not perform tilde expansion on paths in this file. Use absolute paths for any files.}}<br />
<br />
{| class="wikitable"<br />
|+ Notable configuration options<br />
! Option || Description<br />
|+<br />
| system-instance || If set to {{ic|yes}}, run the daemon as a [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/ system-wide] instance. [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ Highly discouraged] as it can introduce security issues. Useful on [[Xorg multiseat|Multiseat]] systems, or headless systems that have no real local users. Defaults to {{ic|no}}.<br />
|+<br />
| avoid-resampling || With {{ic|1=avoid-resampling = yes}}, PulseAudio automatically configures the hardware to the sample rate which the application uses, if the hardware supports this sample rate (needs [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PA 11] or higher)<br />
|+<br />
| resample-method || Which resampler to use when audio with incompatible sample rates needs to be passed between modules (e.g. playback of 96kHz audio on hardware which only supports 48kHz). The available resamplers can be listed with {{ic|$ pulseaudio --dump-resample-methods}}. Choose the best tradeoff between CPU usage and audio quality for the present use-case. {{Tip|In some cases PulseAudio will generate a high CPU load. This can happen when multiple streams are resampled (individually). If this is a common use-case in a workflow, it should be considered to create an additional sink at a matching sample rate which can then be fed into the main sink, resampling only once.}}<br />
|+<br />
| flat-volumes ||{{ic|flat-volumes}} scales the device-volume with the volume of the "loudest" application. For example, raising the VoIP call volume will raise the hardware volume and adjust the music-player volume so it stays where it was, without having to lower the volume of the music-player manually. Defaults to {{ic|yes}} upstream, but to {{ic|no}} within Arch. {{Note|The default behavior upstream can sometimes be confusing and some applications, unaware of this feature, can set their volume to 100% at startup, potentially blowing your speakers or your ears. This is why Arch defaults to the classic (ALSA) behavior by setting this to {{ic|no}}.}}<br />
|+<br />
| default-fragments || Audio samples are split into multiple fragments of {{ic|default-fragment-size-msec}} each. The larger the buffer is, the less likely audio will skip when the system is overloaded. On the downside this will increase the overall latency. Increase this value if you have issues.<br />
|}<br />
<br />
==== default.pa ====<br />
<br />
This file is a startup script and is used to configure modules. It is actually parsed and read after the daemon has finished initializing and additional commands can be sent at runtime using {{ic|$ pactl}} or {{ic|$ pacmd}}. The startup script can also be provided on the command line by starting PulseAudio in a terminal using {{ic|$ pulseaudio -nC}}. This will make the daemon load the CLI module and will accept the configuration directly from the command line, and output resulting information or error messages on the same terminal. This can be useful when debugging the daemon or just to test various modules before setting them permanently on disk. The manual page is quite self-explanatory, consult {{man|5|pulse-cli-syntax}} for the details of the syntax.<br />
<br />
{{tip|<br />
* Rather than being a complete copy, {{ic|~/.config/pulse/default.pa}} can start with the line {{ic|.include /etc/pulse/default.pa}} and then just override the defaults.<br />
* Run {{ic|<nowiki>$ pacmd list-sinks|egrep -i 'index:|name:'</nowiki>}} to list available sinks. The present default sink is marked with an asterisk.<br />
* Edit {{ic|~/.config/pulse/default.pa}} to insert/alter the set-default-sink command using the sink's name as the numbering cannot be guaranteed repeatable.<br />
}}<br />
<br />
==== client.conf ====<br />
This is the configuration file read by every PulseAudio client application. It is used to configure runtime options for individual clients. It can be used to set and configure the default sink and source statically as well as allowing (or disallowing) clients to automatically start the server if not currently running.<br />
<br />
=== Configuration command ===<br />
<br />
The main command to configure a server during runtime is {{ic|$ pacmd}}. Run {{ic|$ pacmd --help}} for a list options, or just run {{ic|$ pacmd}} to enter the shell interactive mode and {{ic|Ctrl+d}} to exit. All modifications will immediately be applied.<br />
<br />
Once your new settings have been tested and meet your needs, edit the {{ic|default.pa}} accordingly to make the change persistent. See [[PulseAudio/Examples]] for some basic settings.<br />
<br />
{{Tip|leave the {{ic|load-module module-default-device-restore}} line in the {{ic|default.pa}} file untouched. It will allow you to restart the server in its default state, thus dismissing any wrong setting.}}<br />
<br />
It is important to understand that the "sources" (processes, capture devices) and "sinks" (sound cards, servers, other processes) accessible and selectable through PulseAudio depend upon the current hardware "Profile" selected. These "Profiles" are those ALSA "pcms" listed by the command {{ic|aplay -L}}, and more specifically by the command {{ic|pacmd list-cards}}, which will include a line "index:", a list beginning "profiles:", and a line "active profile: <...>" in the output, among other things. "Profiles" correspond to different card input/output configurations, notably the number of available input/output channels.<br />
<br />
The "active profile" can be set with the command {{ic|pacmd set-card-profile INDEX PROFILE}}, with ''no'' comma separating INDEX and PROFILE, where INDEX is just the number on the line "index:" and a PROFILE name is everything shown from the beginning of any line under "profile:" to just ''before'' the colon and first space, as shown by the command {{ic|pacmd list-cards}}. For instance, {{ic|pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo}}.<br />
<br />
It may be easier to select a "Profile" with a graphical tool like {{ic|pavucontrol}}, under the "Configuration" tab, or KDE System Settings, "Multimedia/Audio and Video Settings", under the "Audio Hardware Setup" tab. Each audio "Card", which are those devices listed by the command {{ic|aplay -l}}, or again by the command {{ic|pacmd list-cards}}, will have its own selectable "Profile". When a "Profile" has been selected, the then available "sources" and "sinks" can be seen by using the commands {{ic|pacmd list-sources}} and {{ic|pacmd list-sinks}}. Note that the "index" of the available sources and sinks will change each time a card profile is changed.<br />
<br />
The selected "Profile" can be an issue for some applications, especially the Adobe Flash players, typically {{ic|/usr/lib/mozilla/plugins/libflashplayer.so}} and {{ic|/usr/lib/PepperFlash/libpepflashplayer.so}}. Often, these Flash players will only work when one of the Stereo profiles is selected, and otherwise, will play video with no sound, or will simply "crash". When all else fails, you might try selecting a different profile.<br />
<br />
Of course, when configuring some variation of Surround Sound in PulseAudio, the appropriate Surround profile will have to be selected, before Surround Sound will work, or in order to do things like remap the speaker channels.<br />
<br />
== Running ==<br />
<br />
PulseAudio on Arch has {{ic|pulseaudio.socket}} enabled by default for the [[systemd/User]] instance. This means that PulseAudio will automatically start when needed.<br />
<br />
{{Note|<br />
* To disable {{ic|pulseaudio.socket}}, make sure that {{ic|$XDG_CONFIG_HOME/systemd/user/}} exists and run {{ic|systemctl --user mask pulseaudio.socket}}.<br />
* Many [[desktop environments]] autostart programs based on [[Desktop entries#Autostart|desktop files]] in the {{ic|/etc/xdg/autostart/}} directory. In this case, PulseAudio will be launched automatically regardless of the socket activation status.<br />
}}<br />
<br />
For more information, see [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Running/ PulseAudio: Running].<br />
<br />
== Back-end configuration ==<br />
<br />
=== ALSA ===<br />
<br />
If you have applications that do not support PulseAudio explicitly but rely on ALSA, these applications will try to access the sound card directly via ALSA and will therefore bypass PulseAudio. PulseAudio will thus not have access to the sound card any more. As a result, all applications relying on PulseAudio will not be working any more, leading to [[PulseAudio/Troubleshooting#The only device shown is "dummy output" or newly connected cards are not detected|this issue]]. To prevent this, you will need to install the {{Pkg|pulseaudio-alsa}} package. It contains the necessary {{ic|/etc/asound.conf}} for configuring ALSA to use PulseAudio. Also make sure that {{ic|~/.asoundrc}} does not exist, as it would override the {{ic|/etc/asound.conf}} file.<br />
<br />
Please also install {{Pkg|lib32-libpulse}} and {{Pkg|lib32-alsa-plugins}} if you run a x86_64 system and want to have sound for 32-bit [[multilib]] programs like [[Wine]] and [[Steam]].<br />
<br />
To prevent applications from using ALSA's OSS emulation and bypassing PulseAudio (thereby preventing other applications from playing sound), make sure the module {{ic|snd_pcm_oss}} is not being loaded at boot. If it is currently loaded ({{ic|<nowiki>lsmod | grep oss</nowiki>}}), disable it by executing:<br />
# rmmod snd_pcm_oss<br />
<br />
==== Expose PulseAudio sources, sinks and mixers to ALSA ====<br />
Although {{Pkg|pulseaudio-alsa}} contains the necessary configuration file to allow ALSA applications to use PulseAudio's default device, ALSA's {{ic|pulse}} plugin is more versatile than that:<br />
<br />
{{hc|~/.asoundrc (or /etc/asound.conf)|2=<br />
# Create an alsa input/output using specific PulseAudio sources/sinks<br />
pcm.pulse-example1 {<br />
type pulse<br />
device "my-combined-sink" # name of a source or sink<br />
fallback "pulse-example2" # if combined not available<br />
}<br />
<br />
pcm.pulse-example2 {<br />
type pulse<br />
device "other-sound-card" # name of a source or sink<br />
# example: device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# Create an alsa mixer using specific PulseAudio sources/sinks<br />
# these can be tested with "alsamixer -D pulse-example3"<br />
ctl.pulse-example3 {<br />
type pulse<br />
device "my-output" # name of source or sink to control<br />
<br />
# example: always control the laptop speakers:<br />
# device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
fallback "pulse-example4" # supports fallback too<br />
}<br />
<br />
# Mixers also can control a specific source and sink, separately:<br />
ctl.pulse-example4 {<br />
type pulse<br />
sink "my-usb-headphones"<br />
source "my-internal-mic"<br />
<br />
# example: output to HDMI, record using internal<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# These can override the default mixer (example: for pnmixer integration)<br />
ctl.!default {<br />
type pulse<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
}}<br />
<br />
The [http://git.alsa-project.org/?p=alsa-plugins.git;a=tree;f=pulse;hb=HEAD source code] can be read to know all available options.<br />
<br />
==== ALSA/dmix without grabbing hardware device ====<br />
<br />
{{Note|This section describes alternative configuration, which is generally '''not''' recommended.}}<br />
<br />
You may want to use ALSA directly in most of your applications while still being able to use applications which require PulseAudio at the same time. The following steps allow you to make PulseAudio use dmix instead of grabbing ALSA hardware device.<br />
<br />
* Remove package {{Pkg|pulseaudio-alsa}}, which provides compatibility layer between ALSA applications and PulseAudio. After this your ALSA apps will use ALSA directly without being hooked by Pulse.<br />
<br />
* Edit {{ic|/etc/pulse/default.pa}}.<br />
:Find and uncomment lines which load back-end drivers. Add '''device''' parameters as follows. Then find and comment lines which load autodetect modules.<br />
load-module module-alsa-sink '''device=dmix'''<br />
load-module module-alsa-source '''device=dsnoop'''<br />
# load-module module-udev-detect<br />
# load-module module-detect<br />
<br />
* ''Optional:'' If you use {{Pkg|kdemultimedia-kmix}} you may want to control ALSA volume instead of PulseAudio volume:<br />
$ echo export KMIX_PULSEAUDIO_DISABLE=1 > ~/.kde4/env/kmix_disable_pulse.sh<br />
$ chmod +x ~/.kde4/env/kmix_disable_pulse.sh<br />
<br />
* Now, reboot your computer and try running ALSA and PulseAudio applications at the same time. They both should produce sound simultaneously.<br />
:Use {{Pkg|pavucontrol}} to control PulseAudio volume if needed.<br />
<br />
=== OSS ===<br />
<br />
There are multiple ways of making OSS-only programs output to PulseAudio:<br />
<br />
==== ossp ====<br />
<br />
Install {{Pkg|ossp}} package and start {{ic|osspd.service}}.<br />
<br />
==== padsp wrapper ====<br />
<br />
Programs using OSS can work with PulseAudio by starting it with padsp (included with PulseAudio):<br />
<br />
$ padsp OSSprogram<br />
<br />
A few examples:<br />
<br />
$ padsp aumix<br />
$ padsp sox foo.wav -t ossdsp /dev/dsp<br />
<br />
You can also add a custom wrapper script like this: <br />
<br />
{{hc|/usr/local/bin/OSSProgram|<nowiki><br />
#!/bin/sh<br />
exec padsp /usr/bin/OSSprogram "$@"<br />
</nowiki>}}<br />
<br />
Make sure {{ic|/usr/local/bin}} comes before {{ic|/usr/bin}} in your '''PATH'''.<br />
<br />
=== GStreamer ===<br />
<br />
Install {{Pkg|gst-plugins-good}}, or {{AUR|gstreamer0.10-good-plugins}} if your intended program has a legacy [[GStreamer]] implementation.<br />
<br />
=== OpenAL ===<br />
<br />
OpenAL Soft should use PulseAudio by default, but can be explicitly configured to do so: {{hc|/etc/openal/alsoft.conf|2=drivers=pulse,alsa}}<br />
<br />
=== libao ===<br />
<br />
Edit the libao configuration file:<br />
{{hc|/etc/libao.conf|2=default_driver=pulse}}<br />
Be sure to remove the {{ic|1=dev=default}} option of the alsa driver or adjust it to specify a specific Pulse sink name or number. <br />
<br />
{{Note|You could possibly also keep the libao standard of outputting to the ''alsa'' driver and its default device if you install {{pkg|pulseaudio-alsa}} since the ALSA default device then '''is''' PulseAudio.}}<br />
<br />
== Equalizer ==<br />
<br />
{{Warning|The equalizer module is considered unstable and might be removed from PulseAudio. For more, see the [https://lists.freedesktop.org/archives/pulseaudio-discuss/2014-March/020174.html mailing list].}}<br />
<br />
PulseAudio has an integrated 10-band equalizer system. In order to use the equalizer do the following:<br />
<br />
Install {{Pkg|pulseaudio-equalizer}}:<br />
<br />
=== Load equalizer sink and dbus-protocol module ===<br />
<br />
$ pactl load-module module-equalizer-sink<br />
$ pactl load-module module-dbus-protocol<br />
<br />
=== GUI front-end ===<br />
<br />
run:<br />
<br />
$ qpaeq<br />
<br />
{{Note|If qpaeq has no effect, install {{pkg|pavucontrol}} and change "ALSA Playback on" to "FFT based equalizer on ..." while the media player is running.}}<br />
<br />
=== Load equalizer and dbus module on every boot ===<br />
<br />
Edit the {{ic|/etc/pulse/default.pa}} or {{ic|~/.config/pulse/default.pa}} file with your favorite editor and append the following lines:<br />
<br />
### Load the integrated PulseAudio equalizer and D-Bus module<br />
load-module module-equalizer-sink<br />
load-module module-dbus-protocol<br />
<br />
{{Note|The equalizer sink needs to be loaded after the master sink is already available.}}<br />
<br />
=== Alternative equalizers ===<br />
<br />
{{AUR|pulseaudio-equalizer-ladspa}} (based on {{Pkg|swh-plugins}}) can be used as an alternative to {{Pkg|pulseaudio-equalizer}}.<br />
<br />
{{AUR|pulseeffects}} applies peak limiting, compression, reverberation, auto volume and 15 bands equalization to Pulseaudio applications output.<br />
<br />
== Applications ==<br />
<br />
=== QEMU ===<br />
<br />
Refer to [[QEMU#Host]] for a detailed guide on how to configure pulseaudio within [[QEMU]].<br />
<br />
=== AlsaMixer.app ===<br />
<br />
Make {{AUR|alsamixer.app}} dockapp for the {{Pkg|windowmaker}} use pulseaudio, e.g.<br />
$ AlsaMixer.app --device pulse<br />
<br />
Here is a two examples where the first one is for ALSA and the other one is for pulseaudio. You can run multiple instances of it. Use the {{ic|-w}} option to choose which of the control buttons to bind to the mouse wheel.<br />
# AlsaMixer.app -3 Mic -1 Master -2 PCM --card 0 -w 1<br />
# AlsaMixer.app --device pulse -1 Capture -2 Master -w 2<br />
<br />
{{Note|It can use only those output sinks that set as default.}}<br />
<br />
=== XMMS2 ===<br />
<br />
Make it switch to pulseaudio output<br />
$ nyxmms2 server config output.plugin pulse<br />
and to alsa<br />
$ nyxmms2 server config output.plugin alsa<br />
To make xmms2 use a different output sink, e.g.<br />
$ nyxmms2 server config pulse.sink alsa_output.pci-0000_04_01.0.analog-stereo.monitor<br />
<br />
See also the official guide [https://xmms2.org/wiki/Using_the_application].<br />
<br />
=== KDE Plasma Workspaces and Qt4 ===<br />
<br />
PulseAudio will automatically be used by KDE/Qt4 applications. It is supported by default in the KDE sound mixer. For more information see the [https://www.freedesktop.org/wiki/Software/PulseAudio/Desktops/KDE/ KDE page in the PulseAudio wiki].<br />
<br />
One useful tidbit from that page is that {{ic|load-module module-device-manager}} should be loaded. This usually happens automatically at login through the script {{ic|/usr/bin/start-pulseaudio-x11}}; if you find that the module is not loaded automatically you can consider adding it manually to {{ic|/etc/pulse/default.pa}}. See [[#Switch on connect]] for possible conflicts with the {{ic|module-switch-on-connect}}.<br />
<br />
If the phonon-gstreamer backend is used for Phonon, GStreamer should also be configured as described in [[#GStreamer]].<br />
<br />
=== Audacious ===<br />
<br />
[[Audacious]] natively supports PulseAudio. In order to use it, set Audacious Preferences -> Audio -> Current output plugin to 'PulseAudio Output Plugin'.<br />
<br />
=== Music Player Daemon (MPD) ===<br />
<br />
[http://mpd.wikia.com/wiki/PulseAudio configure] [[MPD]] to use PulseAudio. See also [[MPD/Tips and Tricks#PulseAudio]].<br />
<br />
=== MPlayer ===<br />
<br />
[[MPlayer]] natively supports PulseAudio output with the {{ic|-ao pulse}} option. It can also be configured to default to PulseAudio output, in {{ic|~/.mplayer/config}} for per-user, or {{ic|/etc/mplayer/mplayer.conf}} for system-wide:<br />
{{hc|/etc/mplayer/mplayer.conf|2=ao=pulse}}<br />
<br />
=== guvcview ===<br />
<br />
{{Pkg|guvcview}} when using the PulseAudio input from a [[Webcam]] may have the audio input suspended resulting in no audio being recorded. You can check this by executing:<br />
<br />
$ pactl list sources<br />
<br />
If the audio source is "suspended" then modifying the following line in {{ic|/etc/pulse/default.pa}} and changing:<br />
<br />
load-module module-suspend-on-idle<br />
to<br />
#load-module module-suspend-on-idle<br />
<br />
And then either restarting PulseAudio or your computer will only idle the input source instead of suspending it. guvcview will then correctly record audio from the device.<br />
<br />
== Networked audio ==<br />
<br />
{{Stub|Play sound through the outputs of another computer on the network}}<br />
<br />
=== Basic setup with direct connection ===<br />
<br />
===== On the server =====<br />
<br />
Edit {{ic|~/.config/pulse/default.pa}} or {{ic|/etc/pulse/default.pa}} ( or {{ic|/etc/pulse/system.pa}} if PulseAudio is started in system mode ) and add the following line :<br />
<br />
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/16<br />
<br />
Here only client from the IPs or IPs range specified here can stream sound.<br />
<br />
To allow access from everywhere :<br />
<br />
load-module module-native-protocol-tcp auth-anonymous=true<br />
<br />
{{Note| If {{ic|auth-ip-acl}} neither {{ic|auth-anonymous}} are specified, authentification is done via {{ic|~/.pulse-cookie}} which must be the same on clients and server.}}<br />
<br />
By default PulseAudio listens on port {{ic|tcp/4713}} for incoming connections, you may need to open this port in your [[firewall]].<br />
<br />
===== On the client =====<br />
<br />
Edit {{ic|~/.config/pulse/client.conf}} or {{ic|/etc/pulse/client.conf}}, to respectively apply this directive to one user or to all, and add :<br />
<br />
default-server = ''server-address''<br />
<br />
''server-address'' can be a simple domain-name or IPv4, for more see [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/ServerStrings/ the documentation]<br />
<br />
It is also possible to set the server address in the environment variable {{ic|$PULSE_SERVER}}.<br />
<br />
== Tips and tricks ==<br />
<br />
{{Merge|PulseAudio/Examples|Same topic.}}<br />
<br />
=== Keyboard volume control ===<br />
<br />
Map the following commands to your volume keys: {{ic|XF86AudioRaiseVolume}}, {{ic|XF86AudioLowerVolume}}, {{ic|XF86AudioMute}}. See [[Extra keyboard keys in Xorg]] for details.<br />
<br />
First find out which sink corresponds to the audio output you'd like to control.<br />
To list available sinks:<br />
pactl list sinks short<br />
<br />
Suppose sink 0 is to be used, to raise the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"<br />
<br />
To lower the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 -5%"<br />
<br />
To mute/unmute the volume:<br />
pactl set-sink-mute 0 toggle<br />
<br />
To mute/unmute the microphone:<br />
pactl set-source-mute 1 toggle<br />
<br />
{{Tip|To have keyboard shortcuts operate always on the default sink, specify {{ic|@DEFAULT_SINK@}} as the sink number, for example {{ic|pactl set-sink-mute @DEFAULT_SINK@ toggle}}.}}<br />
<br />
=== Play sound from a non-interactive shell (systemd service, cron) === <br />
<br />
Set {{ic|XDG_RUNTIME_DIR}} before the command (replace {{ic|''user_id''}} with the ID of the user running PulseAudio):<br />
<br />
XDG_RUNTIME_DIR=/run/user/''user_id'' paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
Or use {{ic|machinectl}}:<br />
<br />
# machinectl shell .host --uid=''user_id'' /usr/bin/paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
=== X11 Bell Events ===<br />
<br />
To get pulseaudio to handle X11 bell events, run the following commands after the X11 session has been started:<br />
<br />
pactl upload-sample /usr/share/sounds/freedesktop/stereo/bell.oga x11-bell<br />
pactl load-module module-x11-bell sample=x11-bell display=$DISPLAY<br />
<br />
To adjust the volume of the X11 bell, run the following command:<br />
<br />
xset b 100<br />
<br />
100 is a percentage. This requires the {{Pkg|xorg-xset}} package. See [[Autostarting]] for a way to run these commands automatically when the X11 session is started.<br />
<br />
=== Switch on connect ===<br />
This is a module used to switch the output sound to the newly connected device. For example, if you plug in a USB headset, the output will be switched to that. If you unplug it, the output will be set back to the last device. This used to be quite buggy but got a lot of attention in PulseAudio 8.0 and should work quite well now.<br />
<br />
If you just want to test the module then you can load it at runtime by calling:<br />
$ pactl load-module module-switch-on-connect<br />
<br />
If you want to make the change persistent you will have to add it to your local pulseaudio settings or to /etc/pulse/default.pa (system wide effect). In either case, add this line:<br />
load-module module-switch-on-connect<br />
<br />
{{Accuracy|Editing {{ic|/usr/bin/start-pulseaudio-x11}} will not survive package upgrade. The offending module can be unloaded in the config before loading {{ic|module-switch-on-connect}}, see [[Talk:Bluetooth_headset#GDMs_pulseaudio_instance_captures_bluetooth_headset]].}}<br />
<br />
On KDE/Plasma5 you should furthermore disable module-device-manager. As soon as Plasma5 is started it loads (via start-pulseaudio-x11) the module module-device-manager for pulseaudio to manage the devices. But that module apparently conflicts with module-switch-on-connect. Therefore you should disable that module by editing /bin/start-pulseaudio-x11 and commenting the lines for KDE. Simply logout and login again and in order to renew your pulseaudio session. On connect switching should now work properly.<br />
<br />
===Script for switching analogic outputs===<br />
<br />
Some sound cards present the option of multiple analog outputs, being switchable through using Pulseaudio profiles. But switching manually can become a chore, so you can use the following commands to switch it:<br />
$ pactl set-sink-port 'number of the card' 'port'<br />
<br />
This will set the default output to whatever port you chose.<br />
Example:<br />
$ pactl set-sink-port 0 "analog-output;output-speaker" <br />
<br />
The values can be easily obtained using:<br />
$ pactl list<br />
<br />
Current output can be obtained through:<br />
$ pactl list sinks | grep "active profile"| cut -d ' ' -f 3-<br />
<br />
This process can be automated through a simple script. This script then can be given a shortcut by the user:<br />
<br />
{{hc|~/pa.sh (or anything the user wants)|<nowiki><br />
#!/bin/bash<br />
# This script uses kdialog notification to warn the user of the currently swapped to profile. User could adapt it to their needs or change it.<br />
<br />
CURRENT_PROFILE=$(pactl list sinks | grep "active profile"| cut -d ' ' -f 3-)<br />
<br />
if [ "$CURRENT_PROFILE" = "analog-output;output-speaker" ] ; then<br />
pactl set-sink-port 0 "analog-output;output-headphones-1"<br />
kdialog --title "Pulseaudio" --passivepopup "Headphone" 2 & <br />
else <br />
pactl set-sink-port 0 "analog-output;output-speaker" <br />
kdialog --title "Pulseaudio" --passivepopup "Speaker" 2 &<br />
fi<br />
</nowiki>}}<br />
<br />
This script is intended to swap between two profiles. First checking the current profile then swapping it. Users are required to change the field 'active profile' according to the language pactl reports. Users might need to change the number of the card and the output to fit their machine.<br />
<br />
== Troubleshooting ==<br />
<br />
See [[PulseAudio/Troubleshooting]].<br />
<br />
== See also ==<br />
<br />
* [http://www.alsa-project.org/main/index.php/Asoundrc .asoundrc on ALSA wiki]<br />
* [http://www.pulseaudio.org/ PulseAudio official site]<br />
* [http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/ PulseAudio FAQ]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=PulseAudio&diff=497860PulseAudio2017-11-22T14:05:11Z<p>Nodiscc: /* On the server */ add note about opening port tcp/4713</p>
<hr />
<div>[[Category:Sound]]<br />
[[cs:PulseAudio]]<br />
[[es:PulseAudio]]<br />
[[fr:PulseAudio]]<br />
[[it:PulseAudio]]<br />
[[ja:PulseAudio]]<br />
[[pt:PulseAudio]]<br />
[[ru:PulseAudio]]<br />
[[tr:PulseAudio]]<br />
[[zh-hans:PulseAudio]]<br />
{{Related articles start}}<br />
{{Related|PulseAudio/Examples}}<br />
{{Related|PulseAudio/Troubleshooting}}<br />
{{Related articles end}}<br />
[[Wikipedia:PulseAudio|PulseAudio]] PulseAudio is a general purpose sound server intended to run as a middleware between your applications and your hardware devices, either using [[ALSA]] or [[OSS]]. It also offers easy network streaming accross local devices using [[Avahi]] if enabled. While its main purpose is to ease audio configuration, its modular design allows more advanced users to configure the daemon precisely to best suit their needs.<br />
<br />
== Installation ==<br />
<br />
Install the {{Pkg|pulseaudio}} package.<br />
<br />
Some PulseAudio modules have been [https://www.archlinux.org/news/pulseaudio-split/ split] from the main package and must be installed separately if needed:<br />
<br />
* {{Pkg|pulseaudio-bluetooth}}: Bluetooth (Bluez) support<br />
* {{Pkg|pulseaudio-equalizer}}: Equalizer sink (qpaeq)<br />
* {{Pkg|pulseaudio-gconf}}: GConf support (paprefs)<br />
* {{Pkg|pulseaudio-jack}}: [[JACK]] sink, source and jackdbus detection<br />
* {{Pkg|pulseaudio-lirc}}: Infrared (LIRC) volume control<br />
* {{Pkg|pulseaudio-zeroconf}}: Zeroconf (Avahi/DNS-SD) support<br />
<br />
{{Note|Some confusion may occur between [[ALSA]] and PulseAudio. ALSA includes a Linux kernel component with sound card drivers, as well as a userspace component, {{ic|libalsa}}.[http://www.alsa-project.org/main/index.php/Download] PulseAudio builds only on the kernel component, but offers compatibility with {{ic|libalsa}} through {{Pkg|pulseaudio-alsa}}.[http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/#index14h3]}}<br />
<br />
=== Front-ends ===<br />
<br />
There are a number of front-ends available for controlling the PulseAudio daemon:<br />
<br />
* Configuration/volume control (graphical): {{Pkg|pavucontrol}}<br />
* General daemon configuration (graphical): {{Pkg|paprefs}}<br />
* Volume control via mapped keyboard keys: {{AUR|pulseaudio-ctl}}, {{AUR|pavolume-git}}<br />
* Console (CLI) mixers: {{Pkg|ponymix}} and {{Pkg|pamixer}}<br />
* Console (curses) mixer: {{AUR|pulsemixer}}<br />
* Web volume control: [https://github.com/Siot/PaWebControl PaWebControl]<br />
* System tray icon: {{AUR|pasystray}}, {{AUR|pasystray-git}}, {{AUR|pasystray-gtk2-standalone}}, and {{AUR|pasystray-gtk3-standalone}}<br />
: {{Tip|The non-standalone versions of {{ic|pasystray}} can install both GTK2 and GTK3 versions and requires choosing which during build. The standalone versions install a single version.}}<br />
* KF5 plasma applet: {{Pkg|kmix}} and {{Pkg|plasma-pa}}<br />
* Xfce4 plugin: {{Pkg|xfce4-pulseaudio-plugin}}, {{AUR|pa-applet-git}}<br />
* If you want to use Bluetooth headsets or other Bluetooth audio devices with PulseAudio, see the [[Bluetooth headset]] article.<br />
<br />
== Configuration ==<br />
<br />
=== Configuration files ===<br />
<br />
{{Merge|PulseAudio/Configuration|Configuration should stay in the main article, so the linked page should be merged here.|section=Abandoned draft}}<br />
<br />
By default, PulseAudio is configured to automatically detect all sound cards and manage them. It takes control of all detected ALSA devices and redirects all audio streams to itself, making the PulseAudio daemon the central configuration point. The daemon should work mostly out of the box, only requiring a few minor tweaks. <br />
<br />
PulseAudio will first look for configuration files in the home directory {{ic|~/.config/pulse}}, then system-wide {{ic|/etc/pulse}}.<br />
<br />
PulseAudio runs as a server daemon that can run either system-wide or on per-user basis using a client/server architecture. The daemon by itself does nothing without its '''modules''' except to provide an API and host dynamically loaded modules. The audio routing and processing tasks are all handled by various modules. You can find a detailed list of all available modules at [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/ Pulseaudio Loadable Modules]. To enable them you can just add a line {{ic|load-module <module-name-from-list>}} to {{ic|~/.config/pulse/default.pa}}.<br />
<br />
{{Tip|<br />
* It is strongly suggested not to edit system-wide configuration files, but rather edit user ones. Create the {{ic|~/.config/pulse}} directory, then copy the system configuration files into it and edit according to your need.<br />
* Make sure you keep user configuration in sync with changes to the packaged files in {{ic|/etc/pulse/}}. Otherwise, PulseAudio may refuse to start due to configuration errors.<br />
* There is usually no need to add your user to the {{ic|audio}} group, as PulseAudio uses [[udev]] and ''logind'' to give access dynamically to the currently "active" user. Exceptions would include running the machine headless so that there is no currently "active" user.}}<br />
<br />
==== daemon.conf ====<br />
<br />
Defines base settings like the default sample rates used by modules, resampling methods, realtime scheduling and various other settings related to the server process. These can not be changed at runtime without restarting the PulseAudio daemon. The defaults are sensible for most users.<br />
<br />
{{Note|PulseAudio does not perform tilde expansion on paths in this file. Use absolute paths for any files.}}<br />
<br />
{| class="wikitable"<br />
|+ Notable configuration options<br />
! Option || Description<br />
|+<br />
| system-instance || If set to {{ic|yes}}, run the daemon as a [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/ system-wide] instance. [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ Highly discouraged] as it can introduce security issues. Useful on [[Xorg multiseat|Multiseat]] systems, or headless systems that have no real local users. Defaults to {{ic|no}}.<br />
|+<br />
| avoid-resampling || With {{ic|1=avoid-resampling = yes}}, PulseAudio automatically configures the hardware to the sample rate which the application uses, if the hardware supports this sample rate (needs [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PA 11] or higher)<br />
|+<br />
| resample-method || Which resampler to use when audio with incompatible sample rates needs to be passed between modules (e.g. playback of 96kHz audio on hardware which only supports 48kHz). The available resamplers can be listed with {{ic|$ pulseaudio --dump-resample-methods}}. Choose the best tradeoff between CPU usage and audio quality for the present use-case. {{Tip|In some cases PulseAudio will generate a high CPU load. This can happen when multiple streams are resampled (individually). If this is a common use-case in a workflow, it should be considered to create an additional sink at a matching sample rate which can then be fed into the main sink, resampling only once.}}<br />
|+<br />
| flat-volumes ||{{ic|flat-volumes}} scales the device-volume with the volume of the "loudest" application. For example, raising the VoIP call volume will raise the hardware volume and adjust the music-player volume so it stays where it was, without having to lower the volume of the music-player manually. Defaults to {{ic|yes}} upstream, but to {{ic|no}} within Arch. {{Note|The default behavior upstream can sometimes be confusing and some applications, unaware of this feature, can set their volume to 100% at startup, potentially blowing your speakers or your ears. This is why Arch defaults to the classic (ALSA) behavior by setting this to {{ic|no}}.}}<br />
|+<br />
| default-fragments || Audio samples are split into multiple fragments of {{ic|default-fragment-size-msec}} each. The larger the buffer is, the less likely audio will skip when the system is overloaded. On the downside this will increase the overall latency. Increase this value if you have issues.<br />
|}<br />
<br />
==== default.pa ====<br />
<br />
This file is a startup script and is used to configure modules. It is actually parsed and read after the daemon has finished initializing and additional commands can be sent at runtime using {{ic|$ pactl}} or {{ic|$ pacmd}}. The startup script can also be provided on the command line by starting PulseAudio in a terminal using {{ic|$ pulseaudio -nC}}. This will make the daemon load the CLI module and will accept the configuration directly from the command line, and output resulting information or error messages on the same terminal. This can be useful when debugging the daemon or just to test various modules before setting them permanently on disk. The manual page is quite self-explanatory, consult {{man|5|pulse-cli-syntax}} for the details of the syntax.<br />
<br />
{{tip|<br />
* Rather than being a complete copy, {{ic|~/.config/pulse/default.pa}} can start with the line {{ic|.include /etc/pulse/default.pa}} and then just override the defaults.<br />
* Run {{ic|<nowiki>$ pacmd list-sinks|egrep -i 'index:|name:'</nowiki>}} to list available sinks. The present default sink is marked with an asterisk.<br />
* Edit {{ic|~/.config/pulse/default.pa}} to insert/alter the set-default-sink command using the sink's name as the numbering cannot be guaranteed repeatable.<br />
}}<br />
<br />
==== client.conf ====<br />
This is the configuration file read by every PulseAudio client application. It is used to configure runtime options for individual clients. It can be used to set and configure the default sink and source statically as well as allowing (or disallowing) clients to automatically start the server if not currently running.<br />
<br />
=== Configuration command ===<br />
<br />
The main command to configure a server during runtime is {{ic|$ pacmd}}. Run {{ic|$ pacmd --help}} for a list options, or just run {{ic|$ pacmd}} to enter the shell interactive mode and {{ic|Ctrl+d}} to exit. All modifications will immediately be applied.<br />
<br />
Once your new settings have been tested and meet your needs, edit the {{ic|default.pa}} accordingly to make the change persistent. See [[PulseAudio/Examples]] for some basic settings.<br />
<br />
{{Tip|leave the {{ic|load-module module-default-device-restore}} line in the {{ic|default.pa}} file untouched. It will allow you to restart the server in its default state, thus dismissing any wrong setting.}}<br />
<br />
It is important to understand that the "sources" (processes, capture devices) and "sinks" (sound cards, servers, other processes) accessible and selectable through PulseAudio depend upon the current hardware "Profile" selected. These "Profiles" are those ALSA "pcms" listed by the command {{ic|aplay -L}}, and more specifically by the command {{ic|pacmd list-cards}}, which will include a line "index:", a list beginning "profiles:", and a line "active profile: <...>" in the output, among other things. "Profiles" correspond to different card input/output configurations, notably the number of available input/output channels.<br />
<br />
The "active profile" can be set with the command {{ic|pacmd set-card-profile INDEX PROFILE}}, with ''no'' comma separating INDEX and PROFILE, where INDEX is just the number on the line "index:" and a PROFILE name is everything shown from the beginning of any line under "profile:" to just ''before'' the colon and first space, as shown by the command {{ic|pacmd list-cards}}. For instance, {{ic|pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo}}.<br />
<br />
It may be easier to select a "Profile" with a graphical tool like {{ic|pavucontrol}}, under the "Configuration" tab, or KDE System Settings, "Multimedia/Audio and Video Settings", under the "Audio Hardware Setup" tab. Each audio "Card", which are those devices listed by the command {{ic|aplay -l}}, or again by the command {{ic|pacmd list-cards}}, will have its own selectable "Profile". When a "Profile" has been selected, the then available "sources" and "sinks" can be seen by using the commands {{ic|pacmd list-sources}} and {{ic|pacmd list-sinks}}. Note that the "index" of the available sources and sinks will change each time a card profile is changed.<br />
<br />
The selected "Profile" can be an issue for some applications, especially the Adobe Flash players, typically {{ic|/usr/lib/mozilla/plugins/libflashplayer.so}} and {{ic|/usr/lib/PepperFlash/libpepflashplayer.so}}. Often, these Flash players will only work when one of the Stereo profiles is selected, and otherwise, will play video with no sound, or will simply "crash". When all else fails, you might try selecting a different profile.<br />
<br />
Of course, when configuring some variation of Surround Sound in PulseAudio, the appropriate Surround profile will have to be selected, before Surround Sound will work, or in order to do things like remap the speaker channels.<br />
<br />
== Running ==<br />
<br />
PulseAudio on Arch has {{ic|pulseaudio.socket}} enabled by default for the [[systemd/User]] instance. This means that PulseAudio will automatically start when needed.<br />
<br />
{{Note|<br />
* To disable {{ic|pulseaudio.socket}}, make sure that {{ic|$XDG_CONFIG_HOME/systemd/user/}} exists and run {{ic|systemctl --user mask pulseaudio.socket}}.<br />
* Many [[desktop environments]] autostart programs based on [[Desktop entries#Autostart|desktop files]] in the {{ic|/etc/xdg/autostart/}} directory. In this case, PulseAudio will be launched automatically regardless of the socket activation status.<br />
}}<br />
<br />
For more information, see [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Running/ PulseAudio: Running].<br />
<br />
== Back-end configuration ==<br />
<br />
=== ALSA ===<br />
<br />
If you have applications that do not support PulseAudio explicitly but rely on ALSA, these applications will try to access the sound card directly via ALSA and will therefore bypass PulseAudio. PulseAudio will thus not have access to the sound card any more. As a result, all applications relying on PulseAudio will not be working any more, leading to [[PulseAudio/Troubleshooting#The only device shown is "dummy output" or newly connected cards are not detected|this issue]]. To prevent this, you will need to install the {{Pkg|pulseaudio-alsa}} package. It contains the necessary {{ic|/etc/asound.conf}} for configuring ALSA to use PulseAudio. Also make sure that {{ic|~/.asoundrc}} does not exist, as it would override the {{ic|/etc/asound.conf}} file.<br />
<br />
Please also install {{Pkg|lib32-libpulse}} and {{Pkg|lib32-alsa-plugins}} if you run a x86_64 system and want to have sound for 32-bit [[multilib]] programs like [[Wine]] and [[Steam]].<br />
<br />
To prevent applications from using ALSA's OSS emulation and bypassing PulseAudio (thereby preventing other applications from playing sound), make sure the module {{ic|snd_pcm_oss}} is not being loaded at boot. If it is currently loaded ({{ic|<nowiki>lsmod | grep oss</nowiki>}}), disable it by executing:<br />
# rmmod snd_pcm_oss<br />
<br />
==== Expose PulseAudio sources, sinks and mixers to ALSA ====<br />
Although {{Pkg|pulseaudio-alsa}} contains the necessary configuration file to allow ALSA applications to use PulseAudio's default device, ALSA's {{ic|pulse}} plugin is more versatile than that:<br />
<br />
{{hc|~/.asoundrc (or /etc/asound.conf)|2=<br />
# Create an alsa input/output using specific PulseAudio sources/sinks<br />
pcm.pulse-example1 {<br />
type pulse<br />
device "my-combined-sink" # name of a source or sink<br />
fallback "pulse-example2" # if combined not available<br />
}<br />
<br />
pcm.pulse-example2 {<br />
type pulse<br />
device "other-sound-card" # name of a source or sink<br />
# example: device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# Create an alsa mixer using specific PulseAudio sources/sinks<br />
# these can be tested with "alsamixer -D pulse-example3"<br />
ctl.pulse-example3 {<br />
type pulse<br />
device "my-output" # name of source or sink to control<br />
<br />
# example: always control the laptop speakers:<br />
# device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
fallback "pulse-example4" # supports fallback too<br />
}<br />
<br />
# Mixers also can control a specific source and sink, separately:<br />
ctl.pulse-example4 {<br />
type pulse<br />
sink "my-usb-headphones"<br />
source "my-internal-mic"<br />
<br />
# example: output to HDMI, record using internal<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# These can override the default mixer (example: for pnmixer integration)<br />
ctl.!default {<br />
type pulse<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
}}<br />
<br />
The [http://git.alsa-project.org/?p=alsa-plugins.git;a=tree;f=pulse;hb=HEAD source code] can be read to know all available options.<br />
<br />
==== ALSA/dmix without grabbing hardware device ====<br />
<br />
{{Note|This section describes alternative configuration, which is generally '''not''' recommended.}}<br />
<br />
You may want to use ALSA directly in most of your applications while still being able to use applications which require PulseAudio at the same time. The following steps allow you to make PulseAudio use dmix instead of grabbing ALSA hardware device.<br />
<br />
* Remove package {{Pkg|pulseaudio-alsa}}, which provides compatibility layer between ALSA applications and PulseAudio. After this your ALSA apps will use ALSA directly without being hooked by Pulse.<br />
<br />
* Edit {{ic|/etc/pulse/default.pa}}.<br />
:Find and uncomment lines which load back-end drivers. Add '''device''' parameters as follows. Then find and comment lines which load autodetect modules.<br />
load-module module-alsa-sink '''device=dmix'''<br />
load-module module-alsa-source '''device=dsnoop'''<br />
# load-module module-udev-detect<br />
# load-module module-detect<br />
<br />
* ''Optional:'' If you use {{Pkg|kdemultimedia-kmix}} you may want to control ALSA volume instead of PulseAudio volume:<br />
$ echo export KMIX_PULSEAUDIO_DISABLE=1 > ~/.kde4/env/kmix_disable_pulse.sh<br />
$ chmod +x ~/.kde4/env/kmix_disable_pulse.sh<br />
<br />
* Now, reboot your computer and try running ALSA and PulseAudio applications at the same time. They both should produce sound simultaneously.<br />
:Use {{Pkg|pavucontrol}} to control PulseAudio volume if needed.<br />
<br />
=== OSS ===<br />
<br />
There are multiple ways of making OSS-only programs output to PulseAudio:<br />
<br />
==== ossp ====<br />
<br />
Install {{Pkg|ossp}} package and start {{ic|osspd.service}}.<br />
<br />
==== padsp wrapper ====<br />
<br />
Programs using OSS can work with PulseAudio by starting it with padsp (included with PulseAudio):<br />
<br />
$ padsp OSSprogram<br />
<br />
A few examples:<br />
<br />
$ padsp aumix<br />
$ padsp sox foo.wav -t ossdsp /dev/dsp<br />
<br />
You can also add a custom wrapper script like this: <br />
<br />
{{hc|/usr/local/bin/OSSProgram|<nowiki><br />
#!/bin/sh<br />
exec padsp /usr/bin/OSSprogram "$@"<br />
</nowiki>}}<br />
<br />
Make sure {{ic|/usr/local/bin}} comes before {{ic|/usr/bin}} in your '''PATH'''.<br />
<br />
=== GStreamer ===<br />
<br />
Install {{Pkg|gst-plugins-good}}, or {{AUR|gstreamer0.10-good-plugins}} if your intended program has a legacy [[GStreamer]] implementation.<br />
<br />
=== OpenAL ===<br />
<br />
OpenAL Soft should use PulseAudio by default, but can be explicitly configured to do so: {{hc|/etc/openal/alsoft.conf|2=drivers=pulse,alsa}}<br />
<br />
=== libao ===<br />
<br />
Edit the libao configuration file:<br />
{{hc|/etc/libao.conf|2=default_driver=pulse}}<br />
Be sure to remove the {{ic|1=dev=default}} option of the alsa driver or adjust it to specify a specific Pulse sink name or number. <br />
<br />
{{Note|You could possibly also keep the libao standard of outputting to the ''alsa'' driver and its default device if you install {{pkg|pulseaudio-alsa}} since the ALSA default device then '''is''' PulseAudio.}}<br />
<br />
== Equalizer ==<br />
<br />
{{Warning|The equalizer module is considered unstable and might be removed from PulseAudio. For more, see the [https://lists.freedesktop.org/archives/pulseaudio-discuss/2014-March/020174.html mailing list].}}<br />
<br />
PulseAudio has an integrated 10-band equalizer system. In order to use the equalizer do the following:<br />
<br />
Install {{Pkg|pulseaudio-equalizer}}:<br />
<br />
=== Load equalizer sink and dbus-protocol module ===<br />
<br />
$ pactl load-module module-equalizer-sink<br />
$ pactl load-module module-dbus-protocol<br />
<br />
=== GUI front-end ===<br />
<br />
run:<br />
<br />
$ qpaeq<br />
<br />
{{Note|If qpaeq has no effect, install {{pkg|pavucontrol}} and change "ALSA Playback on" to "FFT based equalizer on ..." while the media player is running.}}<br />
<br />
=== Load equalizer and dbus module on every boot ===<br />
<br />
Edit the {{ic|/etc/pulse/default.pa}} or {{ic|~/.config/pulse/default.pa}} file with your favorite editor and append the following lines:<br />
<br />
### Load the integrated PulseAudio equalizer and D-Bus module<br />
load-module module-equalizer-sink<br />
load-module module-dbus-protocol<br />
<br />
{{Note|The equalizer sink needs to be loaded after the master sink is already available.}}<br />
<br />
=== Alternative equalizers ===<br />
<br />
{{AUR|pulseaudio-equalizer-ladspa}} (based on {{Pkg|swh-plugins}}) can be used as an alternative to {{Pkg|pulseaudio-equalizer}}.<br />
<br />
{{AUR|pulseeffects}} applies peak limiting, compression, reverberation, auto volume and 15 bands equalization to Pulseaudio applications output.<br />
<br />
== Applications ==<br />
<br />
=== QEMU ===<br />
<br />
Refer to [[QEMU#Host]] for a detailed guide on how to configure pulseaudio within [[QEMU]].<br />
<br />
=== AlsaMixer.app ===<br />
<br />
Make {{AUR|alsamixer.app}} dockapp for the {{Pkg|windowmaker}} use pulseaudio, e.g.<br />
$ AlsaMixer.app --device pulse<br />
<br />
Here is a two examples where the first one is for ALSA and the other one is for pulseaudio. You can run multiple instances of it. Use the {{ic|-w}} option to choose which of the control buttons to bind to the mouse wheel.<br />
# AlsaMixer.app -3 Mic -1 Master -2 PCM --card 0 -w 1<br />
# AlsaMixer.app --device pulse -1 Capture -2 Master -w 2<br />
<br />
{{Note|It can use only those output sinks that set as default.}}<br />
<br />
=== XMMS2 ===<br />
<br />
Make it switch to pulseaudio output<br />
$ nyxmms2 server config output.plugin pulse<br />
and to alsa<br />
$ nyxmms2 server config output.plugin alsa<br />
To make xmms2 use a different output sink, e.g.<br />
$ nyxmms2 server config pulse.sink alsa_output.pci-0000_04_01.0.analog-stereo.monitor<br />
<br />
See also the official guide [https://xmms2.org/wiki/Using_the_application].<br />
<br />
=== KDE Plasma Workspaces and Qt4 ===<br />
<br />
PulseAudio will automatically be used by KDE/Qt4 applications. It is supported by default in the KDE sound mixer. For more information see the [https://www.freedesktop.org/wiki/Software/PulseAudio/Desktops/KDE/ KDE page in the PulseAudio wiki].<br />
<br />
One useful tidbit from that page is that {{ic|load-module module-device-manager}} should be loaded. This usually happens automatically at login through the script {{ic|/usr/bin/start-pulseaudio-x11}}; if you find that the module is not loaded automatically you can consider adding it manually to {{ic|/etc/pulse/default.pa}}. See [[#Switch on connect]] for possible conflicts with the {{ic|module-switch-on-connect}}.<br />
<br />
If the phonon-gstreamer backend is used for Phonon, GStreamer should also be configured as described in [[#GStreamer]].<br />
<br />
=== Audacious ===<br />
<br />
[[Audacious]] natively supports PulseAudio. In order to use it, set Audacious Preferences -> Audio -> Current output plugin to 'PulseAudio Output Plugin'.<br />
<br />
=== Music Player Daemon (MPD) ===<br />
<br />
[http://mpd.wikia.com/wiki/PulseAudio configure] [[MPD]] to use PulseAudio. See also [[MPD/Tips and Tricks#PulseAudio]].<br />
<br />
=== MPlayer ===<br />
<br />
[[MPlayer]] natively supports PulseAudio output with the {{ic|-ao pulse}} option. It can also be configured to default to PulseAudio output, in {{ic|~/.mplayer/config}} for per-user, or {{ic|/etc/mplayer/mplayer.conf}} for system-wide:<br />
{{hc|/etc/mplayer/mplayer.conf|2=ao=pulse}}<br />
<br />
=== guvcview ===<br />
<br />
{{Pkg|guvcview}} when using the PulseAudio input from a [[Webcam]] may have the audio input suspended resulting in no audio being recorded. You can check this by executing:<br />
<br />
$ pactl list sources<br />
<br />
If the audio source is "suspended" then modifying the following line in {{ic|/etc/pulse/default.pa}} and changing:<br />
<br />
load-module module-suspend-on-idle<br />
to<br />
#load-module module-suspend-on-idle<br />
<br />
And then either restarting PulseAudio or your computer will only idle the input source instead of suspending it. guvcview will then correctly record audio from the device.<br />
<br />
== Networked audio ==<br />
<br />
{{Stub|Play sound through the outputs of another computer on the network}}<br />
<br />
=== Basic setup with direct connection ===<br />
<br />
===== On the server =====<br />
<br />
Edit {{ic|~/.config/pulse/default.pa}} or {{ic|/etc/pulse/default.pa}} ( or {{ic|/etc/pulse/system.pa}} if PulseAudio is started in system mode ) and add the following line :<br />
<br />
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/16<br />
<br />
Here only client from the IPs or IPs range specified here can stream sound.<br />
<br />
To allow access from everywhere :<br />
<br />
load-module module-native-protocol-tcp auth-anonymous=true<br />
<br />
By default PulseAudio listens on port {{ic|tcp/4713}} for incoming connections, you may need to open this port in your [[firewall]].<br />
<br />
{{Note| If {{ic|auth-ip-acl}} neither {{ic|auth-anonymous}} are specified, authentification is done via {{ic|~/.pulse-cookie}} which must be the same on clients and server.}}<br />
<br />
===== On the client =====<br />
<br />
Edit {{ic|~/.config/pulse/client.conf}} or {{ic|/etc/pulse/client.conf}}, to respectively apply this directive to one user or to all, and add :<br />
<br />
default-server = ''server-address''<br />
<br />
''server-address'' can be a simple domain-name or IPv4, for more see [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/ServerStrings/ the documentation]<br />
<br />
It is also possible to set the server address in the environment variable {{ic|$PULSE_SERVER}}.<br />
<br />
== Tips and tricks ==<br />
<br />
{{Merge|PulseAudio/Examples|Same topic.}}<br />
<br />
=== Keyboard volume control ===<br />
<br />
Map the following commands to your volume keys: {{ic|XF86AudioRaiseVolume}}, {{ic|XF86AudioLowerVolume}}, {{ic|XF86AudioMute}}. See [[Extra keyboard keys in Xorg]] for details.<br />
<br />
First find out which sink corresponds to the audio output you'd like to control.<br />
To list available sinks:<br />
pactl list sinks short<br />
<br />
Suppose sink 0 is to be used, to raise the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"<br />
<br />
To lower the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 -5%"<br />
<br />
To mute/unmute the volume:<br />
pactl set-sink-mute 0 toggle<br />
<br />
To mute/unmute the microphone:<br />
pactl set-source-mute 1 toggle<br />
<br />
{{Tip|To have keyboard shortcuts operate always on the default sink, specify {{ic|@DEFAULT_SINK@}} as the sink number, for example {{ic|pactl set-sink-mute @DEFAULT_SINK@ toggle}}.}}<br />
<br />
=== Play sound from a non-interactive shell (systemd service, cron) === <br />
<br />
Set {{ic|XDG_RUNTIME_DIR}} before the command (replace {{ic|''user_id''}} with the ID of the user running PulseAudio):<br />
<br />
XDG_RUNTIME_DIR=/run/user/''user_id'' paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
Or use {{ic|machinectl}}:<br />
<br />
# machinectl shell .host --uid=''user_id'' /usr/bin/paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
=== X11 Bell Events ===<br />
<br />
To get pulseaudio to handle X11 bell events, run the following commands after the X11 session has been started:<br />
<br />
pactl upload-sample /usr/share/sounds/freedesktop/stereo/bell.oga x11-bell<br />
pactl load-module module-x11-bell sample=x11-bell display=$DISPLAY<br />
<br />
To adjust the volume of the X11 bell, run the following command:<br />
<br />
xset b 100<br />
<br />
100 is a percentage. This requires the {{Pkg|xorg-xset}} package. See [[Autostarting]] for a way to run these commands automatically when the X11 session is started.<br />
<br />
=== Switch on connect ===<br />
This is a module used to switch the output sound to the newly connected device. For example, if you plug in a USB headset, the output will be switched to that. If you unplug it, the output will be set back to the last device. This used to be quite buggy but got a lot of attention in PulseAudio 8.0 and should work quite well now.<br />
<br />
If you just want to test the module then you can load it at runtime by calling:<br />
$ pactl load-module module-switch-on-connect<br />
<br />
If you want to make the change persistent you will have to add it to your local pulseaudio settings or to /etc/pulse/default.pa (system wide effect). In either case, add this line:<br />
load-module module-switch-on-connect<br />
<br />
{{Accuracy|Editing {{ic|/usr/bin/start-pulseaudio-x11}} will not survive package upgrade. The offending module can be unloaded in the config before loading {{ic|module-switch-on-connect}}, see [[Talk:Bluetooth_headset#GDMs_pulseaudio_instance_captures_bluetooth_headset]].}}<br />
<br />
On KDE/Plasma5 you should furthermore disable module-device-manager. As soon as Plasma5 is started it loads (via start-pulseaudio-x11) the module module-device-manager for pulseaudio to manage the devices. But that module apparently conflicts with module-switch-on-connect. Therefore you should disable that module by editing /bin/start-pulseaudio-x11 and commenting the lines for KDE. Simply logout and login again and in order to renew your pulseaudio session. On connect switching should now work properly.<br />
<br />
===Script for switching analogic outputs===<br />
<br />
Some sound cards present the option of multiple analog outputs, being switchable through using Pulseaudio profiles. But switching manually can become a chore, so you can use the following commands to switch it:<br />
$ pactl set-sink-port 'number of the card' 'port'<br />
<br />
This will set the default output to whatever port you chose.<br />
Example:<br />
$ pactl set-sink-port 0 "analog-output;output-speaker" <br />
<br />
The values can be easily obtained using:<br />
$ pactl list<br />
<br />
Current output can be obtained through:<br />
$ pactl list sinks | grep "active profile"| cut -d ' ' -f 3-<br />
<br />
This process can be automated through a simple script. This script then can be given a shortcut by the user:<br />
<br />
{{hc|~/pa.sh (or anything the user wants)|<nowiki><br />
#!/bin/bash<br />
# This script uses kdialog notification to warn the user of the currently swapped to profile. User could adapt it to their needs or change it.<br />
<br />
CURRENT_PROFILE=$(pactl list sinks | grep "active profile"| cut -d ' ' -f 3-)<br />
<br />
if [ "$CURRENT_PROFILE" = "analog-output;output-speaker" ] ; then<br />
pactl set-sink-port 0 "analog-output;output-headphones-1"<br />
kdialog --title "Pulseaudio" --passivepopup "Headphone" 2 & <br />
else <br />
pactl set-sink-port 0 "analog-output;output-speaker" <br />
kdialog --title "Pulseaudio" --passivepopup "Speaker" 2 &<br />
fi<br />
</nowiki>}}<br />
<br />
This script is intended to swap between two profiles. First checking the current profile then swapping it. Users are required to change the field 'active profile' according to the language pactl reports. Users might need to change the number of the card and the output to fit their machine.<br />
<br />
== Troubleshooting ==<br />
<br />
See [[PulseAudio/Troubleshooting]].<br />
<br />
== See also ==<br />
<br />
* [http://www.alsa-project.org/main/index.php/Asoundrc .asoundrc on ALSA wiki]<br />
* [http://www.pulseaudio.org/ PulseAudio official site]<br />
* [http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/ PulseAudio FAQ]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Godot_Engine&diff=497856Godot Engine2017-11-22T13:35:06Z<p>Nodiscc: /* See also */ add link to https://github.com/Calinou/awesome-godot/</p>
<hr />
<div>[[Category:Gaming]]<br />
[[ja:Godot Engine]]<br />
{{Merge|List of games|Other engines are already listed there with the same level of detail.}}<br />
<br />
[http://godotengine.org Godot Engine] is an open-source game engine .<br />
<br />
== Installation ==<br />
=== Stable version ===<br />
You can either install the [[AUR]] package {{AUR|godot}} or download it from their [https://godotengine.org/download downloads page].<br />
<br />
=== Latest Git version ===<br />
If you want to install from the AUR, use the package {{AUR|godot-git}}. If you want to compile it manually, have a look at <br />
[http://docs.godotengine.org/en/latest/reference/compiling_for_x11.html this page] from the official wiki.<br />
<br />
=== Export templates ===<br />
To be able to export your project, you will need prebuilt binaries. If using the Git version, you will need to compile them yourself as described seperately for each platform on [http://docs.godotengine.org/en/stable/development/compiling/introduction_to_the_buildsystem.html#export-templates the wiki]. If you're using the stable version, you can install the export templates provided by Godot. Install them by clicking on the engine settings icon in the top right corner, and then press "Install export templates" and provide the downloaded templates.<br />
<br />
== See also ==<br />
* [[wikipedia:Godot (game engine)|Godot (game engine) on Wikipedia]]<br />
* [http://docs.godotengine.org/en/stable/ Godot documentation]<br />
* [https://github.com/godotengine/godot Godot source code]<br />
* [https://willnationsdev.wordpress.com/2017/07/21/godot-the-game-changer-for-gamedevs/ Godot: the Game-Changer for GameDevs] - Introduction and comparison with other engines<br />
* [https://github.com/Calinou/awesome-godot/ awesome-godot] - free/libre plugins, scripts and add-ons for Godot<br />
* [https://www.reddit.com/r/godot/ /r/godot] community on reddit.com<br />
* [https://www.youtube.com/user/Link4ns/playlists Godot Engine Resources tutorials]<br />
* [https://www.youtube.com/playlist?list=PLS9MbmO_ssyAXRl-_ktrebQBFxjSQt7UX Gamesfromscratch video tutorials]<br />
* [https://www.youtube.com/channel/UCNaPQ5uLX5iIEHUCLmfAgKg/playlists KidsCanCode video tutorials]<br />
* [https://www.youtube.com/user/ndee85/playlists Andreas Esau video tutorials]<br />
* [https://www.youtube.com/playlist?list=PL9FzW-m48fn1iR6WL4mjXtGi8P4TaPIAp Heartbeast video tutorials]<br />
* [https://www.youtube.com/channel/UCxboW7x0jZqFdvMdCFKTMsQ/playlists GDQuest video tutorials]<br />
* [https://www.youtube.com/playlist?list=PLjuYP3iuWoM2hLxtTfvsQA6FzOhRIUMOf Jose Moreno video tutorials]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=OpenVPN&diff=497727OpenVPN2017-11-21T15:49:45Z<p>Nodiscc: /* See also */ remove duplicate homepage link, add wikipedia page link</p>
<hr />
<div>[[Category:Virtual Private Network]]<br />
[[de:OpenVPN]]<br />
[[ja:OpenVPN]]<br />
[[ru:OpenVPN]]<br />
[[zh-hans:OpenVPN]]<br />
{{Related articles start}}<br />
{{Related|OpenVPN (client) in Linux containers}}<br />
{{Related|OpenVPN (server) in Linux containers}}<br />
{{Related|Easy-RSA}}<br />
{{Related articles end}}<br />
<br />
This article describes a basic installation and configuration of [http://openvpn.net OpenVPN], suitable for private and small business use. For more detailed information, please see the [https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage OpenVPN 2.4 man page] and the [http://openvpn.net/index.php/open-source/documentation OpenVPN documentation]. OpenVPN is a robust and highly flexible [[Wikipedia:VPN|VPN]] daemon. It supports [[Wikipedia:SSL/TLS|SSL/TLS]] security, [[Wikipedia:Bridging_(networking)|Ethernet bridging]], [[Wikipedia:Transmission_Control_Protocol|TCP]] or [[Wikipedia:User_Datagram_Protocol|UDP]] [[Wikipedia:Tunneling_protocol|tunnel transport]] through [[Wikipedia:Proxy_server|proxies]] or [[Wikipedia:Network address translation|NAT]]. Additionally it has support for dynamic IP addresses and [[Wikipedia:Dynamic_Host_Configuration_Protocol|DHCP]], scalability to hundreds or thousands of users, and portability to most major OS platforms.<br />
<br />
OpenVPN is tightly bound to the [http://www.openssl.org OpenSSL] library, and derives much of its crypto capabilities from it. It supports conventional encryption using a [[Wikipedia:Pre-shared_key|pre-shared secret key]] (Static Key mode) or [[Wikipedia:Public_key|public key security]] ([[Wikipedia:SSL/TLS|SSL/TLS]] mode) using client & server certificates. Additionally it supports unencrypted TCP/UDP tunnels.<br />
<br />
OpenVPN is designed to work with the [[Wikipedia:TUN/TAP|TUN/TAP]] virtual networking interface that exists on most platforms. Overall, it aims to offer many of the key features of [[Wikipedia:Ipsec|IPSec]] but with a relatively lightweight footprint. OpenVPN was written by James Yonan and is published under the [[Wikipedia:GNU General Public License|GNU General Public License (GPL)]].<br />
<br />
== Install OpenVPN ==<br />
<br />
[[Install]] the {{Pkg|openvpn}} package, which supports both server and client mode.<br />
<br />
== Kernel configuration ==<br />
OpenVPN requires TUN/TAP support, which is already configured in the default kernel. Users of custom kernel should make sure to enable the {{ic|tun}} module:<br />
<br />
{{hc|Kernel config file|<br />
Device Drivers<br />
--> Network device support<br />
[M] Universal TUN/TAP device driver support}}<br />
<br />
Read [[Kernel modules]] for more information.<br />
<br />
== Connect to a VPN provided by a third party ==<br />
<br />
To connect to a VPN service provided by a third party, most of the following can most likely be ignored, especially regarding server setup. Begin with [[#The client config profile]] and skip ahead to [[#Starting OpenVPN]] after that. One should use the provider certificates and instructions, see [[:Category:VPN providers]] for examples that can be adapted to other providers. [[OpenVPN (client) in Linux containers]] also has general applicable instructions, while it goes a step further by isolating an OpenVPN client process into a container.<br />
<br />
{{Note|Most free VPN providers will (often only) offer [[PPTP server|PPTP]], which is drastically easier to setup and configure, but is [http://poptop.sourceforge.net/dox/protocol-security.phtml not secure].}}<br />
<br />
== Create a Public Key Infrastructure (PKI) from scratch ==<br />
<br />
When setting up an OpenVPN server, users need to create a [[Wikipedia:Public key infrastructure|Public Key Infrastructure (PKI)]] which is detailed in the [[Easy-RSA]] article. Once the needed certificates, private keys, and associated files are created via following the steps in the separate article, one should have 5 files in {{ic|/etc/openvpn/server}} at this point:<br />
*{{ic|/etc/openvpn/server/ca.crt}}<br />
*{{ic|/etc/openvpn/server/dh.pem}}<br />
*{{ic|/etc/openvpn/server/servername.crt}} and {{ic|/etc/openvpn/server/servername.key}}<br />
*{{ic|/etc/openvpn/server/ta.key}}<br />
<br />
Alternatively, as of OpenVPN 2.4, one can use Easy-RSA to generate certificates and keys using elliptic curves. See the OpenVPN documentation for details.<br />
<br />
== A basic L3 IP routing configuration ==<br />
<br />
{{Note|Unless otherwise explicitly stated, the rest of this article assumes a basic L3 IP routing configuration.}}<br />
<br />
OpenVPN is an extremely versatile piece of software and many configurations are possible, in fact machines can be both "servers" and "clients", blurring the distinction between server and client.<br />
<br />
With the release of v2.4, server configurations are stored in {{ic|/etc/openvpn/server}} and client configurations are stored in {{ic|/etc/openvpn/client}} and each mode has its own respective systemd unit, namely, {{ic|openvpn-client@.service}} and {{ic|openvpn-server@.service}}.<br />
<br />
=== Example configuration ===<br />
The OpenVPN package comes with a collection of example configuration files for different purposes. The sample server and client configuration files make an ideal starting point for a basic OpenVPN setup with the following features:<br />
<br />
* Uses [[Wikipedia:Public key infrastructure|Public Key Infrastructure (PKI)]] for authentication.<br />
* Creates a VPN using a virtual TUN network interface (OSI L3 IP routing).<br />
* Listens for client connections on UDP port 1194 (OpenVPN's [[Wikipedia:Port_number|official IANA port number]]).<br />
* Distributes virtual addresses to connecting clients from the 10.8.0.0/24 subnet.<br />
<br />
For more advanced configurations, please see the official [https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage OpenVPN 2.4 man page] and the [http://openvpn.net/index.php/open-source/documentation OpenVPN documentation].<br />
<br />
=== The server configuration file ===<br />
{{Note|Note that if the server is behind a firewall or a NAT translating router, the OpenVPN port must be forward on to the server.}}<br />
<br />
Copy the example server configuration file to {{ic|/etc/openvpn/server/server.conf}}:<br />
<br />
# cp /usr/share/openvpn/examples/server.conf /etc/openvpn/server/server.conf<br />
<br />
Edit the file making a minimum of the following changes:<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
ca ca.crt<br />
cert servername.crt<br />
key servername.key # This file should be kept secret<br />
dh dh.pem<br />
.<br />
tls-crypt ta.key<br />
.<br />
user nobody<br />
group nobody<br />
}}<br />
<br />
==== Hardening the server ====<br />
If security is a priority, additional configuration is recommended including: limiting the server to use a strong cipher/auth method and limiting the newer tls ciphers. Do so by adding the following to {{ic|/etc/openvpn/server/server.conf}}:<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
.<br />
cipher AES-256-CBC<br />
auth SHA512<br />
tls-version-min 1.2<br />
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA<br />
.<br />
}}<br />
<br />
{{Note|The .ovpn client profile '''must''' contain a matching cipher and auth line to work properly (at least with the iOS and Android client)!}}<br />
<br />
==== Deviating from the standard port and/or protocol ====<br />
Some public/private network admins may not allow OpenVPN connections on its default port and/or protocol. One strategy to circumvent this is to mimic https/SSL traffic which is very likely unobstructed.<br />
<br />
To do so, configure {{ic|/etc/openvpn/server/server.conf}} as such:<br />
{{hc|/etc/openvpn/server/server.conf|<br />
.<br />
port 443<br />
proto tcp<br />
.<br />
}}<br />
<br />
{{Note|The .ovpn client profile '''must''' contain a matching port and proto line to work properly!}}<br />
<br />
===== TCP vs UDP =====<br />
There are subtle differences between TCP and UDP.<br />
<br />
TCP<br />
* So-called "stateful protocol."<br />
* High reliability due to error correction (i.e. waits for packet acknowledgment).<br />
* Potentially slower than UDP.<br />
<br />
UDP<br />
* So-called "stateless protocol."<br />
* Less reliable than TCP as no error correction is in use.<br />
* Potentially faster than TCP.<br />
<br />
{{Note|It is generally a bad idea to use TCP for VPN unless your connection to the server is very stable. High reliability sounds great in theory but any disruption (packet drop, lag spikes, etc...) to the connection will potentially snowball into a [http://sites.inka.de/bigred/devel/tcp-tcp.html TCP Meltdown][http://adsabs.harvard.edu/abs/2005SPIE.6011..138H].}}<br />
<br />
=== The client config profile ===<br />
<br />
Copy the example client configuration file to {{ic|/etc/openvpn/client/client.conf}}:<br />
<br />
# cp /usr/share/openvpn/examples/client.conf /etc/openvpn/client/client.conf<br />
<br />
Edit the following:<br />
<br />
* The {{ic|remote}} directive to reflect either the server's [[Wikipedia:Fully qualified domain name|Fully Qualified Domain Name]], hostname (as known to the client), or its IP address.<br />
* Uncomment the {{ic|user}} and {{ic|group}} directives to drop privileges.<br />
* The {{ic|ca}}, {{ic|cert}}, and {{ic|key}} parameters to reflect the path and names of the keys and certificates.<br />
* Enable the TLS HMAC handshake protection ({{ic|--tls-crypt}} or {{ic|--tls-auth}}).<br />
<br />
{{hc|/etc/openvpn/client/client.conf|<br />
remote elmer.acmecorp.org 1194<br />
.<br />
user nobody<br />
group nobody<br />
ca ca.crt<br />
cert client.crt<br />
key client.key<br />
.<br />
tls-crypt ta.key<br />
}}<br />
<br />
==== Run as unprivileged user ====<br />
<br />
Using the options {{ic|user nobody}} and {{ic|group nobody}} in the configuration file makes ''OpenVPN'' drop its {{ic|root}} privileges after establishing the connection. The downside is that upon VPN disconnect the daemon is unable to delete its set network routes again. If one wants to limit transmitting traffic without the VPN connection, then lingering routes may be considered beneficial. It can also happen, however, that the OpenVPN server pushes updates to routes at runtime of the tunnel. A client with dropped privileges will be unable to perform the update and exit with an error.<br />
<br />
As it could seem to require manual action to manage the routes, the options {{ic|user nobody}} and {{ic|group nobody}} might seem undesirable. Depending on setup, however, there are different ways to handle these situations: <br />
<br />
* For errors of the unit, a simple way is to [[edit]] it and add a {{ic|1=Restart=on-failure}} to the {{ic|[Service]}} section. Though, this alone will not delete any obsoleted routes, so it may happen that the restarted tunnel is not routed properly. <br />
* The package contains the {{ic|/usr/lib/openvpn/plugins/openvpn-plugin-down-root.so}}, which can be used to let ''openvpn'' fork a process with root privileges with the only task to execute a custom script when receiving a down signal from the main process, which is handling the tunnel with dropped privileges (see also its [https://community.openvpn.net/openvpn/browser/plugin/down-root/README?rev=d02a86d37bed69ee3fb63d08913623a86c88da15 README]).<br />
<br />
The OpenVPN HowTo's linked below go further by creating a dedicated non-privileged user/group, instead of the already existing {{ic|nobody}}. The advantage is that this avoids potential risks when sharing a user among daemons:<br />
* The [https://openvpn.net/index.php/open-source/documentation/howto.html#security OpenVPN HowTo] explains another way how to create an unprivileged user mode and wrapper script to have the routes restored automatically.<br />
* It is possible to let OpenVPN start as a non-privileged user in the first place, without ever running as root, see [https://community.openvpn.net/openvpn/wiki/UnprivilegedUser this OpenVPN wiki] (howto). The howto assumes the presence of System V init, rather than [[Systemd]] and does not cover the handling of {{ic|--up}}/{{ic|--down}} scripts - those should be handled the same way as the ''ip'' command, with additional attention to access rights.<br />
<br />
{{Note|Due to a [https://community.openvpn.net/openvpn/ticket/812 bug] in OpenVPN 2.4.0, the {{ic|persist-tun}} option mentioned in the howtos should '''not''' be used, otherwise new routes/IPs pushed on reconnect will be ignored by the client.}}<br />
{{Tip|[[#openvpn-unroot]] describes a tool to automate above setup.}}<br />
<br />
=== Converting certificates to encrypted .p12 format ===<br />
Some software will only read VPN certificates that are stored in a password-encrypted .p12 file. These can be generated with the following command:<br />
{{bc|# openssl pkcs12 -export -inkey keys/bugs.key -in keys/bugs.crt -certfile keys/ca.crt -out keys/bugs.p12}}<br />
<br />
=== Testing the OpenVPN configuration ===<br />
<br />
Run {{ic|# openvpn /etc/openvpn/server/server.conf}} on the server, and {{ic|# openvpn /etc/openvpn/client/client.conf}} on the client. Example output should be similar to the following:<br />
<br />
{{hc|# openvpn /etc/openvpn/server/server.conf|2=<br />
Wed Dec 28 14:41:26 2011 OpenVPN 2.2.1 x86_64-unknown-linux-gnu [SSL] [LZO2] [EPOLL] [eurephia] built on Aug 13 2011<br />
Wed Dec 28 14:41:26 2011 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables<br />
Wed Dec 28 14:41:26 2011 Diffie-Hellman initialized with 2048 bit key<br />
.<br />
.<br />
Wed Dec 28 14:41:54 2011 bugs/95.126.136.73:48904 MULTI: primary virtual IP for bugs/95.126.136.73:48904: 10.8.0.6<br />
Wed Dec 28 14:41:57 2011 bugs/95.126.136.73:48904 PUSH: Received control message: 'PUSH_REQUEST'<br />
Wed Dec 28 14:41:57 2011 bugs/95.126.136.73:48904 SENT CONTROL [bugs]: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)<br />
}}<br />
<br />
{{hc|# openvpn /etc/openvpn/client/client.conf|2=<br />
Wed Dec 28 14:41:50 2011 OpenVPN 2.2.1 i686-pc-linux-gnu [SSL] [LZO2] [EPOLL] [eurephia] built on Aug 13 2011<br />
Wed Dec 28 14:41:50 2011 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables<br />
Wed Dec 28 14:41:50 2011 LZO compression initialized<br />
.<br />
.<br />
Wed Dec 28 14:41:57 2011 GID set to nobody<br />
Wed Dec 28 14:41:57 2011 UID set to nobody<br />
Wed Dec 28 14:41:57 2011 Initialization Sequence Completed<br />
}}<br />
<br />
On the server, find the IP address assigned to the tunX device:<br />
<br />
{{hc|# ip addr show|2=<br />
.<br />
.<br />
40: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100<br />
link/none<br />
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0<br />
}}<br />
<br />
Here we see that the server end of the tunnel has been given the IP address 10.8.0.1.<br />
<br />
Do the same on the client:<br />
<br />
{{hc|# ip addr show|2=<br />
.<br />
.<br />
37: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100<br />
link/none<br />
inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0<br />
}}<br />
<br />
And the client side has been given the IP address 10.8.0.6.<br />
<br />
Now try pinging the interfaces.<br />
<br />
On the server:<br />
<br />
{{hc|# ping -c3 10.8.0.6|2=<br />
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.<br />
64 bytes from 10.8.0.6: icmp_req=1 ttl=64 time=238 ms<br />
64 bytes from 10.8.0.6: icmp_req=2 ttl=64 time=237 ms<br />
64 bytes from 10.8.0.6: icmp_req=3 ttl=64 time=205 ms<br />
<br />
--- 10.8.0.6 ping statistics ---<br />
3 packets transmitted, 3 received, 0% packet loss, time 2002ms<br />
rtt min/avg/max/mdev = 205.862/227.266/238.788/15.160 ms<br />
}}<br />
<br />
On the client:<br />
<br />
{{hc|# ping -c3 10.8.0.1|2=<br />
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.<br />
64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=158 ms<br />
64 bytes from 10.8.0.1: icmp_req=2 ttl=64 time=158 ms<br />
64 bytes from 10.8.0.1: icmp_req=3 ttl=64 time=157 ms<br />
<br />
--- 10.8.0.1 ping statistics ---<br />
3 packets transmitted, 3 received, 0% packet loss, time 2001ms<br />
rtt min/avg/max/mdev = 157.426/158.278/158.940/0.711 ms<br />
}}<br />
<br />
{{Note|If using a firewall, make sure that IP packets on the TUN device are not blocked.}}<br />
<br />
=== Configure the MTU with Fragment and MSS ===<br />
<br />
{{Note|If you do not configure MTU, then you will notice that small packets like ping and DNS will work, however web browsing will not work.}}<br />
<br />
Now it is time to configure the maximum segment size (MSS). In order to do this we need to discover what is the smallest MTU along the path between the client and server. In order to do this you can ping the server and disable fragmentation. Then specify the max packet size.<br />
<br />
{{Accuracy|Output is different - I do not see anything like {{ic|...Frag needed and DF set...}}}}<br />
<br />
{{hc|# ping -c5 -M do -s 1500 elmer.acmecorp.org|2=<br />
PING elmer.acmecorp.org (99.88.77.66) 1500(1528) bytes of data.<br />
From 1.2.3.4 (99.88.77.66) icmp_seq=1 Frag needed and DF set (mtu = 576)<br />
From 1.2.3.4 (99.88.77.66) icmp_seq=1 Frag needed and DF set (mtu = 576)<br />
From 1.2.3.4 (99.88.77.66) icmp_seq=1 Frag needed and DF set (mtu = 576)<br />
From 1.2.3.4 (99.88.77.66) icmp_seq=1 Frag needed and DF set (mtu = 576)<br />
From 1.2.3.4 (99.88.77.66) icmp_seq=1 Frag needed and DF set (mtu = 576)<br />
<br />
--- core.myrelay.net ping statistics ---<br />
0 packets transmitted, 0 received, +5 errors<br />
}}<br />
<br />
We received an ICMP message telling us the MTU is 576 bytes. The means we need to fragment the UDP packets smaller then 576 bytes to allow for some UDP overhead.<br />
<br />
{{hc|# ping -c5 -M do -s 548 elmer.acmecorp.org|2=<br />
PING elmer.acmecorp.org (99.88.77.66) 548(576) bytes of data.<br />
556 bytes from 99.88.77.66: icmp_seq=1 ttl=48 time=206 ms<br />
556 bytes from 99.88.77.66: icmp_seq=2 ttl=48 time=224 ms<br />
556 bytes from 99.88.77.66: icmp_seq=3 ttl=48 time=206 ms<br />
556 bytes from 99.88.77.66: icmp_seq=4 ttl=48 time=207 ms<br />
556 bytes from 99.88.77.66: icmp_seq=5 ttl=48 time=208 ms<br />
<br />
--- myrelay.net ping statistics ---<br />
5 packets transmitted, 5 received, 0% packet loss, time 4001ms<br />
rtt min/avg/max/mdev = 206.027/210.603/224.158/6.832 ms<br />
}}<br />
<br />
After some trial and error..., we discover that we need to fragment packets on 548 bytes. In order to do this we specify this fragment size in the configuration and instruct OpenVPN to fix the Maximum Segment Size (MSS).<br />
<br />
{{hc|/etc/openvpn/client/client.conf|<br />
remote elmer.acmecorp.org 1194<br />
...<br />
fragment 548<br />
mssfix 548<br />
...}}<br />
<br />
We also need to tell the server about the fragmentation. Note that "mssfix" is NOT needed in the server configuration.<br />
<br />
{{Note|Clients that do not support the 'fragment' directive (e.g. OpenELEC, [https://forums.openvpn.net/topic13201.html#p31156 iOS app]) are not able to connect to a server that uses the 'fragment' directive. To support such clients, skip this section and configure the clients with the 'mtu-test' directive described below.}}<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
...<br />
fragment 548<br />
}}<br />
<br />
{{Note|The following will add about 3 minutes to OpenVPN start time. It is advisable to configure the fragment size unless your client is a laptop that will be connecting over many different networks and the bottle neck is on the client side.}}<br />
<br />
You can also allow OpenVPN to do this for you by having OpenVPN do the ping testing every time the client connects to the VPN. Be patient, since your client may not inform you about the test being run and the connection may appear as nonfunctional until finished.<br />
{{hc|/etc/openvpn/client/client.conf|<br />
remote elmer.acmecorp.org 1194<br />
...<br />
mtu-test<br />
...<br />
}}<br />
<br />
=== IPv6 ===<br />
==== Connect to the server via IPv6 ====<br />
<br />
In order to enable Dual Stack for OpenVPN, you have to change {{ic|proto udp}} to {{ic|proto udp6}} in both server.conf and client.conf. Afterwards both IPv4 and IPv6 are enabled.<br />
<br />
==== Provide IPv6 inside the tunnel ====<br />
<br />
In order to provide IPv6 inside the tunnel, you need to have a IPv6 prefix routed to your OpenVPN server. Either set up a static route on your gateway (if you have a static block assigned), or use a DHCPv6 client to get a prefix with DHCPv6 Prefix delegation (see [[IPv6#Prefix delegation (DHCPv6-PD)|IPv6 Prefix delegation]] for details). You can also use a unique local address from the address block fc00::/7. Both methods have advantages and disadvantages:<br />
<br />
* Many ISPs only provide dynamically changing IPv6 prefixes. OpenVPN does not support prefix changes, so you need to change your server.conf every time the prefix is changed (Maybe can be automated with a script).<br />
* ULA addresses are not routed to the Internet, and setting up NAT is not as straightforward as with IPv4. So you cannot route the entire traffic over the tunnel. If you only want to connect two sites via IPv6, without the need to connect to the Internet over the tunnel, the ULA addresses may be easier to use.<br />
<br />
After you have received a prefix (a /64 is recommended), append the following to the server.conf:<br />
<br />
server-ipv6 2001:db8:0:123::/64<br />
<br />
This is the IPv6 equivalent to the default 10.8.0.0/24 network of OpenVPN and needs to be taken from the DHCPv6 client. Or use for example fd00:1234::/64.<br />
<br />
If you want to push a route to your home network (192.168.1.0/24 equivalent), also append:<br />
<br />
push "route-ipv6 2001:db8:0:abc::/64"<br />
<br />
OpenVPN does not yet include DHCPv6, so there is no method to e.g. push DNS server over IPv6. This needs to be done with IPv4. The [https://community.openvpn.net/openvpn/wiki/IPv6 OpenVPN Wiki] provides some other configuration options.<br />
<br />
== Starting OpenVPN ==<br />
<br />
=== Manual startup ===<br />
<br />
To troubleshoot a VPN connection, start the client's daemon manually with {{ic|openvpn /etc/openvpn/client/client.conf}} as root. The server can be started the same way using its own configuration file (e.g., {{ic|openvpn /etc/openvpn/server/server.conf}}).<br />
<br />
=== systemd service configuration ===<br />
<br />
To start the OpenVPN server automatically at system boot, [[enable]] {{ic|openvpn-server@''<configuration>''.service}} on the applicable machine. For a client, [[enable]] {{ic|openvpn-client@''<configuration>''.service}} instead. (Leave {{ic|.conf}} out of the {{ic|<configuration>}} string.)<br />
<br />
For example, if the client configuration file is {{ic|/etc/openvpn/client/''client''.conf}}, the service name is {{ic|openvpn-client@''client''.service}}. Or, if the server configuration file is {{ic|/etc/openvpn/server/''server''.conf}}, the service name is {{ic|openvpn-server@''server''.service}}.<br />
<br />
=== Letting NetworkManager start a connection ===<br />
<br />
On a client you might not always need to run a VPN tunnel and/or only want to establish it for a specific NetworkManager connection. This can be done by adding a script to {{ic|/etc/NetworkManager/dispatcher.d/}}. In the following example "Provider" is the name of the NetworkManager connection:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/10-openvpn|2=<br />
#!/bin/bash<br />
<br />
case "$2" in<br />
up)<br />
if [ "$CONNECTION_ID" == "Provider" ]; then<br />
systemctl start openvpn-client@''<configuration>''<br />
fi<br />
;;<br />
down)<br />
systemctl stop openvpn-client@''<configuration>''<br />
;;<br />
esac}}<br />
<br />
See [[NetworkManager#Network services with NetworkManager dispatcher]] for more details.<br />
<br />
=== Gnome configuration ===<br />
<br />
If you would like to connect a client to an OpenVPN server through Gnome's built-in network configuration do the following. First, install {{ic|networkmanager-openvpn}}. Then go to the Settings menu and choose Network. Click the plus sign to add a new connection and choose VPN. From there you can choose OpenVPN and manually enter the settings. You can also choose to import [[#The client configuration file]]{{Broken section link}}, if you have already created one. Yet, be aware NetworkManager does not show error messages for options it does not import. To connect to the VPN simply turn the connection on and check the options are applied as you configured (e.g. via {{ic|journalctl -b -u NetworkManager}}).<br />
<br />
== Routing all client traffic through the server ==<br />
<br />
{{Note|There are potential pitfalls when routing all traffic through a VPN server. Refer to [http://openvpn.net/index.php/open-source/documentation/howto.html#redirect the OpenVPN documentation on this topic] for more information.}}<br />
<br />
By default only traffic directly to and from an OpenVPN server passes through the VPN. To have all traffic, including web traffic, pass through the VPN do the following. First add the following to your server's configuration file (i.e., {{ic|/etc/openvpn/server/server.conf}}) [http://openvpn.net/index.php/open-source/documentation/howto.html#redirect]:<br />
<br />
push "redirect-gateway def1 bypass-dhcp"<br />
push "dhcp-option DNS 8.8.8.8"<br />
<br />
Change {{ic|8.8.8.8}} to your preferred DNS IP address if configured to run on the same box as the server or else leave it at 8.8.8.8 to use google's DNS.<br />
<br />
If you have problems with non responsive DNS after connecting to server, install [[BIND]] as simple DNS forwarder and push the IP address of the OpenVPN server as DNS to clients.<br />
<br />
After setting up the configuration file, one must [[Internet_sharing#Enable_packet_forwarding|enable packet forwarding]] on the server. Additionally, the server's firewall will need to be set up to allow VPN traffic through it, which is described below for both [[ufw]] and [[iptables]].<br />
<br />
To allow clients to be able to reach other (private) subnets behind the server, you may want to use the {{ic|push "route <address pool> <subnet>"}} option:<br />
<br />
push "route 172.10.142.0 255.255.255.0"<br />
push "route 172.20.142.0 255.255.255.0"<br />
<br />
=== Firewall configuration ===<br />
<br />
==== ufw ====<br />
<br />
In order to configure your ufw settings for VPN traffic first add the following to {{ic|/etc/default/ufw}}:<br />
<br />
{{hc|/etc/default/ufw|2=<br />
DEFAULT_FORWARD_POLICY="ACCEPT"<br />
}}<br />
<br />
Now change {{ic|/etc/ufw/before.rules}}, and add the following code after the header and before the "*filter" line. Do not forget to change the IP/subnet mask to match the one in {{ic|/etc/openvpn/server/server.conf}}. The adapter ID in the example is generically called {{ic|eth0}} so edit it for your system accordingly.<br />
<br />
{{hc|/etc/ufw/before.rules|2=<br />
# NAT (Network Address Translation) table rules<br />
*nat<br />
:POSTROUTING ACCEPT [0:0]<br />
<br />
# Allow traffic from clients to eth0<br />
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE<br />
<br />
# do not delete the "COMMIT" line or the NAT table rules above will not be processed<br />
COMMIT<br />
}}<br />
<br />
Open OpenVPN port 1194:<br />
<br />
# ufw allow 1194<br />
<br />
Lastly, reload UFW:<br />
<br />
# ufw reload<br />
<br />
==== iptables ====<br />
<br />
In order to allow VPN traffic through your iptables firewall of your server, first create an iptables rule for NAT forwarding [http://openvpn.net/index.php/open-source/documentation/howto.html#redirect] on the server, assuming the interface you want to forward to is named {{ic|eth0}}:<br />
<br />
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE<br />
<br />
If you have difficulty pinging the server through the VPN, you may need to add explicit rules to open up TUN/TAP interfaces to all traffic. If that is the case, do the following [https://community.openvpn.net/openvpn/wiki/255-qconnection-initiated-with-xxxxq-but-i-cannot-ping-the-server-through-the-vpn]:<br />
<br />
{{Warning|There are security implications for the following rules if you do not trust all clients which connect to the server. Refer to the [https://community.openvpn.net/openvpn/wiki/255-qconnection-initiated-with-xxxxq-but-i-cannot-ping-the-server-through-the-vpn OpenVPN documentation on this topic] for more details.}}<br />
<br />
iptables -A INPUT -i tun+ -j ACCEPT<br />
iptables -A FORWARD -i tun+ -j ACCEPT<br />
iptables -A INPUT -i tap+ -j ACCEPT<br />
iptables -A FORWARD -i tap+ -j ACCEPT<br />
<br />
Additionally be sure to accept connections from the OpenVPN port (default 1194) and through the physical interface.<br />
<br />
When you are satisfied make the changes permanent as shown in [[iptables#Configuration and usage]].<br />
<br />
If you have multiple {{ic|tun}} or {{ic|tap}} interfaces, or more than one VPN configuration, you can "pin" the name of your interface by specifying it in the OpenVPN config file, e.g. {{ic|tun22}} instead of {{ic|tun}}. This is advantageous if you have different firewall rules for different interfaces or OpenVPN configurations.<br />
<br />
=== Prevent leaks if VPN goes down ===<br />
<br />
The idea is simple: prevent all traffic through our default interface (enp3s0 for example) and only allow tun0.<br />
If the OpenVPN connection drops, your computer will lose its internet access and therefore, avoid your programs to continue connecting through an insecure network adapter.<br />
<br />
Be sure to set up a script to restart OpenVPN if it goes down if you do not want to manually restart it.<br />
<br />
==== ufw ====<br />
<br />
# Default policies<br />
ufw default deny incoming<br />
ufw default deny outgoing<br />
<br />
# Openvpn interface (adjust interface accordingly to your configuration)<br />
ufw allow in on tun0<br />
ufw allow out on tun0<br />
<br />
# Local Network (adjust ip accordingly to your configuration)<br />
ufw allow in on enp3s0 from 192.168.1.0/24<br />
ufw allow out on enp3s0 to 192.168.1.0/24<br />
<br />
# Openvpn (adjust port accordingly to your configuration)<br />
ufw allow out on enp3s0 to any port 1194<br />
ufw allow in on enp3s0 from any port 1194<br />
<br />
{{Warning| DNS '''will not''' work '''unless''' you run your own dns server like [[BIND]]<br />
Otherwise, you will need to allow dns leak. '''Be sure to trust your dns server!'''<br />
# DNS<br />
ufw allow in from any to any port 53<br />
ufw allow out from any to any port 53<br />
}}<br />
<br />
==== vpnfailsafe ====<br />
<br />
Alternatively, the [https://github.com/wknapik/vpnfailsafe vpnfailsafe] ({{AUR|vpnfailsafe-git}}) script can be used by the client to prevent DNS leaks and ensure that all traffic to the internet goes over the VPN. If the VPN tunnel goes down, internet access will be cut off, except for connections to the VPN server(s). The script contains the functionality of [[#Update resolv-conf script|update-resolv-conf]], so the two don't need to be combined.<br />
<br />
== L3 IPv4 routing==<br />
<br />
This section describes how to connect client/server LANs to each other using L3 IPv4 routing.<br />
<br />
=== Prerequisites for routing a LAN ===<br />
<br />
For a host to be able to forward IPv4 packets between the LAN and VPN, it must be able to forward the packets between its NIC and its tun/tap device. See [[Internet sharing#Enable packet forwarding]] for configuration details.<br />
<br />
==== Routing tables ====<br />
<br />
{{Accuracy|Investigate if a routing protocol like RIP, QUAGGA, BIRD, etc can be used}}<br />
<br />
By default, all IP packets on a LAN addressed to a different subnet get sent to the default gateway. If the LAN/VPN gateway is also the default gateway, there is no problem and the packets get properly forwarded. If not, the gateway has no way of knowing where to send the packets. There are a couple of solutions to this problem.<br />
<br />
* Add a static route to the default gateway routing the VPN subnet to the LAN/VPN gateway's IP address.<br />
* Add a static route on each host on the LAN that needs to send IP packets back to the VPN.<br />
* Use [[iptables]]' NAT feature on the LAN/VPN gateway to masquerade the incoming VPN IP packets.<br />
<br />
=== Connect the server LAN to a client ===<br />
<br />
The server is on a LAN using the 10.66.0.0/24 subnet. To inform the client about the available subnet, add a push directive to the server configuration file:{{hc|/etc/openvpn/server/server.conf|push "route 10.66.0.0 255.255.255.0"}}<br />
<br />
{{Note|To route more LANs from the server to the client, add more push directives to the server configuration file, but keep in mind that the server side LANs will need to know how to route to the client.<br />
}}<br />
<br />
=== Connect the client LAN to a server ===<br />
<br />
Prerequisites:<br />
<br />
* Any subnets used on the client side, must be unique and not in use on the server or by any other client. In this example we will use 192.168.4.0/24 for the clients LAN.<br />
* Each client's certificate has a unique Common Name, in this case bugs.<br />
* The server may not use the duplicate-cn directive in its config file.<br />
<br />
Create a client configuration directory on the server. It will be searched for a file named the same as the client's common name, and the directives will be applied to the client when it connects.<br />
<br />
# mkdir -p /etc/openvpn/ccd<br />
<br />
Create a file in the client configuration directory called bugs, containing the {{ic|iroute 192.168.4.0 255.255.255.0}} directive. It tells the server what subnet should be routed to the client:<br />
<br />
{{hc|/etc/openvpn/ccd/bugs|iroute 192.168.4.0 255.255.255.0}}<br />
<br />
Add the client-config-dir and the {{ic|route 192.168.4.0 255.255.255.0}} directive to the server configuration file. It tells the server what subnet should be routed from the tun device to the server LAN:<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
client-config-dir ccd<br />
route 192.168.4.0 255.255.255.0<br />
}}<br />
<br />
{{Note|To route more LANs from the client to the server, add more iroute and route directives to the appropriate configuration files, but keep in mind that the client side LANs will need to know how to route to the server.<br />
}}<br />
<br />
=== Connect both the client and server LANs ===<br />
<br />
Combine the two previous sections:<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
push "route 10.66.0.0 255.255.255.0"<br />
.<br />
.<br />
client-config-dir ccd<br />
route 192.168.4.0 255.255.255.0<br />
}}<br />
<br />
{{hc|/etc/openvpn/ccd/bugs|iroute 192.168.4.0 255.255.255.0}}<br />
<br />
{{Note|Remember to make sure that all the LANs or the needed hosts can route to all the destinations.}}<br />
<br />
=== Connect clients and client LANs ===<br />
<br />
By default clients will not see each other. To allow IP packets to flow between clients and/or client LANs, add a client-to-client directive to the server configuration file: {{hc|/etc/openvpn/server/server.conf|client-to-client}}<br />
<br />
In order for another client or client LAN to see a specific client LAN, you will need to add a push directive for each client subnet to the server configuration file (this will make the server announce the available subnet(s) to other clients):<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
client-to-client<br />
push "route 192.168.4.0 255.255.255.0"<br />
push "route 192.168.5.0 255.255.255.0"<br />
.<br />
.<br />
}}<br />
<br />
{{Note|As always, make sure that the routing is properly configured.}}<br />
<br />
== DNS ==<br />
<br />
The DNS servers used by the system are defined in {{ic|/etc/resolv.conf}}. Traditionally, this file is the responsibility of whichever program deals with connecting the system to the network (e.g. Wicd, NetworkManager, etc.). However, OpenVPN will need to modify this file if you want to be able to resolve names on the remote side. To achieve this in a sensible way, install {{pkg|openresolv}}, which makes it possible for more than one program to modify {{ic|resolv.conf}} without stepping on each-other's toes.<br />
<br />
Before continuing, test openresolv by restarting your network connection and ensuring that {{ic|resolv.conf}} states that it was generated by ''resolvconf'', and that your DNS resolution still works as before. You should not need to configure openresolv; it should be automatically detected and used by your network system.<br />
<br />
For Linux, OpenVPN can send DNS host information, but expects an external process to act on it. This can be done with the {{ic|client.up}} and {{ic|client.down}} scripts packaged in {{ic|/usr/share/openvpn/contrib/pull-resolv-conf/}}. See their comments on how to install them to {{ic|/etc/openvpn/client/}}. The following is an excerpt of a resulting client configuration using the scripts in conjunction with ''resolvconf'' and options to [[#Run as unprivileged user]]: <br />
{{hc|/etc/openvpn/client/''clienttunnel''.conf|<br />
user nobody<br />
group nobody<br />
# Optional, choose a suitable path to chroot into for your system<br />
chroot /srv<br />
script-security 2<br />
up /etc/openvpn/client/client.up <br />
plugin /usr/lib/openvpn/plugins/openvpn-plugin-down-root.so "/etc/openvpn/client/client.down tun0"}}<br />
<br />
=== Update resolv-conf script === <br />
The [https://github.com/masterkorp/openvpn-update-resolv-conf openvpn-update-resolv-conf] script is available as an alternative to packaged scripts. It needs to be saved for example at {{ic|/etc/openvpn/update-resolv-conf}} and made executable with [[chmod]]. There is also an AUR package: {{AUR|openvpn-update-resolv-conf}} which will take care of the script installation for you.<br />
<br />
Once the script is installed add lines like the following into your OpenVPN client configuration file:<br />
<br />
script-security 2<br />
up /etc/openvpn/update-resolv-conf<br />
down /etc/openvpn/update-resolv-conf<br />
<br />
{{Note|If manually placing the script on the filesystem, be sure to have {{pkg|openresolv}} installed.}}<br />
<br />
Now, when your launch your OpenVPN connection, you should find that your resolv.conf file is updated accordingly, and also returns to normal when your close the connection.<br />
<br />
{{Note|When using {{ic|openresolv}} with the ''-p'' or ''-x'' options in a script (as both the included {{ic|client.up}} and {{ic|update-resolv-conf}} scripts currently do), a DNS resolver like {{Pkg|dnsmasq}} or {{Pkg|unbound}} is required for {{ic|openresolv}} to correctly update {{ic|/etc/resolv.conf}}. In contrast, when using the default DNS resolution from {{ic|libc}} the ''-p'' and ''-x'' options must be removed in order for {{ic|/etc/resolv.conf}} to be correctly updated by {{ic|openresolv}}.<br />
For example, if the script contains a command like {{ic|resolvconf -p -a }} and the default DNS resolver from {{ic|libc}} is being used, change the command in the script to be {{ic|resolvconf -a }}.}}<br />
<br />
=== Update systemd-resolved script === <br />
<br />
Since systemd-229, [[systemd-networkd]]'s {{ic|systemd-resolved.service}} has exposed an API through DBus allowing management of DNS configuration on a per-link basis. Tools such as {{pkg|openresolv}} may not work reliably when {{ic|/etc/resolv.conf}} is managed by {{ic|systemd-resolved}}, and will not work at all if you are using {{ic|resolve}} instead of {{ic|dns}} in your {{ic|/etc/nsswitch.conf}} file. The [https://github.com/jonathanio/update-systemd-resolved update-systemd-resolved] script is another alternative and links OpenVPN with {{ic|systemd-resolved}} via DBus to update the DNS records.<br />
<br />
If you copy the script into {{ic|/etc/openvpn}} and mark as executable with [[chmod]], or install it via the AUR package ({{AUR|openvpn-update-systemd-resolved}}), you can add lines like the following into your OpenVPN client configuration file:<br />
<br />
script-security 2<br />
setenv PATH /usr/bin<br />
up /etc/openvpn/scripts/update-systemd-resolved<br />
down /etc/openvpn/scripts/update-systemd-resolved<br />
down-pre<br />
<br />
== L2 Ethernet bridging ==<br />
<br />
{{Expansion|Please add a well thought out section on L2 bridging.}}<br />
<br />
For now see: [[OpenVPN Bridge]]<br />
<br />
== Config generators ==<br />
<br />
{{Warning|Users are highly recommended to pass through the manual configuration described above to gain knowledge about options and usage before using any additional automation scripts.}}<br />
<br />
=== ovpngen ===<br />
<br />
The {{AUR|ovpngen}} package provides a simple shell script that creates OpenVPN compatible tunnel profiles in the unified file format suitable for the iOS version of OpenVPN Connect as well as for the Android app.<br />
<br />
Simply invoke the script with 5 tokens:<br />
# Server Fully Qualified Domain Name of the OpenVPN server (or IP address).<br />
# Full path to the CA cert.<br />
# Full path to the client cert.<br />
# Full path to the client private key.<br />
# Full path to the server TLS shared secret key.<br />
# Optionally a port number.<br />
# Optionally a protocol (udp or tcp).<br />
<br />
Example:<br />
# ovpngen example.org /etc/openvpn/server/ca.crt /etc/easy-rsa/pki/signed/client1.crt /etc/easy-rsa/pki/private/client1.key /etc/openvpn/server/ta.key > iphone.ovpn<br />
<br />
The resulting {{ic|iphone.ovpn}} can be edited if desired as the script does insert some commented lines.<br />
<br />
The client expects this file to be located in {{ic|/etc/openvpn/client/iphone.conf}}. Note the change in file extension from 'ovpn' to 'conf' in this case.<br />
<br />
{{Tip|If the server.conf contains a specified cipher and/or auth line, it is highly recommended that users manually edit the generated .ovpn file adding matching lines for cipher and auth. Failure to do so may results in connection errors!}}<br />
<br />
=== openvpn-unroot ===<br />
<br />
The steps necessary for OpenVPN to [[#Run as unprivileged user]], can be performed automatically using [https://github.com/wknapik/openvpn-unroot openvpn-unroot] ({{AUR|openvpn-unroot-git}}).<br />
<br />
It automates the actions required for the [https://community.openvpn.net/openvpn/wiki/UnprivilegedUser OpenVPN howto] by adapting it to systemd, and also working around the bug for persistent tun devices mentioned in the note.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Client daemon not reconnecting after suspend ===<br />
<br />
{{AUR|openvpn-reconnect}}, available on the AUR, solves this problem by sending a SIGHUP to openvpn after waking up from suspend.<br />
<br />
Alternatively, you can kill and restart OpenVPN after suspend by creating the folowing systemd service:<br />
<br />
{{hc|1=/etc/systemd/system/openvpn-reconnect.service|2=<br />
[Unit]<br />
Description=Restart OpenVPN after suspend<br />
<br />
[Service]<br />
ExecStart=/usr/bin/pkill --signal SIGHUP --exact openvpn<br />
<br />
[Install]<br />
WantedBy=sleep.target}}<br />
<br />
[[Enable]] this service for it to take effect.<br />
<br />
=== Connection drops out after some time of inactivity ===<br />
<br />
If the VPN-Connection drops some seconds after it stopped transmitting data and, even though it states it is connected, no data can be transmitted through the tunnel, try adding a {{ic|keepalive}}directive to the server's configuration:<br />
<br />
{{hc|/etc/openvpn/server/server.conf|<br />
.<br />
.<br />
keepalive 10 120<br />
.<br />
.<br />
}}<br />
<br />
In this case the server will send ping-like messages to all of its clients every 10 seconds, thus keeping the tunnel up.<br />
If the server does not receive a response within 120 seconds from a specific client, it will assume this client is down.<br />
<br />
A small ping-interval can increase the stability of the tunnel, but will also cause slightly higher traffic. Depending on your connection, also try lower intervals than 10 seconds.<br />
<br />
=== PID files not present ===<br />
<br />
The default systemd service file for openvpn-client does not have the --writepid flag enabled, despite creating /var/run/openvpn-client. If this breaks a config (such as an i3bar VPN indicator), simply change {{ic|openvpn-client@.service}} using a [[drop-in snippet]]:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf --writepid /var/run/openvpn-client/%i.pid<br />
<br />
=== Route configuration fails with systemd-networkd ===<br />
<br />
When using [[systemd-networkd]] to manage network connections and attempting to tunnel all outgoing traffic through the VPN, OpenVPN may fail to add routes. This is a result of systemd-networkd attempting to manage the tun interface before OpenVPN finishes configuring the routes. When this happens, the following message will appear in the OpenVPN log.<br />
<br />
openvpn[458]: RTNETLINK answers: Network is unreachable<br />
openvpn[458]: ERROR: Linux route add command failed: external program exited with error status: 2<br />
<br />
With systemd-233 (currently in [[testing]]), systemd-networkd can be configured to ignore the tun connections and allow OpenVPN to manage them. To do this, create the following file:<br />
<br />
{{hc|1=/etc/systemd/network/90-tun-ignore.network|2=<br />
[Match]<br />
Name=tun*<br />
<br />
[Link]<br />
Unmanaged=true<br />
}}<br />
<br />
[[Restart]] {{ic|systemd-networkd.service}} to apply the changes. To verify that the changes took effect, start the previously problematic OpenVPN connection and run {{ic|networkctl}}. The output should have a line similar to the following:<br />
<br />
7 tun0 none routable unmanaged<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:OpenVPN|Wikipedia - OpenVPN]]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Category:Encryption&diff=497726Category:Encryption2017-11-21T15:46:26Z<p>Nodiscc: fix link syntax</p>
<hr />
<div>[[Category:Security]]<br />
[[es:Category:Encryption]]<br />
[[ja:Category:暗号化]]<br />
[[pl:Category:Encryption]]<br />
[[ru:Category:Encryption]]<br />
[[zh-hans:Category:Encryption]]<br />
[[zh-hant:Category:Encryption]]<br />
The subject encryption groups articles covering basics and configuration of offline [[Wikipedia:Encryption|encryption]], such as [[Disk encryption]], and online encryption, such as [[OpenSSL]]. Note [[:Category:Secure Shell]] groups further applications.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Category:Encryption&diff=497725Category:Encryption2017-11-21T15:46:11Z<p>Nodiscc: add inline link to wikipedia 'Encryption' page</p>
<hr />
<div>[[Category:Security]]<br />
[[es:Category:Encryption]]<br />
[[ja:Category:暗号化]]<br />
[[pl:Category:Encryption]]<br />
[[ru:Category:Encryption]]<br />
[[zh-hans:Category:Encryption]]<br />
[[zh-hant:Category:Encryption]]<br />
The subject encryption groups articles covering basics and configuration of offline [[[[Wikipedia:Encryption|encryption]], such as [[Disk encryption]], and online encryption, such as [[OpenSSL]]. Note [[:Category:Secure Shell]] groups further applications.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Data-at-rest_encryption&diff=497724Data-at-rest encryption2017-11-21T15:45:48Z<p>Nodiscc: revert link addition, move it to Category:Encryption summary</p>
<hr />
<div>[[Category:Encryption]]<br />
[[Category:File systems]]<br />
[[es:Disk encryption]]<br />
[[it:Disk encryption]]<br />
[[ja:ディスク暗号化]]<br />
[[pl:Disk encryption]]<br />
{{Related articles start}}<br />
{{Related|dm-crypt}}<br />
{{Related|TrueCrypt}}<br />
{{Related|eCryptfs}}<br />
{{Related|EncFS}}<br />
{{Related|Tomb}}<br />
{{Related|tcplay}}<br />
{{Related|GnuPG}}<br />
{{Related|Self-Encrypting Drives}}<br />
{{Related articles end}}<br />
This article discusses common techniques available in Arch Linux for cryptographically protecting a logical part of a storage disk (folder, partition, whole disk, ...), so that all data that is written to it is automatically encrypted, and decrypted on-the-fly when read again.<br />
<br />
"Storage disks" in this context can be your computer's hard drive(s), external devices like USB flash drives or DVD's, as well as ''virtual'' storage disks like loop-back devices or cloud storage ''(as long as Arch Linux can address it as a block device or filesystem)''.<br />
<br />
If you already know ''what'' you want to protect and ''how'' you want to encrypt, you are encouraged to directly browse the ''related'' how-to articles listed on the right. <br />
<br />
==Why use encryption?==<br />
<br />
Disk encryption ensures that files are always stored on disk in an encrypted form. The files only become available to the operating system and applications in readable form while the system is running and unlocked by a trusted user. An unauthorized person looking at the disk contents directly, will only find garbled random-looking data instead of the actual files.<br />
<br />
For example, this can prevent unauthorized viewing of the data when the computer or hard-disk is:<br />
* located in a place to which non-trusted people might gain access while you are away<br />
* lost or stolen, as with laptops, netbooks or external storage devices<br />
* in the repair shop<br />
* discarded after its end-of-life<br />
<br />
In addition, disk encryption can also be used to add some security against unauthorized attempts to tamper with your operating system – for example, the installation of keyloggers or Trojan horses by attackers who can gain physical access to the system while you are away.<br />
<br />
{{Warning|Disk encryption does '''not''' protect your data from all threats.}}<br />
You will still be vulnerable to:<br />
* Attackers who can break into your system (e.g. over the Internet) while it is running and after you have already unlocked and mounted the encrypted parts of the disk.<br />
* Attackers who are able to gain physical access to the computer while it is running (even if you use a screenlocker), or very shortly ''after'' it was running, if they have the resources to perform a [[Wikipedia:Cold boot attack|cold boot attack]].<br />
* A government entity, which not only has the resources to easily pull off the above attacks, but also may simply force you to give up your keys/passphrases using various techniques of [[Wikipedia:Coercion|coercion]]. In most non-democratic countries around the world, as well as in the USA and UK, it may be legal for law enforcement agencies to do so if they have suspicions that you might be hiding something of interest.<br />
<br />
A very strong disk encryption setup (e.g. full system encryption with authenticity checking and no plaintext boot partition) is required to stand a chance against professional attackers who are able to tamper with your system ''before'' you use it. And even then it is doubtful whether it can really prevent all types of tampering (e.g. hardware keyloggers). The best remedy might be [[Wikipedia:Hardware-based full disk encryption|hardware-based full disk encryption]] and [[Wikipedia:Trusted_Computing|Trusted Computing]].<br />
<br />
{{Warning|Disk encryption also will not protect you against someone simply [[Securely wipe disk|wiping your disk]]. [[Backup programs|Regular backups]] are recommended to keep your data safe.}}<br />
<br />
== Data encryption vs system encryption ==<br />
<br />
; Data encryption<br />
: Defined as encrypting only the user's data itself (often located within the {{ic|/home}} directory, or on removable media like a data DVD), data encryption is the simplest and least intrusive use of disk encryption, but has some significant drawbacks.<br />
: In modern computing systems, there are many background processes that may cache/store information about user data or parts of the data itself in non-encrypted areas of the hard drive, like:<br />
<br />
:* swap partitions<br />
:** (potential remedies: disable swapping, or use [[encrypted swap]] as well)<br />
:* {{ic|/tmp}} (temporary files created by user applications)<br />
:** (potential remedies: avoid such applications; mount {{ic|/tmp}} inside a [[ramdisk]])<br />
:* {{ic|/var}} (log files and databases and such; for example, mlocate stores an index of all file names in {{ic|/var/lib/mlocate/mlocate.db}})<br />
<br />
:In addition, mere data encryption will leave you vulnerable to offline system tampering attacks (e.g. someone installing a hidden program that [[Wikipedia:Keystroke_logging|records]] the passphrase you use to unlock the encrypted data, or waits for you to unlock it and then secretly copies/sends some of the data to a location where the attacker can retrieve it).<br />
<br />
; System encryption<br />
: Defined as the encryption of the operating system ''and'' user data, system encryption helps to address some of the inadequacies of data encryption.<br />
<br />
: Benefits:<br />
:* prevents unauthorized physical access to (and tampering with) operating system files ''(but see warning above)''<br />
:* prevents unauthorized physical access to private data that may be cached by the system<br />
: Disadvantages:<br />
:* unlocking of the encrypted parts of the disk can no longer happen during or after user login; it must now happen at boot time<br />
<br />
In practice, there is not always a clear line between data encryption and system encryption, and many different compromises and customized setups are possible.<br />
<br />
In any case, disk encryption should only be viewed as an adjunct to the existing security mechanisms of the operating system - focused on securing offline physical access, while relying on ''other'' parts of the system to provide things like network security and user-based access control.<br />
<br />
See also [[Wikipedia:Disk encryption]].<br />
<br />
==Available methods==<br />
<br />
All disk encryption methods operate in such a way that even though the disk actually holds encrypted data, the operating system and applications "see" it as the corresponding normal readable data as long as the cryptographic container (i.e. the logical part of the disk that holds the encrypted data) has been "unlocked" and mounted.<br />
<br />
For this to happen, some "secret information" (usually in the form of a keyfile and/or passphrase) needs to be supplied by the user, from which the actual encryption key can be derived (and stored in the kernel keyring for the duration of the session).<br />
<br />
If you are completely unfamiliar with this sort of operation, please also read the [[#How the encryption works]] section below.<br />
<br />
The available disk encryption methods can be separated into two types by their layer of operation:<br />
<br />
===Stacked filesystem encryption===<br />
<br />
Stacked filesystem encryption solutions are implemented as a layer that stacks on top of an existing filesystem, causing all files written to an encryption-enabled folder to be encrypted on-the-fly before the underlying filesystem writes them to disk, and decrypted whenever the filesystem reads them from disk. This way, the files are stored in the host filesystem in encrypted form (meaning that their contents, and usually also their file/folder names, are replaced by random-looking data of roughly the same length), but other than that they still exist in that filesystem as they would without encryption, as normal files / symlinks / hardlinks / etc.<br />
<br />
The way it is implemented, is that to unlock the folder storing the raw encrypted files in the host filesystem ("lower directory"), it is mounted (using a special stacked pseudo-filesystem) onto itself or optionally a different location ("upper directory"), where the same files then appear in readable form - until it is unmounted again, or the system is turned off.<br />
<br />
Available solutions in this category are [[eCryptfs]] and [[EncFS]].<br />
<br />
===Block device encryption===<br />
<br />
Block device encryption methods, on the other hand, operate ''below'' the filesystem layer and make sure that everything written to a certain block device (i.e. a whole disk, or a partition, or a file acting as a virtual loop-back device) is encrypted. This means that while the block device is offline, its whole content looks like a large blob of random data, with no way of determining what kind of filesystem and data it contains. Accessing the data happens, again, by mounting the protected container (in this case the block device) to an arbitrary location in a special way.<br />
<br />
The following "block device encryption" solutions are available in Arch Linux:<br />
<br />
;loop-AES: loop-AES is a descendant of cryptoloop and is a secure and fast solution to system encryption. However, loop-AES is considered less user-friendly than other options as it requires non-standard kernel support. <br />
<br />
;dm-crypt: [[dm-crypt]] is the standard device-mapper encryption functionality provided by the Linux kernel. It can be used directly by those who like to have full control over all aspects of partition and key management. The management of dm-crypt is done with the {{Pkg|cryptsetup}} userspace utility. It can be used for the following types of block-device encryption: ''LUKS'' (default), ''plain'', and has limited features for ''loopAES'' and ''Truecrypt'' devices. <br />
:* LUKS, used by default, is an additional convenience layer which stores all of the needed setup information for dm-crypt on the disk itself and abstracts partition and key management in an attempt to improve ease of use and cryptographic security. <br />
:* plain dm-crypt mode, being the original kernel functionality, does not employ the convenience layer. It is more difficult to apply the same cryptographic strength with it. When doing so, longer keys (passphrases or keyfiles) are the result. It has, however, other advantages, described in the following [[#Practical implications|comparison table]]. <br />
<br />
;TrueCrypt: Note that the developers of [[TrueCrypt]] ended support for it in May 2014. <br />
<br />
For practical implications of the chosen layer of operation, see the [[#Practical implications|comparison table]] below, as well as the general write up for [http://ksouedu.com/doc/ecryptfs-utils/ecryptfs-faq.html#compare eCryptfs]. See [[:Category:Encryption]] for the available content of the methods compared below, as well as other tools not included in the table.<br />
<br />
===Comparison table===<br />
<br />
The column "dm-crypt +/- LUKS" denotes features of dm-crypt for both LUKS ("+") and plain ("-") encryption modes. If a specific feature requires using LUKS, this is indicated by "(with LUKS)". Likewise "(without LUKS)" indicates usage of LUKS is counter-productive to achieve the feature and plain mode should be used.<br />
<br />
{| class="wikitable" style="text-align:center; cell-padding:100px; "<br />
! style="text-align:left; background:#ddd"|<br />
=====Summary=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Type<br />
| block device encryption<br />
| block device encryption<br />
| block device encryption<br />
| stacked filesystem encryption<br />
| stacked filesystem encryption<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Main selling points<br />
| longest-existing one; possibly the fastest; works on legacy systems<br />
| de-facto standard for block device encryption on Linux; very flexible<br />
| very portable, well-polished, self-contained solution<br />
| slightly faster than EncFS; individual encrypted files portable between systems<br />
| easiest one to use; supports non-root administration<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Availability in Arch Linux<br />
| must manually compile custom kernel<br />
| ''kernel modules:'' already shipped with default kernel; ''tools:'' {{Pkg|device-mapper}}, {{Pkg|cryptsetup}} [core]<br />
| [https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/truecrypt&id=efe03070990f9e3554508bd982b1bd5a654aa095 truecrypt 7.1a-2] [extra] (read-only features in later versions)<br />
| ''kernel module:'' already shipped with default kernel; ''tools:'' {{Pkg|ecryptfs-utils}} [community]<br />
| {{Pkg|encfs}} [community]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | License<br />
| GPL<br />
| GPL<br />
| custom<br>[[#See also|[1]]]<br />
| GPL<br />
| GPL<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Basic classification=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypts<br />
| whole block devices<br />
| whole block devices<br />
| whole block devices<br />
| files<br />
| files<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Container for encrypted data may be...<br />
| a disk or disk partition / a file acting as a virtual partition<br />
| a disk or disk partition / a file acting as a virtual partition<br />
| a disk or disk partition / a file acting as a virtual partition<br />
| a directory in an existing file system<br />
| a directory in an existing file system<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Relation to filesystem<br />
| operates below filesystem layer: does not care whether the content of the encrypted block device is a filesystem, a partition table, a LVM setup, or anything else<br />
| operates below filesystem layer: does not care whether the content of the encrypted block device is a filesystem, a partition table, a LVM setup, or anything else<br />
| operates below filesystem layer: does not care whether the content of the encrypted block device is a filesystem, a partition table, a LVM setup, or anything else<br />
| adds an additional layer to an existing filesystem, to automatically encrypt/decrypt files whenever they are written/read<br />
| adds an additional layer to an existing filesystem, to automatically encrypt/decrypt files whenever they are written/read<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encryption implemented in...<br />
| kernelspace<br />
| kernelspace<br />
| kernelspace<br />
| kernelspace<br />
| userspace (using FUSE)<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Cryptographic metadata stored in...<br />
| ?<br />
| with LUKS: LUKS Header <br />
| begin/end of (decrypted) device ([http://www.truecrypt.org/docs/volume-format-specification format])<br />
| header of each encrypted file<br />
| control file at the top level of each EncFs container<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Wrapped encryption key stored in...<br />
| ?<br />
| with LUKS: LUKS header <br />
| begin/end of (decrypted) device ([http://www.truecrypt.org/docs/volume-format-specification format])<br />
| key file that can be stored anywhere<br />
| key file that can be stored anywhere<br />
[https://github.com/rfjakob/encfs/blob/next/encfs/encfs.pod#environment-variables][https://github.com/vgough/encfs/issues/48#issuecomment-69301831]<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Practical implications=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | File metadata (number of files, dir structure, file sizes, permissions, mtimes, etc.) is encrypted<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br>(file and dir names can be encrypted though)<br />
| <span style="color:#f00; font-size:2em">✖</span><br>(file and dir names can be encrypted though)<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used to encrypt whole hard drives (including partition tables)<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used to encrypt swap space<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used without pre-allocating a fixed amount of space for the encrypted data container<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used to protect existing filesystems without block device access, e.g. NFS or Samba shares, cloud storage, etc.<br />
| <span style="color:#f00; font-size:2em">✖</span><br>[[#See also|[2]]]<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Allows offline file-based backups of encrypted files<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Usability features=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for automounting on login<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for automatic unmounting in case of inactivity<br />
| ?<br />
| ?<br />
| ?<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Non-root users can create/destroy containers for encrypted data<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| limited<br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Provides a GUI<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
[http://www.libertyzero.com/GEncfsM/][https://launchpad.net/gencfsm]<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Security features=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
<br />
! style="text-align:left; font-weight:normal; background:#eee" | Supported ciphers<br />
| AES<br />
| AES, Anubis, CAST5/6, Twofish, Serpent, Camellia, Blowfish,… (every cipher the kernel Crypto API offers)<br />
| AES, Twofish, Serpent<br />
| AES, Blowfish, Twofish...<br />
| AES, Blowfish, Twofish, and any other ciphers available on the system<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for salting<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with LUKS)<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for cascading multiple ciphers<br />
| ?<br />
| Not in one device, but blockdevices can be cascaded<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for key-slot diffusion<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with LUKS)<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Protection against key scrubbing<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br>(without LUKS)<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for multiple (independently revocable) keys for the same encrypted data<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with LUKS)<br />
| ?<br />
| ?<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
<br />
=====Performance features=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Multithreading support<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[8]]]<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Hardware-accelerated encryption support<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[13]]]<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Block device encryption specific=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | <br />
! style="background:#ddd" | <br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for (manually) resizing the encrypted block device in-place<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
! style="background:#ddd" | <br />
! style="background:#ddd" | <br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Stacked filesystem encryption specific=====<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Supported file systems<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| ext3, ext4, xfs (with caveats), jfs, nfs...<br />
| ext3, ext4, xfs (with caveats), jfs, nfs, cifs...<br />
[https://github.com/vgough/encfs]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Ability to encrypt filenames<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Ability to ''not'' encrypt filenames<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Optimized handling of sparse files<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Compatibility & prevalence=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Supported Linux kernel versions<br />
| 2.0 or newer<br />
| CBC-mode since 2.6.4, ESSIV 2.6.10, LRW 2.6.20, XTS 2.6.24<br />
| ?<br />
| ?<br />
| 2.4 or newer<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypted data can also be accessed from Windows<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with [[#See also|[3]]], [[#See also|[14]]])<br />
|?<br>(with [[#See also|[4]]], [[#See also|[14]]])<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| ?<br>[[#See also|[9]]]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypted data can also be accessed from Mac OS X<br />
| ?<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[5]]]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypted data can also be accessed from FreeBSD<br />
| ?<br />
| ?<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[6]]]<br />
|-<br />
<br />
! style="text-align:left; font-weight:normal; background:#eee" | Used by<br />
| ?<br />
| Debian/Ubuntu installer (system encryption)<br>Fedora installer <br />
| ?<br />
| Ubuntu installer (home dir encryption)<br>Chromium OS (encryption of cached user data [[#See also|[7]]])<br />
| ?<br />
|}<br />
<br />
==Preparation==<br />
<br />
===Choosing a setup===<br />
<br />
Which disk encryption setup is appropriate for you will depend on your goals (please read [[#Why use encryption?]] above) and system parameters.<br />
<br />
Among other things, you will need to answer the following questions:<br />
<br />
;What kind of "attacker" do you want to protect against?<br />
<br />
* Casual computer user snooping around your disk when your system is turned off / stolen / etc.<br />
* Professional cryptanalyst who can get repeated read/write access to your system before and after you use it<br />
* Anything in between<br />
<br />
;What encryption strategy shall be employed?<br />
<br />
* Data encryption<br />
* System encryption<br />
* Something in between<br />
<br />
;How should swap, {{ic|/tmp}}, etc. be taken care of?<br />
<br />
* Ignore, and hope no data is leaked<br />
* Disable or mount as ramdisk<br />
* Encrypt ''(as part of full disk encryption, or separately)''<br />
<br />
;How should encrypted parts of the disk be unlocked?<br />
<br />
* Passphrase ''(same as login password, or separate)''<br />
* Keyfile ''(e.g. on a USB stick, that you keep in a safe place or carry around with yourself)''<br />
* Both<br />
<br />
;''When'' should encrypted parts of the disk be unlocked?<br />
<br />
* Before boot<br />
* During boot<br />
* At login<br />
* Manually on demand ''(after login)''<br />
<br />
;How should multiple users be accomodated?<br />
<br />
* Not at all<br />
* Using a shared passphrase/key<br />
* Independently issued and revocable passphrases/keys for the same encrypted part of the disk<br />
* Separate encrypted parts of the disk for different users<br />
<br />
Then you can go on to make the required technical choices (see [[#Available methods]] above, and [[#How the encryption works]] below), regarding:<br />
<br />
* stacked filesystem encryption vs. blockdevice encryption<br />
* key management<br />
* cipher and mode of operation<br />
* metadata storage<br />
* location of the "lower directory" (in case of stacked filesystem encryption)<br />
<br />
=== Examples ===<br />
<br />
In practice, it could turn out something like:<br />
<br />
;Example 1: Simple data encryption (internal hard drive) using a virtual folder called {{ic|~/Private}} in the user's home directory encrypted with [[EncFS]]<br>└──> encrypted versions of the files stored on-disk in {{ic|~/.Private}}<br>└──> unlocked on demand with dedicated passphrase<br />
<br />
;Example 2: Partial system encryption with each user's home directory encrypted with [[ECryptfs]]<br>└──> unlocked on respective user login, using login passphrase<br>└──> {{ic|swap}} and {{ic|/tmp}} partitions encrypted with [[Dm-crypt with LUKS]], using an automatically generated per-session throwaway key<br>└──> indexing/caching of contents of {{ic|/home}} by ''slocate'' (and similar apps) disabled.<br />
<br />
;Example 3: System encryption - whole hard drive except {{ic|/boot}} partition (however, {{ic|/boot}} can be encrypted with [[GRUB]]) encrypted with [[Dm-crypt with LUKS]] <br>└──> unlocked during boot, using passphrases or USB stick with keyfiles<br>└──> Maybe different passphrases/keys per user - independently revocable<br>└──> Maybe encryption spanning multiple drives or partition layout flexibility with [[Dm-crypt/Encrypting an entire system#LUKS on LVM|LUKS on LVM]]<br />
<br />
;Example 4: Hidden/plain system encryption - whole hard drive encrypted with [[dm-crypt|plain dm-crypt]] <br>└──> USB-boot, using dedicated passphrase plus USB stick with keyfile<br>└──> data integrity checked before mounting<br>└──> {{ic|/boot}} partition located on aforementioned USB stick<br />
<br />
Many other combinations are of course possible. You should carefully plan what kind of setup will be appropriate for your system.<br />
<br />
===Choosing a strong passphrase===<br />
<br />
See [[Security#Passwords]].<br />
<br />
===Preparing the disk===<br />
<br />
Before setting up disk encryption on a (part of a) disk, consider securely wiping it first. This consists of overwriting the entire drive or partition with a stream of zero bytes or random bytes, and is done for one or both of the following reasons:<br />
<br />
;Prevent recovery of previously stored data<br />
<br />
Disk encryption does not change the fact that individual sectors are only overwritten on demand, when the file system creates or modifies the data those particular sectors hold (see [[#How the encryption works]] below). Sectors which the filesystem considers "not currently used" are not touched, and may still contain remnants of data from previous filesystems. The only way to make sure that all data which you previously stored on the drive can not be [[Wikipedia:Data_recovery|recovered]], is to manually erase it.<br />
For this purpose it does not matter whether zero bytes or random bytes are used (although wiping with zero bytes will be much faster).<br />
<br />
;Prevent disclosure of usage patterns on the encrypted drive<br />
<br />
Ideally, the whole encrypted part of the disk should be indistinguishable from uniformly random data. This way, no unauthorized person can know which and how many sectors actually contain encrypted data - which may be a desirable goal in itself (as part of true confidentiality), and also serves as an additional barrier against attackers trying to break the encryption.<br />
In order to satisfy this goal, wiping the disk using high-quality random bytes is crucial.<br />
<br />
The second goal only makes sense in combination with block device encryption, because in the case of stacked filesystem encryption the encrypted data can easily be located anyways (in the form of distinct encrypted files in the host filesystem). Also note that even if you only intend to encrypt a particular folder, you will have to erase the whole partition if you want to get rid of files that were previously stored in that folder in unencrypted form (due to [[Wikipedia::File_system_fragmentation|disk fragmentation]]). If there are other folders on the same partition, you will have to back them up and move them back afterwards.<br />
<br />
Once you have decided which kind of disk erasure you want to perform, refer to the [[Securely wipe disk]] article for technical instructions.<br />
<br />
{{Tip|In deciding which method to use for secure erasure of a hard disk drive, remember that this will not need to be performed more than once for as long as the drive is used as an encrypted drive.}}<br />
<br />
==How the encryption works==<br />
<br />
This section is intended as a high-level introduction to the concepts and processes which are at the heart of usual disk encryption setups.<br />
<br />
It does not go into technical or mathematical details (consult the appropriate literature for that), but should provide a system administrator with a rough understanding of how different setup choices (especially regarding key management) can affect usability and security.<br />
<br />
===Basic principle===<br />
<br />
For the purposes of disk encryption, each blockdevice (or individual file in the case of stacked filesystem encryption) is divided into '''sectors''' of equal length, for example 512 bytes (4,096 bits). The encryption/decryption then happens on a per-sector basis, so the n'th sector of the blockdevice/file on disk will store the encrypted version of the n'th sector of the original data.<br />
<br />
Whenever the operating system or an application requests a certain fragment of data from the blockdevice/file, the whole sector (or sectors) that contains the data will be read from disk, decrypted on-the-fly, and temporarily stored in memory:<br />
<br />
╔═══════╗<br />
sector 1 ║"???.."║<br />
╠═══════╣ ╭┈┈┈┈┈╮<br />
sector 2 ║"???.."║ ┊ key ┊<br />
╠═══════╣ ╰┈┈┬┈┈╯<br />
: : │<br />
╠═══════╣ ▼ ┣┉┉┉┉┉┉┉┫<br />
sector n ║"???.."║━━━━━━━(decryption)━━━━━━▶┋"abc.."┋ sector n<br />
╠═══════╣ ┣┉┉┉┉┉┉┉┫<br />
: :<br />
╚═══════╝<br />
<br />
encrypted unencrypted<br />
blockdevice or data in RAM<br />
file on disk<br />
<br />
Similarly, on each write operation, all sectors that are affected must be re-encrypted complelety (while the rest of the sectors remain untouched). <br />
<br />
In order to be able to de/encrypt data, the disk encryption system needs to know the unique secret "key" associated with it. Whenever the encrypted block device or folder in question is to be mounted, its corresponding key (called henceforth its "master key") must be supplied. <br />
<br />
The entropy of the key is of utmost importance for the security of the encryption. A randomly generated byte string of a certain length, for example 32 bytes (256 bits), has desired properties but is not feasible to remember and apply manually during the mount. <br />
<br />
For that reason two techniques are used as aides. The first is the application of cryptography to increase the entropic property of the master key, usually involving a separate human-friendly passphrase. For the different types of encryption the [[#Comparison table]] lists respective features. The second method is to create a keyfile with high entropy and store it on a medium separate from the data drive to be encrypted. <br />
<br />
See also [[Wikipedia:Authenticated encryption]].<br />
<br />
===Keys, keyfiles and passphrases===<br />
<br />
The following are examples how to store and cryptographically secure a master key with a keyfile:<br />
<br />
;Stored in a plaintext keyfile<br />
<br />
Simply storing the master key in a file (in readable form) is the simplest option. The file - called a "keyfile" - can be placed on a USB stick that you keep in a secure location and only connect to the computer when you want to mount the encrypted parts of the disk (e.g. during boot or login).<br />
<br />
;Stored in passphrase-protected form in a keyfile or on the disk itself<br />
<br />
The master key (and thus the encrypted data) can be protected with a secret passphrase, which you will have to remember and enter each time you want to mount the encrypted block device or folder. See [[#Cryptographic metadata]] below for details.<br />
<br />
;Randomly generated on-the-fly for each session<br />
<br />
In some cases, e.g. when encrypting swap space or a {{ic|/tmp}} partition, it is not necessary to keep a persistent master key at all. A new throwaway key can be randomly generated for each session, without requiring any user interaction. This means that once unmounted, all files written to the partition in question can never be decrypted again by ''anyone'' - which in those particular use-cases is perfectly fine.<br />
<br />
===Cryptographic metadata===<br />
<br />
Frequently the encryption techniques use cryptographic functions to enhance the security of the master key itself. On mount of the encrypted device the passphrase or keyfile is passed through these and only the result can unlock the master key to decrypt the data. <br />
<br />
A common setup is to apply so-called "key stretching" to the passphrase (via a "key derivation function"), and use the resulting enhanced passphrase as the mount key for decrypting the actual master key (which has been previously stored in encrypted form):<br />
<br />
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈┈┈╮<br />
┊ mount passphrase ┊━━━━━⎛key derivation⎞━━━▶┊ mount key ┊<br />
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ,───⎝ function ⎠ ╰┈┈┈┈┈┬┈┈┈┈┈╯<br />
╭──────╮ ╱ │<br />
│ salt │───────────´ │<br />
╰──────╯ │<br />
╭─────────────────────╮ ▼ ╭┈┈┈┈┈┈┈┈┈┈┈┈╮<br />
│ encrypted master key│━━━━━━━━━━━━━━━━━━━━━━(decryption)━━━▶┊ master key ┊<br />
╰─────────────────────╯ ╰┈┈┈┈┈┈┈┈┈┈┈┈╯<br />
<br />
The '''key derivation function''' (e.g. PBKDF2 or scrypt) is deliberately slow (it applies many iterations of a hash function, e.g. 1000 iterations of HMAC-SHA-512), so that brute-force attacks to find the passphrase are rendered infeasible. For the normal use-case of an authorized user, it will only need to be calculated once per session, so the small slowdown is not a problem.<br />
It also takes an additional blob of data, the so-called "'''salt'''", as an argument - this is randomly generated once during set-up of the disk encryption and stored unprotected as part of the cryptographic metadata. Because it will be a different value for each setup, this makes it infeasible for attackers to speed up brute-force attacks using precomputed tables for the key derivation function.<br />
<br />
The '''encrypted master key''' can be stored on disk together with the encrypted data. This way, the confidentiality of the encrypted data depends completely on the secret passphrase. <br />
<br />
Additional security can be attained by instead storing the encrypted master key in a keyfile on e.g. a USB stick. This provides '''two-factor authentication''': Accessing the encrypted data now requires something only you ''know'' (the passphrase), and additionally something only you ''have'' (the keyfile).<br />
<br />
Another way of achieving two-factor authentication is to augment the above key retrieval scheme to mathematically "combine" the passphrase with byte data read from one or more external files (located on a USB stick or similar), before passing it to the key derivation function.The files in question can be anything, e.g. normal JPEG images, which can be beneficial for [[#Plausible deniability]]. They are still called "keyfiles" in this context, though.<br />
<br />
After it has been derived, the master key is securely stored in memory (e.g. in a kernel keyring), for as long as the encrypted block device or folder is mounted.<br />
<br />
It is usually not used for de/encrypting the disk data directly, though.<br />
For example, in the case of stacked filesystem encryption, each file can be automatically assigned its own encryption key. Whenever the file is to be read/modified, this file key first needs to be decrypted using the main key, before it can itself be used to de/encrypt the file contents:<br />
<br />
╭┈┈┈┈┈┈┈┈┈┈┈┈╮<br />
┊ master key ┊<br />
''file on disk:'' ╰┈┈┈┈┈┬┈┈┈┈┈┈╯<br />
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ │<br />
╎╭───────────────────╮╎ ▼ ╭┈┈┈┈┈┈┈┈┈┈╮<br />
╎│ encrypted file key│━━━━(decryption)━━━▶┊ file key ┊<br />
╎╰───────────────────╯╎ ╰┈┈┈┈┬┈┈┈┈┈╯<br />
╎┌───────────────────┐╎ ▼ ┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐<br />
╎│ encrypted file │◀━━━━━━━━━━━━━━━━━(de/encryption)━━━▶┊ readable file ┊<br />
╎│ contents │╎ ┊ contents ┊<br />
╎└───────────────────┘╎ └┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘<br />
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘<br />
<br />
In a similar manner, a separate key (e.g. one per folder) may be used for the encryption of file names in the case of stacked filesystem encryption.<br />
<br />
In the case of block device encryption one master key is used per device and, hence, all data. Some methods offer features to assign multiple passphrases/keyfiles for the same device and others not. Some use above mentioned functions to secure the master key and others give the control over the key security fully to the user. Two examples are explained by the cryptographic parameters used by [[dm-crypt]] in plain or LUKS modes. <br />
<br />
When comparing the parameters used by both modes one notes that dm-crypt plain mode has parameters relating to how to locate the keyfile (e.g. {{ic|--keyfile-size}}, {{ic|--keyfile-offset}}). The dm-crypt LUKS mode does not need these, because each blockdevice contains a header with the cryptographic metadata at the beginning. The header includes the used cipher, the encrypted master-key itself and parameters required for its derivation for decryption. The latter parameters in turn result from options used during initial encryption of the master-key (e.g. {{ic|--iter-time}}, {{ic|--use-random}}). <br />
<br />
For the dis-/advantages of the different techniques, please refer back to [[#Comparison table]] or browse the specific pages. <br />
<br />
See also:<br />
* [[Wikipedia:Passphrase]]<br />
* [[Wikipedia:Key (cryptography)]]<br />
* [[Wikipedia:Key management]]<br />
* [[Wikipedia:Key derivation function]]<br />
<br />
===Ciphers and modes of operation===<br />
<br />
The actual algorithm used for translating between pieces of unencrypted and encrypted data (so-called "plaintext" and "ciphertext") which correspond to each other with respect to a given encryption key, is called a "'''cipher'''".<br />
<br />
Disk encryption employs "block ciphers", which operate on fixed-length blocks of data, e.g. 16 bytes (128 bits). At the time of this writing, the predominantly used ones are:<br />
{| class="wikitable" style="margin:0 5em 1.5em 5em;"<br />
! scope="col" style="text-align:left" | <br />
! scope="col" style="text-align:left" | block&nbsp;size<br />
! scope="col" style="text-align:left" | key&nbsp;size<br />
! scope="col" style="text-align:left" | comment<br />
|-<br />
! scope="row" style="text-align:right" | [[Wikipedia:Advanced_Encryption_Standard|AES]]<br />
| 128 bits<br />
| 128, 192 or 256 bits<br />
| ''approved by the NSA for protecting "SECRET" and "TOP SECRET" classified US-government information (when used with a key size of 192 or 256 bits)''<br />
|-<br />
! scope="row" style="text-align:right" | [[wikipedia:Blowfish (cipher)|Blowfish]]<br />
| 64 bits<br />
| 32–448 bits<br />
| ''one of the first patent-free secure ciphers that became publicly available, hence very well established on Linux''<br />
|-<br />
! scope="row" style="text-align:right" | [[Wikipedia:Twofish|Twofish]]<br />
| 128 bits<br />
| 128, 192 or 256 bits<br />
| ''developed as successor of Blowfish, but has not attained as much widespread usage''<br />
|-<br />
! scope="row" style="text-align:right" | [[wikipedia:Serpent (cipher)|Serpent]]<br />
| 128 bits<br />
| 128, 192 or 256 bits<br />
| Considered the most secure of the five AES-competition finalists[[#See also|[10]]][[#See also|[11]]][[#See also|[12]]].<br />
|}<br />
<br />
Encrypting/decrypting a sector ([[#Basic principle|see above]]) is achieved by dividing it into small blocks matching the cipher's block-size, and following a certain rule-set (a so-called "'''mode of operation'''") for how to consecutively apply the cipher to the individual blocks.<br />
<br />
Simply applying it to each block separately without modification (dubbed the "''electronic codebook (ECB)''" mode) would not be secure, because if the same 16 bytes of plaintext always produce the same 16 bytes of ciphertext, an attacker could easily recognize patterns in the ciphertext that is stored on disk.<br />
<br />
The most basic (and common) mode of operation used in practice is "''cipher-block chaining (CBC)''". When encrypting a sector with this mode, each block of plaintext data is combined in a mathematical way with the ciphertext of the previous block, before encrypting it using the cipher. For the first block, since it has no previous ciphertext to use, a special pre-generated data block stored with the sector's cryptographic metadata and called an "'''initialization vector (IV)'''" is used:<br />
<br />
╭──────────────╮<br />
│initialization│<br />
│vector │<br />
╰────────┬─────╯<br />
╭ ╠══════════╣ ╭─key │ ┣┉┉┉┉┉┉┉┉┉┉┫ <br />
│ ║ ║ ▼ ▼ ┋ ┋ . START<br />
┴ ║"????????"║◀━━━━(cipher)━━━━(+)━━━━━┋"Hello, W"┋ block ╱╰────┐<br />
sector n ║ ║ ┋ ┋ 1 ╲╭────┘<br />
of file or ║ ║──────────────────╮ ┋ ┋ ' <br />
blockdevice ╟──────────╢ ╭─key │ ┠┈┈┈┈┈┈┈┈┈┈┨<br />
┬ ║ ║ ▼ ▼ ┋ ┋<br />
│ ║"????????"║◀━━━━(cipher)━━━━(+)━━━━━┋"orld !!!"┋ block<br />
│ ║ ║ ┋ ┋ 2<br />
│ ║ ║──────────────────╮ ┋ ┋<br />
│ ╟──────────╢ │ ┠┈┈┈┈┈┈┈┈┈┈┨<br />
│ ║ ║ ▼ ┋ ┋<br />
: : ... : ... ... : ... : ...<br />
<br />
ciphertext plaintext<br />
on disk in RAM<br />
<br />
When decrypting, the procedure is reversed analogously.<br />
<br />
One thing worth noting is the generation of the unique initialization vector for each sector. The simplest choice is to calculate it in a predictable fashion from a readily available value such as the sector number. However, this might allow an attacker with repeated access to the system to perform a so-called [[wikipedia:Watermarking_attack|watermarking attack]]. To prevent that, a method called "Encrypted salt-sector initialization vector ('''ESSIV''')" can be used to generate the initialization vectors in a way that makes them look completely random to a potential attacker.<br />
<br />
There are also a number of other, more complicated modes of operation available for disk encryption, which already provide built-in security against such attacks (and hence do not require ESSIV).<br />
Some can also additionally guarantee authenticity of the encrypted data (i.e. confirm that it has not been modified/corrupted by someone who does not have access to the key).<br />
<br />
See also:<br />
* [[Wikipedia:Disk encryption theory]]<br />
* [[Wikipedia:Block cipher]]<br />
* [[Wikipedia:Block cipher modes of operation]]<br />
<br />
===Plausible deniability===<br />
<br />
See [[Wikipedia:Plausible deniability]].<br />
<br />
== See also ==<br />
<br />
# [[#Summary|^]] see http://www.truecrypt.org/legal/license<br />
# [[#Practical implications|^]] well, a single file in those filesystems could be used as a container (virtual loop-back device!) but then one would not actually be using the filesystem (and the features it provides) anymore<br />
# [[#Compatibility & prevalence|^]] [http://www.scherrer.cc/crypt CrossCrypt] {{Dead link|2015|01|20}} - Open Source AES and TwoFish Linux compatible on the fly encryption for Windows XP and Windows 2000<br />
# [[#Compatibility & prevalence|^]] (1) [http://sourceforge.net/projects/freeotfe.mirror/ FreeOTFE (on sf.net)] (2) [http://web.archive.org/web/20130531062457/http://freeotfe.org/ FreeOTFE (archived)] - supports Windows 2000 and later (for PC), and Windows Mobile 2003 and later (for PDA)<br />
# [[#Compatibility & prevalence|^]] see [http://www.arg0.net/encfs-mac-build EncFs build instructions for Mac]<br />
# [[#Compatibility & prevalence|^]] see http://www.freshports.org/sysutils/fusefs-encfs/<br />
# [[#Compatibility & prevalence|^]] see http://www.chromium.org/chromium-os/chromiumos-design-docs/protecting-cached-user-data<br />
# [[#Compatibility & prevalence|^]] http://kernelnewbies.org/Linux_2_6_38#head-49f5f735853f8cc7c4d89e5c266fe07316b49f4c<br />
# [[#Compatibility & prevalence|^]] http://members.ferrara.linux.it/freddy77/encfs.html<br />
# [[#Compatibility & prevalence|^]] http://csrc.nist.gov/archive/aes/round2/r2report.pdf<br />
# [[#Compatibility & prevalence|^]] https://www.cl.cam.ac.uk/~rja14/Papers/serpentcase.pdf<br />
# [[#Compatibility & prevalence|^]] https://www.cl.cam.ac.uk/~rja14/Papers/serpent.pdf<br />
# [[#Performance features|^]] https://github.com/vgough/encfs/issues/118<br />
# [[#Compatibility & prevalence|^]] <s>[https://github.com/t-d-k/doxbox DOXBOX]</s> renamed into [https://github.com/t-d-k/LibreCrypt LibreCrypt] - support to open dm-crypt / LUKS in newer Windows releases (includes fork from OTFE). Project seems to be abandoned by developer, with multiple open issues.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Data-at-rest_encryption&diff=497723Data-at-rest encryption2017-11-21T15:44:32Z<p>Nodiscc: add inline link to wikipedia 'Encryption' page</p>
<hr />
<div>[[Category:Encryption]]<br />
[[Category:File systems]]<br />
[[es:Disk encryption]]<br />
[[it:Disk encryption]]<br />
[[ja:ディスク暗号化]]<br />
[[pl:Disk encryption]]<br />
{{Related articles start}}<br />
{{Related|dm-crypt}}<br />
{{Related|TrueCrypt}}<br />
{{Related|eCryptfs}}<br />
{{Related|EncFS}}<br />
{{Related|Tomb}}<br />
{{Related|tcplay}}<br />
{{Related|GnuPG}}<br />
{{Related|Self-Encrypting Drives}}<br />
{{Related articles end}}<br />
This article discusses common techniques available in Arch Linux for cryptographically protecting a logical part of a storage disk (folder, partition, whole disk, ...), so that all data that is written to it is automatically [[Wikipedia:Encryption|encrypted]], and decrypted on-the-fly when read again.<br />
<br />
"Storage disks" in this context can be your computer's hard drive(s), external devices like USB flash drives or DVD's, as well as ''virtual'' storage disks like loop-back devices or cloud storage ''(as long as Arch Linux can address it as a block device or filesystem)''.<br />
<br />
If you already know ''what'' you want to protect and ''how'' you want to encrypt, you are encouraged to directly browse the ''related'' how-to articles listed on the right. <br />
<br />
==Why use encryption?==<br />
<br />
Disk encryption ensures that files are always stored on disk in an encrypted form. The files only become available to the operating system and applications in readable form while the system is running and unlocked by a trusted user. An unauthorized person looking at the disk contents directly, will only find garbled random-looking data instead of the actual files.<br />
<br />
For example, this can prevent unauthorized viewing of the data when the computer or hard-disk is:<br />
* located in a place to which non-trusted people might gain access while you are away<br />
* lost or stolen, as with laptops, netbooks or external storage devices<br />
* in the repair shop<br />
* discarded after its end-of-life<br />
<br />
In addition, disk encryption can also be used to add some security against unauthorized attempts to tamper with your operating system – for example, the installation of keyloggers or Trojan horses by attackers who can gain physical access to the system while you are away.<br />
<br />
{{Warning|Disk encryption does '''not''' protect your data from all threats.}}<br />
You will still be vulnerable to:<br />
* Attackers who can break into your system (e.g. over the Internet) while it is running and after you have already unlocked and mounted the encrypted parts of the disk.<br />
* Attackers who are able to gain physical access to the computer while it is running (even if you use a screenlocker), or very shortly ''after'' it was running, if they have the resources to perform a [[Wikipedia:Cold boot attack|cold boot attack]].<br />
* A government entity, which not only has the resources to easily pull off the above attacks, but also may simply force you to give up your keys/passphrases using various techniques of [[Wikipedia:Coercion|coercion]]. In most non-democratic countries around the world, as well as in the USA and UK, it may be legal for law enforcement agencies to do so if they have suspicions that you might be hiding something of interest.<br />
<br />
A very strong disk encryption setup (e.g. full system encryption with authenticity checking and no plaintext boot partition) is required to stand a chance against professional attackers who are able to tamper with your system ''before'' you use it. And even then it is doubtful whether it can really prevent all types of tampering (e.g. hardware keyloggers). The best remedy might be [[Wikipedia:Hardware-based full disk encryption|hardware-based full disk encryption]] and [[Wikipedia:Trusted_Computing|Trusted Computing]].<br />
<br />
{{Warning|Disk encryption also will not protect you against someone simply [[Securely wipe disk|wiping your disk]]. [[Backup programs|Regular backups]] are recommended to keep your data safe.}}<br />
<br />
== Data encryption vs system encryption ==<br />
<br />
; Data encryption<br />
: Defined as encrypting only the user's data itself (often located within the {{ic|/home}} directory, or on removable media like a data DVD), data encryption is the simplest and least intrusive use of disk encryption, but has some significant drawbacks.<br />
: In modern computing systems, there are many background processes that may cache/store information about user data or parts of the data itself in non-encrypted areas of the hard drive, like:<br />
<br />
:* swap partitions<br />
:** (potential remedies: disable swapping, or use [[encrypted swap]] as well)<br />
:* {{ic|/tmp}} (temporary files created by user applications)<br />
:** (potential remedies: avoid such applications; mount {{ic|/tmp}} inside a [[ramdisk]])<br />
:* {{ic|/var}} (log files and databases and such; for example, mlocate stores an index of all file names in {{ic|/var/lib/mlocate/mlocate.db}})<br />
<br />
:In addition, mere data encryption will leave you vulnerable to offline system tampering attacks (e.g. someone installing a hidden program that [[Wikipedia:Keystroke_logging|records]] the passphrase you use to unlock the encrypted data, or waits for you to unlock it and then secretly copies/sends some of the data to a location where the attacker can retrieve it).<br />
<br />
; System encryption<br />
: Defined as the encryption of the operating system ''and'' user data, system encryption helps to address some of the inadequacies of data encryption.<br />
<br />
: Benefits:<br />
:* prevents unauthorized physical access to (and tampering with) operating system files ''(but see warning above)''<br />
:* prevents unauthorized physical access to private data that may be cached by the system<br />
: Disadvantages:<br />
:* unlocking of the encrypted parts of the disk can no longer happen during or after user login; it must now happen at boot time<br />
<br />
In practice, there is not always a clear line between data encryption and system encryption, and many different compromises and customized setups are possible.<br />
<br />
In any case, disk encryption should only be viewed as an adjunct to the existing security mechanisms of the operating system - focused on securing offline physical access, while relying on ''other'' parts of the system to provide things like network security and user-based access control.<br />
<br />
See also [[Wikipedia:Disk encryption]].<br />
<br />
==Available methods==<br />
<br />
All disk encryption methods operate in such a way that even though the disk actually holds encrypted data, the operating system and applications "see" it as the corresponding normal readable data as long as the cryptographic container (i.e. the logical part of the disk that holds the encrypted data) has been "unlocked" and mounted.<br />
<br />
For this to happen, some "secret information" (usually in the form of a keyfile and/or passphrase) needs to be supplied by the user, from which the actual encryption key can be derived (and stored in the kernel keyring for the duration of the session).<br />
<br />
If you are completely unfamiliar with this sort of operation, please also read the [[#How the encryption works]] section below.<br />
<br />
The available disk encryption methods can be separated into two types by their layer of operation:<br />
<br />
===Stacked filesystem encryption===<br />
<br />
Stacked filesystem encryption solutions are implemented as a layer that stacks on top of an existing filesystem, causing all files written to an encryption-enabled folder to be encrypted on-the-fly before the underlying filesystem writes them to disk, and decrypted whenever the filesystem reads them from disk. This way, the files are stored in the host filesystem in encrypted form (meaning that their contents, and usually also their file/folder names, are replaced by random-looking data of roughly the same length), but other than that they still exist in that filesystem as they would without encryption, as normal files / symlinks / hardlinks / etc.<br />
<br />
The way it is implemented, is that to unlock the folder storing the raw encrypted files in the host filesystem ("lower directory"), it is mounted (using a special stacked pseudo-filesystem) onto itself or optionally a different location ("upper directory"), where the same files then appear in readable form - until it is unmounted again, or the system is turned off.<br />
<br />
Available solutions in this category are [[eCryptfs]] and [[EncFS]].<br />
<br />
===Block device encryption===<br />
<br />
Block device encryption methods, on the other hand, operate ''below'' the filesystem layer and make sure that everything written to a certain block device (i.e. a whole disk, or a partition, or a file acting as a virtual loop-back device) is encrypted. This means that while the block device is offline, its whole content looks like a large blob of random data, with no way of determining what kind of filesystem and data it contains. Accessing the data happens, again, by mounting the protected container (in this case the block device) to an arbitrary location in a special way.<br />
<br />
The following "block device encryption" solutions are available in Arch Linux:<br />
<br />
;loop-AES: loop-AES is a descendant of cryptoloop and is a secure and fast solution to system encryption. However, loop-AES is considered less user-friendly than other options as it requires non-standard kernel support. <br />
<br />
;dm-crypt: [[dm-crypt]] is the standard device-mapper encryption functionality provided by the Linux kernel. It can be used directly by those who like to have full control over all aspects of partition and key management. The management of dm-crypt is done with the {{Pkg|cryptsetup}} userspace utility. It can be used for the following types of block-device encryption: ''LUKS'' (default), ''plain'', and has limited features for ''loopAES'' and ''Truecrypt'' devices. <br />
:* LUKS, used by default, is an additional convenience layer which stores all of the needed setup information for dm-crypt on the disk itself and abstracts partition and key management in an attempt to improve ease of use and cryptographic security. <br />
:* plain dm-crypt mode, being the original kernel functionality, does not employ the convenience layer. It is more difficult to apply the same cryptographic strength with it. When doing so, longer keys (passphrases or keyfiles) are the result. It has, however, other advantages, described in the following [[#Practical implications|comparison table]]. <br />
<br />
;TrueCrypt: Note that the developers of [[TrueCrypt]] ended support for it in May 2014. <br />
<br />
For practical implications of the chosen layer of operation, see the [[#Practical implications|comparison table]] below, as well as the general write up for [http://ksouedu.com/doc/ecryptfs-utils/ecryptfs-faq.html#compare eCryptfs]. See [[:Category:Encryption]] for the available content of the methods compared below, as well as other tools not included in the table.<br />
<br />
===Comparison table===<br />
<br />
The column "dm-crypt +/- LUKS" denotes features of dm-crypt for both LUKS ("+") and plain ("-") encryption modes. If a specific feature requires using LUKS, this is indicated by "(with LUKS)". Likewise "(without LUKS)" indicates usage of LUKS is counter-productive to achieve the feature and plain mode should be used.<br />
<br />
{| class="wikitable" style="text-align:center; cell-padding:100px; "<br />
! style="text-align:left; background:#ddd"|<br />
=====Summary=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Type<br />
| block device encryption<br />
| block device encryption<br />
| block device encryption<br />
| stacked filesystem encryption<br />
| stacked filesystem encryption<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Main selling points<br />
| longest-existing one; possibly the fastest; works on legacy systems<br />
| de-facto standard for block device encryption on Linux; very flexible<br />
| very portable, well-polished, self-contained solution<br />
| slightly faster than EncFS; individual encrypted files portable between systems<br />
| easiest one to use; supports non-root administration<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Availability in Arch Linux<br />
| must manually compile custom kernel<br />
| ''kernel modules:'' already shipped with default kernel; ''tools:'' {{Pkg|device-mapper}}, {{Pkg|cryptsetup}} [core]<br />
| [https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/truecrypt&id=efe03070990f9e3554508bd982b1bd5a654aa095 truecrypt 7.1a-2] [extra] (read-only features in later versions)<br />
| ''kernel module:'' already shipped with default kernel; ''tools:'' {{Pkg|ecryptfs-utils}} [community]<br />
| {{Pkg|encfs}} [community]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | License<br />
| GPL<br />
| GPL<br />
| custom<br>[[#See also|[1]]]<br />
| GPL<br />
| GPL<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Basic classification=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypts<br />
| whole block devices<br />
| whole block devices<br />
| whole block devices<br />
| files<br />
| files<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Container for encrypted data may be...<br />
| a disk or disk partition / a file acting as a virtual partition<br />
| a disk or disk partition / a file acting as a virtual partition<br />
| a disk or disk partition / a file acting as a virtual partition<br />
| a directory in an existing file system<br />
| a directory in an existing file system<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Relation to filesystem<br />
| operates below filesystem layer: does not care whether the content of the encrypted block device is a filesystem, a partition table, a LVM setup, or anything else<br />
| operates below filesystem layer: does not care whether the content of the encrypted block device is a filesystem, a partition table, a LVM setup, or anything else<br />
| operates below filesystem layer: does not care whether the content of the encrypted block device is a filesystem, a partition table, a LVM setup, or anything else<br />
| adds an additional layer to an existing filesystem, to automatically encrypt/decrypt files whenever they are written/read<br />
| adds an additional layer to an existing filesystem, to automatically encrypt/decrypt files whenever they are written/read<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encryption implemented in...<br />
| kernelspace<br />
| kernelspace<br />
| kernelspace<br />
| kernelspace<br />
| userspace (using FUSE)<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Cryptographic metadata stored in...<br />
| ?<br />
| with LUKS: LUKS Header <br />
| begin/end of (decrypted) device ([http://www.truecrypt.org/docs/volume-format-specification format])<br />
| header of each encrypted file<br />
| control file at the top level of each EncFs container<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Wrapped encryption key stored in...<br />
| ?<br />
| with LUKS: LUKS header <br />
| begin/end of (decrypted) device ([http://www.truecrypt.org/docs/volume-format-specification format])<br />
| key file that can be stored anywhere<br />
| key file that can be stored anywhere<br />
[https://github.com/rfjakob/encfs/blob/next/encfs/encfs.pod#environment-variables][https://github.com/vgough/encfs/issues/48#issuecomment-69301831]<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Practical implications=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | File metadata (number of files, dir structure, file sizes, permissions, mtimes, etc.) is encrypted<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br>(file and dir names can be encrypted though)<br />
| <span style="color:#f00; font-size:2em">✖</span><br>(file and dir names can be encrypted though)<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used to encrypt whole hard drives (including partition tables)<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used to encrypt swap space<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used without pre-allocating a fixed amount of space for the encrypted data container<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Can be used to protect existing filesystems without block device access, e.g. NFS or Samba shares, cloud storage, etc.<br />
| <span style="color:#f00; font-size:2em">✖</span><br>[[#See also|[2]]]<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Allows offline file-based backups of encrypted files<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Usability features=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for automounting on login<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for automatic unmounting in case of inactivity<br />
| ?<br />
| ?<br />
| ?<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Non-root users can create/destroy containers for encrypted data<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| limited<br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Provides a GUI<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
[http://www.libertyzero.com/GEncfsM/][https://launchpad.net/gencfsm]<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Security features=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
<br />
! style="text-align:left; font-weight:normal; background:#eee" | Supported ciphers<br />
| AES<br />
| AES, Anubis, CAST5/6, Twofish, Serpent, Camellia, Blowfish,… (every cipher the kernel Crypto API offers)<br />
| AES, Twofish, Serpent<br />
| AES, Blowfish, Twofish...<br />
| AES, Blowfish, Twofish, and any other ciphers available on the system<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for salting<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with LUKS)<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for cascading multiple ciphers<br />
| ?<br />
| Not in one device, but blockdevices can be cascaded<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for key-slot diffusion<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with LUKS)<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Protection against key scrubbing<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br>(without LUKS)<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for multiple (independently revocable) keys for the same encrypted data<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with LUKS)<br />
| ?<br />
| ?<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
<br />
=====Performance features=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Multithreading support<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[8]]]<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| ?<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Hardware-accelerated encryption support<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[13]]]<br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Block device encryption specific=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | <br />
! style="background:#ddd" | <br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Support for (manually) resizing the encrypted block device in-place<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#f00; font-size:2em">✖</span><br />
! style="background:#ddd" | <br />
! style="background:#ddd" | <br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Stacked filesystem encryption specific=====<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Supported file systems<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| ext3, ext4, xfs (with caveats), jfs, nfs...<br />
| ext3, ext4, xfs (with caveats), jfs, nfs, cifs...<br />
[https://github.com/vgough/encfs]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Ability to encrypt filenames<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Ability to ''not'' encrypt filenames<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Optimized handling of sparse files<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
! style="background:#ddd" |<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| <span style="color:#080; font-size:2em">✔</span><br />
|-<br />
! style="text-align:left; background:#ddd"|<br />
=====Compatibility & prevalence=====<br />
! style="background:#ddd" | Loop-AES<br />
! style="background:#ddd" | dm-crypt +/- LUKS<br />
! style="background:#ddd" | Truecrypt<br />
! style="background:#ddd" | eCryptfs<br />
! style="background:#ddd" | EncFs<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Supported Linux kernel versions<br />
| 2.0 or newer<br />
| CBC-mode since 2.6.4, ESSIV 2.6.10, LRW 2.6.20, XTS 2.6.24<br />
| ?<br />
| ?<br />
| 2.4 or newer<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypted data can also be accessed from Windows<br />
| <span style="color:#080; font-size:2em">✔</span><br>(with [[#See also|[3]]], [[#See also|[14]]])<br />
|?<br>(with [[#See also|[4]]], [[#See also|[14]]])<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| ?<br>[[#See also|[9]]]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypted data can also be accessed from Mac OS X<br />
| ?<br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[5]]]<br />
|-<br />
! style="text-align:left; font-weight:normal; background:#eee" | Encrypted data can also be accessed from FreeBSD<br />
| ?<br />
| ?<br />
| <span style="color:#f00; font-size:2em">✖</span><br />
| ?<br />
| <span style="color:#080; font-size:2em">✔</span><br>[[#See also|[6]]]<br />
|-<br />
<br />
! style="text-align:left; font-weight:normal; background:#eee" | Used by<br />
| ?<br />
| Debian/Ubuntu installer (system encryption)<br>Fedora installer <br />
| ?<br />
| Ubuntu installer (home dir encryption)<br>Chromium OS (encryption of cached user data [[#See also|[7]]])<br />
| ?<br />
|}<br />
<br />
==Preparation==<br />
<br />
===Choosing a setup===<br />
<br />
Which disk encryption setup is appropriate for you will depend on your goals (please read [[#Why use encryption?]] above) and system parameters.<br />
<br />
Among other things, you will need to answer the following questions:<br />
<br />
;What kind of "attacker" do you want to protect against?<br />
<br />
* Casual computer user snooping around your disk when your system is turned off / stolen / etc.<br />
* Professional cryptanalyst who can get repeated read/write access to your system before and after you use it<br />
* Anything in between<br />
<br />
;What encryption strategy shall be employed?<br />
<br />
* Data encryption<br />
* System encryption<br />
* Something in between<br />
<br />
;How should swap, {{ic|/tmp}}, etc. be taken care of?<br />
<br />
* Ignore, and hope no data is leaked<br />
* Disable or mount as ramdisk<br />
* Encrypt ''(as part of full disk encryption, or separately)''<br />
<br />
;How should encrypted parts of the disk be unlocked?<br />
<br />
* Passphrase ''(same as login password, or separate)''<br />
* Keyfile ''(e.g. on a USB stick, that you keep in a safe place or carry around with yourself)''<br />
* Both<br />
<br />
;''When'' should encrypted parts of the disk be unlocked?<br />
<br />
* Before boot<br />
* During boot<br />
* At login<br />
* Manually on demand ''(after login)''<br />
<br />
;How should multiple users be accomodated?<br />
<br />
* Not at all<br />
* Using a shared passphrase/key<br />
* Independently issued and revocable passphrases/keys for the same encrypted part of the disk<br />
* Separate encrypted parts of the disk for different users<br />
<br />
Then you can go on to make the required technical choices (see [[#Available methods]] above, and [[#How the encryption works]] below), regarding:<br />
<br />
* stacked filesystem encryption vs. blockdevice encryption<br />
* key management<br />
* cipher and mode of operation<br />
* metadata storage<br />
* location of the "lower directory" (in case of stacked filesystem encryption)<br />
<br />
=== Examples ===<br />
<br />
In practice, it could turn out something like:<br />
<br />
;Example 1: Simple data encryption (internal hard drive) using a virtual folder called {{ic|~/Private}} in the user's home directory encrypted with [[EncFS]]<br>└──> encrypted versions of the files stored on-disk in {{ic|~/.Private}}<br>└──> unlocked on demand with dedicated passphrase<br />
<br />
;Example 2: Partial system encryption with each user's home directory encrypted with [[ECryptfs]]<br>└──> unlocked on respective user login, using login passphrase<br>└──> {{ic|swap}} and {{ic|/tmp}} partitions encrypted with [[Dm-crypt with LUKS]], using an automatically generated per-session throwaway key<br>└──> indexing/caching of contents of {{ic|/home}} by ''slocate'' (and similar apps) disabled.<br />
<br />
;Example 3: System encryption - whole hard drive except {{ic|/boot}} partition (however, {{ic|/boot}} can be encrypted with [[GRUB]]) encrypted with [[Dm-crypt with LUKS]] <br>└──> unlocked during boot, using passphrases or USB stick with keyfiles<br>└──> Maybe different passphrases/keys per user - independently revocable<br>└──> Maybe encryption spanning multiple drives or partition layout flexibility with [[Dm-crypt/Encrypting an entire system#LUKS on LVM|LUKS on LVM]]<br />
<br />
;Example 4: Hidden/plain system encryption - whole hard drive encrypted with [[dm-crypt|plain dm-crypt]] <br>└──> USB-boot, using dedicated passphrase plus USB stick with keyfile<br>└──> data integrity checked before mounting<br>└──> {{ic|/boot}} partition located on aforementioned USB stick<br />
<br />
Many other combinations are of course possible. You should carefully plan what kind of setup will be appropriate for your system.<br />
<br />
===Choosing a strong passphrase===<br />
<br />
See [[Security#Passwords]].<br />
<br />
===Preparing the disk===<br />
<br />
Before setting up disk encryption on a (part of a) disk, consider securely wiping it first. This consists of overwriting the entire drive or partition with a stream of zero bytes or random bytes, and is done for one or both of the following reasons:<br />
<br />
;Prevent recovery of previously stored data<br />
<br />
Disk encryption does not change the fact that individual sectors are only overwritten on demand, when the file system creates or modifies the data those particular sectors hold (see [[#How the encryption works]] below). Sectors which the filesystem considers "not currently used" are not touched, and may still contain remnants of data from previous filesystems. The only way to make sure that all data which you previously stored on the drive can not be [[Wikipedia:Data_recovery|recovered]], is to manually erase it.<br />
For this purpose it does not matter whether zero bytes or random bytes are used (although wiping with zero bytes will be much faster).<br />
<br />
;Prevent disclosure of usage patterns on the encrypted drive<br />
<br />
Ideally, the whole encrypted part of the disk should be indistinguishable from uniformly random data. This way, no unauthorized person can know which and how many sectors actually contain encrypted data - which may be a desirable goal in itself (as part of true confidentiality), and also serves as an additional barrier against attackers trying to break the encryption.<br />
In order to satisfy this goal, wiping the disk using high-quality random bytes is crucial.<br />
<br />
The second goal only makes sense in combination with block device encryption, because in the case of stacked filesystem encryption the encrypted data can easily be located anyways (in the form of distinct encrypted files in the host filesystem). Also note that even if you only intend to encrypt a particular folder, you will have to erase the whole partition if you want to get rid of files that were previously stored in that folder in unencrypted form (due to [[Wikipedia::File_system_fragmentation|disk fragmentation]]). If there are other folders on the same partition, you will have to back them up and move them back afterwards.<br />
<br />
Once you have decided which kind of disk erasure you want to perform, refer to the [[Securely wipe disk]] article for technical instructions.<br />
<br />
{{Tip|In deciding which method to use for secure erasure of a hard disk drive, remember that this will not need to be performed more than once for as long as the drive is used as an encrypted drive.}}<br />
<br />
==How the encryption works==<br />
<br />
This section is intended as a high-level introduction to the concepts and processes which are at the heart of usual disk encryption setups.<br />
<br />
It does not go into technical or mathematical details (consult the appropriate literature for that), but should provide a system administrator with a rough understanding of how different setup choices (especially regarding key management) can affect usability and security.<br />
<br />
===Basic principle===<br />
<br />
For the purposes of disk encryption, each blockdevice (or individual file in the case of stacked filesystem encryption) is divided into '''sectors''' of equal length, for example 512 bytes (4,096 bits). The encryption/decryption then happens on a per-sector basis, so the n'th sector of the blockdevice/file on disk will store the encrypted version of the n'th sector of the original data.<br />
<br />
Whenever the operating system or an application requests a certain fragment of data from the blockdevice/file, the whole sector (or sectors) that contains the data will be read from disk, decrypted on-the-fly, and temporarily stored in memory:<br />
<br />
╔═══════╗<br />
sector 1 ║"???.."║<br />
╠═══════╣ ╭┈┈┈┈┈╮<br />
sector 2 ║"???.."║ ┊ key ┊<br />
╠═══════╣ ╰┈┈┬┈┈╯<br />
: : │<br />
╠═══════╣ ▼ ┣┉┉┉┉┉┉┉┫<br />
sector n ║"???.."║━━━━━━━(decryption)━━━━━━▶┋"abc.."┋ sector n<br />
╠═══════╣ ┣┉┉┉┉┉┉┉┫<br />
: :<br />
╚═══════╝<br />
<br />
encrypted unencrypted<br />
blockdevice or data in RAM<br />
file on disk<br />
<br />
Similarly, on each write operation, all sectors that are affected must be re-encrypted complelety (while the rest of the sectors remain untouched). <br />
<br />
In order to be able to de/encrypt data, the disk encryption system needs to know the unique secret "key" associated with it. Whenever the encrypted block device or folder in question is to be mounted, its corresponding key (called henceforth its "master key") must be supplied. <br />
<br />
The entropy of the key is of utmost importance for the security of the encryption. A randomly generated byte string of a certain length, for example 32 bytes (256 bits), has desired properties but is not feasible to remember and apply manually during the mount. <br />
<br />
For that reason two techniques are used as aides. The first is the application of cryptography to increase the entropic property of the master key, usually involving a separate human-friendly passphrase. For the different types of encryption the [[#Comparison table]] lists respective features. The second method is to create a keyfile with high entropy and store it on a medium separate from the data drive to be encrypted. <br />
<br />
See also [[Wikipedia:Authenticated encryption]].<br />
<br />
===Keys, keyfiles and passphrases===<br />
<br />
The following are examples how to store and cryptographically secure a master key with a keyfile:<br />
<br />
;Stored in a plaintext keyfile<br />
<br />
Simply storing the master key in a file (in readable form) is the simplest option. The file - called a "keyfile" - can be placed on a USB stick that you keep in a secure location and only connect to the computer when you want to mount the encrypted parts of the disk (e.g. during boot or login).<br />
<br />
;Stored in passphrase-protected form in a keyfile or on the disk itself<br />
<br />
The master key (and thus the encrypted data) can be protected with a secret passphrase, which you will have to remember and enter each time you want to mount the encrypted block device or folder. See [[#Cryptographic metadata]] below for details.<br />
<br />
;Randomly generated on-the-fly for each session<br />
<br />
In some cases, e.g. when encrypting swap space or a {{ic|/tmp}} partition, it is not necessary to keep a persistent master key at all. A new throwaway key can be randomly generated for each session, without requiring any user interaction. This means that once unmounted, all files written to the partition in question can never be decrypted again by ''anyone'' - which in those particular use-cases is perfectly fine.<br />
<br />
===Cryptographic metadata===<br />
<br />
Frequently the encryption techniques use cryptographic functions to enhance the security of the master key itself. On mount of the encrypted device the passphrase or keyfile is passed through these and only the result can unlock the master key to decrypt the data. <br />
<br />
A common setup is to apply so-called "key stretching" to the passphrase (via a "key derivation function"), and use the resulting enhanced passphrase as the mount key for decrypting the actual master key (which has been previously stored in encrypted form):<br />
<br />
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈┈┈╮<br />
┊ mount passphrase ┊━━━━━⎛key derivation⎞━━━▶┊ mount key ┊<br />
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ,───⎝ function ⎠ ╰┈┈┈┈┈┬┈┈┈┈┈╯<br />
╭──────╮ ╱ │<br />
│ salt │───────────´ │<br />
╰──────╯ │<br />
╭─────────────────────╮ ▼ ╭┈┈┈┈┈┈┈┈┈┈┈┈╮<br />
│ encrypted master key│━━━━━━━━━━━━━━━━━━━━━━(decryption)━━━▶┊ master key ┊<br />
╰─────────────────────╯ ╰┈┈┈┈┈┈┈┈┈┈┈┈╯<br />
<br />
The '''key derivation function''' (e.g. PBKDF2 or scrypt) is deliberately slow (it applies many iterations of a hash function, e.g. 1000 iterations of HMAC-SHA-512), so that brute-force attacks to find the passphrase are rendered infeasible. For the normal use-case of an authorized user, it will only need to be calculated once per session, so the small slowdown is not a problem.<br />
It also takes an additional blob of data, the so-called "'''salt'''", as an argument - this is randomly generated once during set-up of the disk encryption and stored unprotected as part of the cryptographic metadata. Because it will be a different value for each setup, this makes it infeasible for attackers to speed up brute-force attacks using precomputed tables for the key derivation function.<br />
<br />
The '''encrypted master key''' can be stored on disk together with the encrypted data. This way, the confidentiality of the encrypted data depends completely on the secret passphrase. <br />
<br />
Additional security can be attained by instead storing the encrypted master key in a keyfile on e.g. a USB stick. This provides '''two-factor authentication''': Accessing the encrypted data now requires something only you ''know'' (the passphrase), and additionally something only you ''have'' (the keyfile).<br />
<br />
Another way of achieving two-factor authentication is to augment the above key retrieval scheme to mathematically "combine" the passphrase with byte data read from one or more external files (located on a USB stick or similar), before passing it to the key derivation function.The files in question can be anything, e.g. normal JPEG images, which can be beneficial for [[#Plausible deniability]]. They are still called "keyfiles" in this context, though.<br />
<br />
After it has been derived, the master key is securely stored in memory (e.g. in a kernel keyring), for as long as the encrypted block device or folder is mounted.<br />
<br />
It is usually not used for de/encrypting the disk data directly, though.<br />
For example, in the case of stacked filesystem encryption, each file can be automatically assigned its own encryption key. Whenever the file is to be read/modified, this file key first needs to be decrypted using the main key, before it can itself be used to de/encrypt the file contents:<br />
<br />
╭┈┈┈┈┈┈┈┈┈┈┈┈╮<br />
┊ master key ┊<br />
''file on disk:'' ╰┈┈┈┈┈┬┈┈┈┈┈┈╯<br />
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ │<br />
╎╭───────────────────╮╎ ▼ ╭┈┈┈┈┈┈┈┈┈┈╮<br />
╎│ encrypted file key│━━━━(decryption)━━━▶┊ file key ┊<br />
╎╰───────────────────╯╎ ╰┈┈┈┈┬┈┈┈┈┈╯<br />
╎┌───────────────────┐╎ ▼ ┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐<br />
╎│ encrypted file │◀━━━━━━━━━━━━━━━━━(de/encryption)━━━▶┊ readable file ┊<br />
╎│ contents │╎ ┊ contents ┊<br />
╎└───────────────────┘╎ └┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘<br />
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘<br />
<br />
In a similar manner, a separate key (e.g. one per folder) may be used for the encryption of file names in the case of stacked filesystem encryption.<br />
<br />
In the case of block device encryption one master key is used per device and, hence, all data. Some methods offer features to assign multiple passphrases/keyfiles for the same device and others not. Some use above mentioned functions to secure the master key and others give the control over the key security fully to the user. Two examples are explained by the cryptographic parameters used by [[dm-crypt]] in plain or LUKS modes. <br />
<br />
When comparing the parameters used by both modes one notes that dm-crypt plain mode has parameters relating to how to locate the keyfile (e.g. {{ic|--keyfile-size}}, {{ic|--keyfile-offset}}). The dm-crypt LUKS mode does not need these, because each blockdevice contains a header with the cryptographic metadata at the beginning. The header includes the used cipher, the encrypted master-key itself and parameters required for its derivation for decryption. The latter parameters in turn result from options used during initial encryption of the master-key (e.g. {{ic|--iter-time}}, {{ic|--use-random}}). <br />
<br />
For the dis-/advantages of the different techniques, please refer back to [[#Comparison table]] or browse the specific pages. <br />
<br />
See also:<br />
* [[Wikipedia:Passphrase]]<br />
* [[Wikipedia:Key (cryptography)]]<br />
* [[Wikipedia:Key management]]<br />
* [[Wikipedia:Key derivation function]]<br />
<br />
===Ciphers and modes of operation===<br />
<br />
The actual algorithm used for translating between pieces of unencrypted and encrypted data (so-called "plaintext" and "ciphertext") which correspond to each other with respect to a given encryption key, is called a "'''cipher'''".<br />
<br />
Disk encryption employs "block ciphers", which operate on fixed-length blocks of data, e.g. 16 bytes (128 bits). At the time of this writing, the predominantly used ones are:<br />
{| class="wikitable" style="margin:0 5em 1.5em 5em;"<br />
! scope="col" style="text-align:left" | <br />
! scope="col" style="text-align:left" | block&nbsp;size<br />
! scope="col" style="text-align:left" | key&nbsp;size<br />
! scope="col" style="text-align:left" | comment<br />
|-<br />
! scope="row" style="text-align:right" | [[Wikipedia:Advanced_Encryption_Standard|AES]]<br />
| 128 bits<br />
| 128, 192 or 256 bits<br />
| ''approved by the NSA for protecting "SECRET" and "TOP SECRET" classified US-government information (when used with a key size of 192 or 256 bits)''<br />
|-<br />
! scope="row" style="text-align:right" | [[wikipedia:Blowfish (cipher)|Blowfish]]<br />
| 64 bits<br />
| 32–448 bits<br />
| ''one of the first patent-free secure ciphers that became publicly available, hence very well established on Linux''<br />
|-<br />
! scope="row" style="text-align:right" | [[Wikipedia:Twofish|Twofish]]<br />
| 128 bits<br />
| 128, 192 or 256 bits<br />
| ''developed as successor of Blowfish, but has not attained as much widespread usage''<br />
|-<br />
! scope="row" style="text-align:right" | [[wikipedia:Serpent (cipher)|Serpent]]<br />
| 128 bits<br />
| 128, 192 or 256 bits<br />
| Considered the most secure of the five AES-competition finalists[[#See also|[10]]][[#See also|[11]]][[#See also|[12]]].<br />
|}<br />
<br />
Encrypting/decrypting a sector ([[#Basic principle|see above]]) is achieved by dividing it into small blocks matching the cipher's block-size, and following a certain rule-set (a so-called "'''mode of operation'''") for how to consecutively apply the cipher to the individual blocks.<br />
<br />
Simply applying it to each block separately without modification (dubbed the "''electronic codebook (ECB)''" mode) would not be secure, because if the same 16 bytes of plaintext always produce the same 16 bytes of ciphertext, an attacker could easily recognize patterns in the ciphertext that is stored on disk.<br />
<br />
The most basic (and common) mode of operation used in practice is "''cipher-block chaining (CBC)''". When encrypting a sector with this mode, each block of plaintext data is combined in a mathematical way with the ciphertext of the previous block, before encrypting it using the cipher. For the first block, since it has no previous ciphertext to use, a special pre-generated data block stored with the sector's cryptographic metadata and called an "'''initialization vector (IV)'''" is used:<br />
<br />
╭──────────────╮<br />
│initialization│<br />
│vector │<br />
╰────────┬─────╯<br />
╭ ╠══════════╣ ╭─key │ ┣┉┉┉┉┉┉┉┉┉┉┫ <br />
│ ║ ║ ▼ ▼ ┋ ┋ . START<br />
┴ ║"????????"║◀━━━━(cipher)━━━━(+)━━━━━┋"Hello, W"┋ block ╱╰────┐<br />
sector n ║ ║ ┋ ┋ 1 ╲╭────┘<br />
of file or ║ ║──────────────────╮ ┋ ┋ ' <br />
blockdevice ╟──────────╢ ╭─key │ ┠┈┈┈┈┈┈┈┈┈┈┨<br />
┬ ║ ║ ▼ ▼ ┋ ┋<br />
│ ║"????????"║◀━━━━(cipher)━━━━(+)━━━━━┋"orld !!!"┋ block<br />
│ ║ ║ ┋ ┋ 2<br />
│ ║ ║──────────────────╮ ┋ ┋<br />
│ ╟──────────╢ │ ┠┈┈┈┈┈┈┈┈┈┈┨<br />
│ ║ ║ ▼ ┋ ┋<br />
: : ... : ... ... : ... : ...<br />
<br />
ciphertext plaintext<br />
on disk in RAM<br />
<br />
When decrypting, the procedure is reversed analogously.<br />
<br />
One thing worth noting is the generation of the unique initialization vector for each sector. The simplest choice is to calculate it in a predictable fashion from a readily available value such as the sector number. However, this might allow an attacker with repeated access to the system to perform a so-called [[wikipedia:Watermarking_attack|watermarking attack]]. To prevent that, a method called "Encrypted salt-sector initialization vector ('''ESSIV''')" can be used to generate the initialization vectors in a way that makes them look completely random to a potential attacker.<br />
<br />
There are also a number of other, more complicated modes of operation available for disk encryption, which already provide built-in security against such attacks (and hence do not require ESSIV).<br />
Some can also additionally guarantee authenticity of the encrypted data (i.e. confirm that it has not been modified/corrupted by someone who does not have access to the key).<br />
<br />
See also:<br />
* [[Wikipedia:Disk encryption theory]]<br />
* [[Wikipedia:Block cipher]]<br />
* [[Wikipedia:Block cipher modes of operation]]<br />
<br />
===Plausible deniability===<br />
<br />
See [[Wikipedia:Plausible deniability]].<br />
<br />
== See also ==<br />
<br />
# [[#Summary|^]] see http://www.truecrypt.org/legal/license<br />
# [[#Practical implications|^]] well, a single file in those filesystems could be used as a container (virtual loop-back device!) but then one would not actually be using the filesystem (and the features it provides) anymore<br />
# [[#Compatibility & prevalence|^]] [http://www.scherrer.cc/crypt CrossCrypt] {{Dead link|2015|01|20}} - Open Source AES and TwoFish Linux compatible on the fly encryption for Windows XP and Windows 2000<br />
# [[#Compatibility & prevalence|^]] (1) [http://sourceforge.net/projects/freeotfe.mirror/ FreeOTFE (on sf.net)] (2) [http://web.archive.org/web/20130531062457/http://freeotfe.org/ FreeOTFE (archived)] - supports Windows 2000 and later (for PC), and Windows Mobile 2003 and later (for PDA)<br />
# [[#Compatibility & prevalence|^]] see [http://www.arg0.net/encfs-mac-build EncFs build instructions for Mac]<br />
# [[#Compatibility & prevalence|^]] see http://www.freshports.org/sysutils/fusefs-encfs/<br />
# [[#Compatibility & prevalence|^]] see http://www.chromium.org/chromium-os/chromiumos-design-docs/protecting-cached-user-data<br />
# [[#Compatibility & prevalence|^]] http://kernelnewbies.org/Linux_2_6_38#head-49f5f735853f8cc7c4d89e5c266fe07316b49f4c<br />
# [[#Compatibility & prevalence|^]] http://members.ferrara.linux.it/freddy77/encfs.html<br />
# [[#Compatibility & prevalence|^]] http://csrc.nist.gov/archive/aes/round2/r2report.pdf<br />
# [[#Compatibility & prevalence|^]] https://www.cl.cam.ac.uk/~rja14/Papers/serpentcase.pdf<br />
# [[#Compatibility & prevalence|^]] https://www.cl.cam.ac.uk/~rja14/Papers/serpent.pdf<br />
# [[#Performance features|^]] https://github.com/vgough/encfs/issues/118<br />
# [[#Compatibility & prevalence|^]] <s>[https://github.com/t-d-k/doxbox DOXBOX]</s> renamed into [https://github.com/t-d-k/LibreCrypt LibreCrypt] - support to open dm-crypt / LUKS in newer Windows releases (includes fork from OTFE). Project seems to be abandoned by developer, with multiple open issues.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Google_Authenticator&diff=497721Google Authenticator2017-11-21T15:38:26Z<p>Nodiscc: add inline link to wikipedia 'One-Time pad' page</p>
<hr />
<div>[[Category:Secure Shell]]<br />
[[es:Google Authenticator]]<br />
[[ja:Google Authenticator]]<br />
[[ru:Google Authenticator]]<br />
[[zh-hans:Google Authenticator]]<br />
[https://github.com/google/google-authenticator Google Authenticator] provides a two-step authentication procedure using one-time passcodes ([[Wikipedia:One-time pad|OTP]]). The OTP generator application is available for iOS, Android and Blackberry. Similar to [[S/KEY Authentication]] the authentication mechanism integrates into the Linux [[PAM]] system. This guide shows the installation and configuration of this mechanism.<br />
<br />
For the reverse operation (generating codes compatible with Google Authenticator under Linux) see [[#Code generation]] below.<br />
==Installation==<br />
<br />
Install {{AUR|libpam-google-authenticator}} package. Development version is also available with {{AUR|google-authenticator-libpam-git}}.<br />
<br />
==Setting up the PAM==<br />
<br />
{{Warning|If you do all configuration via SSH do not close the session before you tested that everything is working, else you may lock yourself out. Furthermore consider generating the key file before activating the PAM.}}<br />
<br />
Usually one demands two-pass authentication only for remote login. The corresponding PAM configuration file is {{ic|/etc/pam.d/sshd}}. In case you want to use Google Authenticator globally you would need to change {{ic|/etc/pam.d/system-auth}}, however, in this case proceed with extreme caution to not lock yourself out.<br />
In this guide we proceed with editing {{ic|/etc/pam.d/sshd}} which is most safely (but not necessarily) done in a local session.<br />
<br />
To enter both, your unix password and your OTP, add {{ic|pam_google_authenticator.so}} above the system-remote-login lines to {{ic|/etc/pam.d/sshd}}:<br />
<br />
'''auth required pam_google_authenticator.so'''<br />
auth include system-remote-login<br />
account include system-remote-login<br />
password include system-remote-login<br />
session include system-remote-login<br />
<br />
This will ask for the OTP before prompting for your Unix password. Changing the order of the two modules will reverse this order.<br />
<br />
{{Warning|Only users that have generated a secret key file (see below) will be allowed to log in using SSH.}}<br />
<br />
To allow login with either the OTP or your Unix password use:<br />
<br />
auth '''sufficient''' pam_google_authenticator.so<br />
<br />
Enable challenge-response authentication in {{ic|/etc/ssh/'''sshd_config'''}}:<br />
ChallengeResponseAuthentication yes<br />
Finally, [[reload]] the {{ic|sshd}} service.<br />
<br />
{{Warning|OpenSSH will ignore all of this if you are authenticating with a SSH-key pair and have [[Secure Shell#Force public key authentication|disabled password logins]]. However, as of OpenSSH 6.2, you can add {{ic|AuthenticationMethods}} to allow both: two-factor and key-based authentication. See [[Secure Shell#Two-factor authentication and public keys]].}}<br />
<br />
==Generating a secret key file==<br />
{{Tip|Install {{Pkg|qrencode}} to generate a scannable QR. Scan the QR with the authenticator app to automatically configure the key.}}<br />
<br />
Every user who wants to use two-pass authentication needs to generate a secret key file in his home folder.<br />
This can very easily be done using ''google-authenticator'': <br />
<br />
$ google-authenticator<br />
Do you want authentication tokens to be time-based (y/n) y<br />
<Here you will see generated QR code><br />
Your new secret key is: ZVZG5UZU4D7MY4DH<br />
Your verification code is 269371<br />
Your emergency scratch codes are:<br />
70058954<br />
97277505<br />
99684896<br />
56514332<br />
82717798<br />
<br />
Do you want me to update your "/home/username/.google_authenticator" file (y/n) y<br />
<br />
Do you want to disallow multiple uses of the same authentication<br />
token? This restricts you to one login about every 30s, but it increases<br />
your chances to notice or even prevent man-in-the-middle attacks (y/n) y<br />
<br />
By default, tokens are good for 30 seconds and in order to compensate for<br />
possible time-skew between the client and the server, we allow an extra<br />
token before and after the current time. If you experience problems with poor<br />
time synchronization, you can increase the window from its default<br />
size of 1:30min to about 4min. Do you want to do so (y/n) n<br />
<br />
If the computer that you are logging into is not hardened against brute-force<br />
login attempts, you can enable rate-limiting for the authentication module.<br />
By default, this limits attackers to no more than 3 login attempts every 30s.<br />
Do you want to enable rate-limiting (y/n) y<br />
<br />
It is recommended to '''store the emergency scratch codes safely''' (print them out and keep them in a safe location) as they are your only way to log in (via SSH) when you lost your mobile phone (i.e. your OTP-generator). They are also stored in {{ic|~/.google_authenticator}}, so you can look them up any time as long as you are logged in.<br />
<br />
==Setting up your OTP-generator==<br />
Install generator application on your mobile phone from [http://m.google.com/authenticator Android market] (e.g. [https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp FreeOTP]) or from [https://f-droid.org/repository/browse/?fdfilter=google&fdid=com.google.android.apps.authenticator2 F-Droid].<br />
In the applications menu click the corresponding button to create a new account and either scan the QR code from the URL you were told when generating the secret key file, or enter the secret key (in the example above 'ZVZG5UZU4D7MY4DH') manually.<br />
<br />
Now you should see a new passcode token being generated every 30 seconds on your phone.<br />
<br />
==Testing==<br />
SSH to your host from another machine and/or from another terminal window:<br />
<br />
$ ssh hostname<br />
login as: <username><br />
Verification code: <generated/backup-code><br />
Password: <password><br />
$<br />
<br />
==Storage location==<br />
If you want to change the secret key files' storage path, you can use the flag {{ic|--secret}}:<br />
<br />
$ google-authenticator --secret="/'''PATH_FOLDER'''/'''USERNAME'''"<br />
<br />
Then, don't forget to change the location path for PAM, in {{ic|/etc/pam.d/sshd}}:<br />
<br />
{{hc|/etc/pam.d/sshd|2=<br />
auth required pam_google_authenticator.so user=root secret=/'''PATH_FOLDER'''/${USER}<br />
}}<br />
<br />
{{ic|user&#61;root}} is used to force PAM to search the file using root user.<br />
<br />
Also, take care with the permissions of the secret key file. Indeed, the file '''must''' be only-readable by the owner (chmod: {{ic|400}}). Here, the owner is root.<br />
<br />
$ chown root.root /'''PATH_FILE'''/'''SECRET_KEY_FILES'''<br />
chmod 400 /'''PATH_FILE'''/'''SECRET_KEY_FILES'''<br />
<br />
==Desktop logins==<br />
The Google Authenticator PAM plugin can also be used for console logins and with GDM. Just add the following to {{ic|/etc/pam.d/login}} or the {{ic|/etc/pam.d/gdm-password}} file:<br />
<br />
auth required pam_google_authenticator.so<br />
<br />
==Code generation==<br />
If you have Google Authenticator configured with other systems, then losing your device can prevent you from being able to log in to those systems. Having additional ways to generate the codes can be helpful.<br />
<br />
===Command line===<br />
The easiest way to generate codes is with {{ic|oath-tool}}. It is available in the {{ic|oath-toolkit}} package, and can be used as follows:<br />
<br />
oathtool --totp -b ABC123<br />
<br />
Where {{ic|ABC123}} is the secret key.<br />
<br />
On most Android systems with sufficient user access, the Google Authenticator database can be copied off the device and accessed directly, as it is an sqlite3 database. This shell script will read a Google Authenticator database and generate live codes for each key found:<br />
<br />
{{hc|google-authenticator.sh|2=<br />
#!/bin/sh<br />
<br />
# This is the path to the Google Authenticator app file. It's typically located<br />
# in /data under Android. Copy it to your PC in a safe location and specify the<br />
# path to it here.<br />
DB="/path/to/com.google.android.apps.authenticator/databases/databases"<br />
<br />
sqlite3 "$DB" 'SELECT email,secret FROM accounts;' {{!}} while read A<br />
do<br />
NAME=`echo "$A" {{!}} cut -d '{{!}}' -f 1`<br />
KEY=`echo "$A" {{!}} cut -d '{{!}}' -f 2`<br />
CODE=`oathtool --totp -b "$KEY"`<br />
echo -e "\e[1;32m$CODE\e[0m - \e[1;33m$NAME\e[0m"<br />
done<br />
}}</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Arch_terminology&diff=497720Arch terminology2017-11-21T15:35:46Z<p>Nodiscc: /* udev */ add inline link to sysfs wikipedia page</p>
<hr />
<div>[[Category:About Arch]]<br />
[[cs:Arch Terminology]]<br />
[[es:Arch Terminology]]<br />
[[ja:Arch 用語集]]<br />
[[pt:Arch terminology]]<br />
[[ru:Arch Terminology]]<br />
[[zh-hans:Arch terminology]]<br />
This page is intended to be a page to demystify common terms used among the Arch Linux community. Feel free to add or modify any terms, but please use that particular section's edit option. If you decide to add one, please put it in alphabetical order.<br />
<br />
== ABS ==<br />
<br />
The [[Arch Build System]] (ABS) is useful to:<br />
<br />
* Make new packages of software for which no packages are yet available<br />
* Customize/modify existing packages to fit your needs (enabling or disabling options)<br />
* Re-build your entire system using your compiler flags, "a la Gentoo" <br />
* Getting kernel modules working with your custom kernel<br />
<br />
ABS is not necessary to use Arch Linux, but it is useful. <br />
<br />
== Arch Linux ==<br />
<br />
Arch should be referred to as:<br />
*'''Arch Linux'''<br />
*'''Arch''' (Linux implied)<br />
*'''archlinux''' (UNIX name)<br />
<br />
Archlinux, ArchLinux, archLinux, aRcHlInUx, etc. are all weird, and weirder mutations.<br />
<br />
Officially, the 'Arch' in "Arch Linux" is pronounced /ˈɑrtʃ/ as in an "archer"/bowman, or "arch-nemesis", and not as in "ark" or "archangel".<br />
<br />
== Arch Linux Archive ==<br />
<br />
The [[Arch Linux Archive]] (a.k.a ALA), formerly known as Arch Linux Rollback Machine (a.k.a ARM), stores official repositories snapshots, ISO images and bootstrap tarballs across time.<br />
<br />
== AUR ==<br />
<br />
The [[Arch User Repository]] (AUR) is a community-driven repository for Arch users. It contains package descriptions ([[PKGBUILD]]s) that allow you to compile a package from source with [[makepkg]] and then install it via [[pacman#Additional commands|pacman]]. The AUR was created to organize and share new packages from the community and to help expedite popular packages' inclusion into the [[community]] repository. This document explains how users can access and utilize the AUR.<br />
<br />
A good number of new packages that enter the official repositories start in the AUR. In the AUR, users are able to contribute their own package builds (PKGBUILD and related files). The AUR community has the ability to vote for or against packages in the AUR. If a package becomes popular enough &mdash; provided it has a compatible license and good packaging technique &mdash; it may be entered into the ''community'' repository (directly accessible by [[pacman]] or [[abs]]).<br />
<br />
You can access the Arch Linux User Community Repository [https://aur.archlinux.org here].<br />
<br />
==bbs==<br />
'''B'''ulletin '''b'''oard '''s'''ystem, but in Arch's case, it is just the support forum located [https://bbs.archlinux.org here].<br />
<br />
==community/[community]==<br />
The ''community'' repository is where pre-built packages are made available by [[Trusted Users]]. A majority of the packages in community come from the [[AUR]].<br />
<br />
==core/[core]==<br />
The ''core'' repository contains the bare packages needed for an Arch Linux system. core has everything needed to get a working command-line system.<br />
<br />
==custom/user repository==<br />
Anyone can create a repository and put it online for other users. To create a repository, you need a set of packages and a [[pacman]]-compatible database file for your packages. Host your files online and everyone will be able to use your repository by adding it as a regular repository.<br />
<br />
See [[Custom local repository]].<br />
<br />
==Developer==<br />
Half-gods working to improve Arch for no financial gain. [https://www.archlinux.org/people/developers/ Developers] are outranked only by our gods, Judd Vinet and Aaron Griffin, who in turn are outranked by tacos.<br />
<br />
==extra/[extra]==<br />
Arch's official package set is fairly streamlined, but we supplement this with a larger, more complete ''extra'' repository that contains a lot of the stuff that never made it into our core package set. This repository is constantly growing with the help of packages submitted from our strong community.<br />
This is where desktop environments, window managers and common programs are found.<br />
<br />
==initramfs==<br />
See [[mkinitcpio]].<br />
<br />
==initrd==<br />
<br />
Obsolete. Nowadays often used as a synonym for initramfs.<br />
<br />
== KISS ==<br />
<br />
Acronym of Keep It Simple, Stupid. [[Arch_Linux#Simplicity|Simplicity]] is a main principle Arch Linux tries to achieve.<br />
<br />
==makepkg==<br />
[[makepkg]] will build packages for you. makepkg will read the metadata required from a [[PKGBUILD]] file.<br />
All it needs is a build-capable Linux platform, {{pkg|wget}}, and some build scripts. The advantage to a script-based build is that you only really do the work once. Once you have the build script for a package, you just need to run makepkg and it will do the rest: download and validate source files, check dependencies, configure the build time settings, build the package, install the package into a temporary root, make customizations, generate meta-info, and package the whole thing up for [[pacman]] to use.<br />
<br />
==namcap==<br />
[[namcap]] is a package analysis utility that looks for problems with Arch Linux packages or their [[PKGBUILD]] files. It can apply rules to the file list, the files themselves, or individual PKGBUILD files.<br />
<br />
Rules return lists of messages. Each message can be one of three types: error, warning, or information (think of them as notes or comments). Errors (designated by 'E:') are things that namcap is very sure are wrong and need to be fixed. Warnings (designated by 'W:') are things that namcap thinks should be changed but if you know what you are doing then you can leave them. Information (designated 'I:') are only shown when you use the info argument. Information messages give information that might be helpful but is not anything that needs changing.<br />
<br />
==package==<br />
A package is an archive containing<br />
* all of the (compiled) files of an application<br />
* metadata about the application, such as application name, version, dependencies, ...<br />
* installation files and directives for [[pacman]]<br />
* (optionally) extra files to make your life easier, such as a start/stop script<br />
Arch's package manager pacman can install, update, and remove those packages. Using packages instead of compiling and installing programs yourself has various benefits:<br />
* easily updatable: pacman will update existing packages as soon as updates are available<br />
* dependency checks: pacman handles dependencies for you, you only need to specify the program and pacman installs it together with every other program it needs<br />
* clean removal: pacman has a list of every file in a package. This way, no files are left behind when you decide to remove a package.<br />
<br />
{{Note|Different GNU/Linux distributions use different packages and package managers, meaning that you cannot use pacman to install a Debian package on Arch.}}<br />
<br />
==Package maintainer==<br />
The role of the package maintainer is to update packages as new versions become available upstream and to field support questions relating to bugs in said packages. The term may be applied to any of the following:<br />
<br />
* A core Arch Linux developer who maintains a software package in one of the official repositories (core, extra, or testing).<br />
* A [[AUR Trusted User Guidelines|Trusted User]] of the community who maintains software packages in the unsupported/unofficial community repository.<br />
* A normal user who maintains a [[PKGBUILD]] and local source files in the [[AUR]].<br />
<br />
The maintainer of a package is the person currently responsible for the package. Previous maintainers should be listed as contributors in the PKGBUILD along with others who have contributed to the package.<br />
<br />
==pacman==<br />
The [[pacman]] [[Wikipedia:Package manager|package manager]] is one of the major distinguishing features of Arch Linux. It combines a simple binary package format with an easy-to-use [[Arch Build System|build system]]. The goal of ''pacman'' is to make it possible to easily manage packages, whether they are from the [[official repositories]] or the user's own builds.<br />
<br />
''pacman'' keeps the system up to date by synchronizing package lists with the master server. This server/client model also allows the user to download/install packages with a simple command, complete with all required dependencies.<br />
<br />
NB: Pacman was written by Judd Vinet, the creator of Arch Linux. It is used as a package management tool by other distributions as well, such as FrugalWare, Rubix, UfficioZero (in Italy, based on Ubuntu), and, of course, [[Arch based distributions]] such as Archie and AEGIS.<br />
<br />
==pacman.conf==<br />
This is the configuration file of [[pacman]]. It is located in {{ic|/etc}}. For a full explanation of its powers, type this at the command {{ic|man pacman.conf}}.<br />
<br />
==PKGBUILD==<br />
[[PKGBUILD]]s are small scripts that are used to build Arch Linux packages. See [[Creating packages]] for more detail.<br />
<br />
==repository/repo==<br />
The repository has the pre-compiled packages of one or (usually) more [[PKGBUILD]]s. [[Official repositories]] are split into different parts for easy maintaince. Pacman uses these repositories to search for packages and install them. A repository can be local (i.e. on your own computer) or remote (i.e. the packages are downloaded before they are installed).<br />
<br />
==[[Wikipedia:RTFM|RTFM]]==<br />
<br />
{{Merge|Code of conduct#Common sense introduction|Not an "Arch terminology", really.}}<br />
<br />
"Read The Fine Manual". This simple message is replied to a lot of new Linux/Arch users who ask about the functionality of a program when it is clearly defined in the program's manual.<br />
<br />
It is often used when a user fails to make any attempt to find a solution to the problem themselves. If someone tells you this, they are not trying to offend you; they are just frustrated with your lack of effort. <br />
<br />
The best thing to do if you are told to do this is to read the manual page.<br />
* To read the program manual page for a particular program named as PROGRAM-NAME, type this at the command line: {{ic|man PROGRAM-NAME}}.<br />
<br />
If you do not find the answer to your question in the program manual, there are more ways to find the answer. You can:<br />
* search the [[Special:Search|wiki]]<br />
* search the [https://bbs.archlinux.org forum]<br />
* search the [https://www.google.com/#hl=en&q=arch+site:archlinux.org%2Fpipermail%2F mailing lists]<br />
* search the [https://www.google.com web]<br />
<br />
==testing/[testing]==<br />
This is the repository where major packages/updates to packages are kept prior to release into the main repositories, so they can be bug tested and upgrade issues can be found. It is disabled by default but can be enabled in {{ic|/etc/pacman.conf}}<br />
<br />
== The Arch Way ==<br />
The unofficial term traditionally used to refer to the main [[Arch Linux#Principles|Arch Linux principles]].<br />
<br />
==TU, Trusted User==<br />
A [[trusted user]] is someone who maintains the AUR and the [community] repository.<br />
Trusted Users may move a package into the [community] repository if it has been voted as popular.<br />
TUs are appointed by a majority vote by the existing TUs.<br />
<br />
Trusted users follow the [[AUR Trusted User Guidelines]] and [https://aur.archlinux.org/trusted-user/TUbylaws.html TU by-laws]<br />
<br />
==udev==<br />
[[udev]] provides a dynamic device directory containing only the files for actually present devices. It creates or removes device node files in the {{ic|/dev}} directory, or it renames network interfaces.<br />
<br />
Usually udev runs as udevd(8) and receives uevents directly from the kernel if a device is added/removed to/from the system.<br />
<br />
If udev receives a device event, it matches its configured rules against the available device attributes provided in [[Wikipedia:sysfs|sysfs]] to identify the device. Rules that match may provide additional device information or specify a device node name and multiple symlink names and instruct udev to run additional programs as part of the device event handling.<br />
<br />
==[[Wikipedia:Wiki|wiki]]==<br />
[[Main page|This!]] A place to find documentation about Arch Linux. Anyone can add and modify the documentation.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=RAID&diff=497719RAID2017-11-21T15:30:56Z<p>Nodiscc: /* See also */ add mdadm wikipedia page link</p>
<hr />
<div>[[Category:File systems]]<br />
[[es:RAID]]<br />
[[it:RAID]]<br />
[[ja:RAID]]<br />
[[ru:RAID]]<br />
[[zh-hans:RAID]]<br />
{{Related articles start}}<br />
{{Related|Software RAID and LVM}}<br />
{{Related|Installing with Fake RAID}}<br />
{{Related|Convert a single drive system to RAID}}<br />
{{Related|ZFS}}<br />
{{Related|Experimenting with ZFS}}<br />
{{Related|Swap#Striping}}<br />
{{Related|Btrfs#RAID}}<br />
{{Related articles end}}<br />
{{Style|Non-standard headers, other [[Help:Style]] issues}}<br />
This article explains what RAID is and how to create/manage a software RAID array using mdadm.<br />
<br />
== Introduction ==<br />
<br />
See also [[Wikipedia:RAID]].<br />
<br />
Redundant Array of Independent Disks (RAID) is a storage technology that combines multiple disk drive components (typically disk drives or partitions thereof) into a logical unit. Depending on the RAID implementation, this logical unit can be a file system or an additional transparent layer that can hold several partitions. Data is distributed across the drives in one of several ways called "RAID levels", depending on the level of redundancy and performance required. The RAID level chosen can thus prevent data loss in the event of a hard disk failure, increase performance or be a combination of both.<br />
<br />
Despite redundancy implied by most RAID levels, RAID does not guarantee that data is safe. A RAID will not protect data if there is a fire, the computer is stolen or multiple hard drives fail at once. Furthermore, installing a system with RAID is a complex process that may destroy data. {{Warning|Therefore, be sure [[Backup programs|to back up]] all data before proceeding.}}<br />
<br />
{{Note|Users considering a RAID array for data storage/redundancy should also consider RAIDZ which is implemented via [[ZFS]], a more modern and powerful alternative to software RAID.}}<br />
<br />
===Standard RAID levels===<br />
There are many different [[Wikipedia:Standard RAID levels|levels of RAID]], please find hereafter the most commonly used ones.<br />
<br />
; [[Wikipedia:Standard RAID levels#RAID 0|RAID 0]]<br />
: Uses striping to combine disks. Even though it ''does not provide redundancy'', it is still considered RAID. It does, however, ''provide a big speed benefit''. If the speed increase is worth the possibility of data loss (for [[swap]] partition for example), choose this RAID level. On a server, RAID 1 and RAID 5 arrays are more appropriate. The size of a RAID 0 array block device is the size of the smallest component partition times the number of component partitions.<br />
; [[Wikipedia:Standard RAID levels#RAID 1|RAID 1]]<br />
: The most straightforward RAID level: straight mirroring. As with other RAID levels, it only makes sense if the partitions are on different physical disk drives. If one of those drives fails, the block device provided by the RAID array will continue to function as normal. The example will be using RAID 1 for everything except [[swap]] and temporary data. Please note that with a software implementation, the RAID 1 level is the only option for the boot partition, because bootloaders reading the boot partition do not understand RAID, but a RAID 1 component partition can be read as a normal partition. The size of a RAID 1 array block device is the size of the smallest component partition.<br />
; [[Wikipedia:Standard RAID levels#RAID 5|RAID 5]]<br />
: Requires 3 or more physical drives, and provides the redundancy of RAID 1 combined with the speed and size benefits of RAID 0. RAID 5 uses striping, like RAID 0, but also stores parity blocks ''distributed across each member disk''. In the event of a failed disk, these parity blocks are used to reconstruct the data on a replacement disk. RAID 5 can withstand the loss of one member disk.<br />
: {{Note|RAID 5 is a common choice due to its combination of speed and data redundancy. The caveat is that if one drive were to fail and another drive failed before that drive was replaced, all data will be lost. Furthermore, with modern disk sizes and expected unrecoverable read error (URE) rates on consumer disks, the rebuild of a 4TiB array is '''expected''' (i.e. higher than 50% chance) to have at least one URE. Because of this, RAID 5 is no longer advised by the storage industry.}}<br />
; [[Wikipedia:Standard RAID levels#RAID 6|RAID 6]]<br />
: Requires 4 or more physical drives, and provides the benefits of RAID 5 but with security against two drive failures. RAID 6 also uses striping, like RAID 5, but stores two distinct parity blocks ''distributed across each member disk''. In the event of a failed disk, these parity blocks are used to reconstruct the data on a replacement disk. RAID 6 can withstand the loss of two member disks. The robustness against unrecoverable read errors is somewhat better, because the array still has parity blocks when rebuilding from a single failed drive. However, given the overhead, RAID 6 is costly and in most settings RAID 10 in far2 layout (see below) provides better speed benefits and robustness, and is therefore preferred.<br />
<br />
===Nested RAID levels===<br />
; [[Wikipedia:Nested RAID levels#RAID 1 + 0|RAID 1+0]]<br />
: RAID1+0 is a nested RAID that combines two of the standard levels of RAID to gain performance and additional redundancy. It is commonly referred to as ''RAID10'', however, Linux MD RAID10 is slightly different from simple RAID layering, see below.<br />
<br />
; [[Wikipedia:Non-standard_RAID_levels#Linux_MD_RAID_10|RAID 10]]<br />
: RAID10 under Linux is built on the concepts of RAID1+0, however, it implements this as a single layer, with multiple possible layouts.<br />
<br />
: The ''near X'' layout on Y disks repeats each chunk X times on Y/2 stripes, but does not need X to divide Y evenly. The chunks are placed on almost the same location on each disk they're mirrored on, hence the name. It can work with any number of disks, starting at 2. Near 2 on 2 disks is equivalent to RAID1, near 2 on 4 disks to RAID1+0.<br />
<br />
: The ''far X'' layout on Y disks is designed to offer striped read performance on a mirrored array. It accomplishes this by dividing each disk in two sections, say front and back, and what is written to disk 1 front is mirrored in disk 2 back, and vice versa. This has the effect of being able to stripe sequential reads, which is where RAID0 and RAID5 get their performance from. The drawback is that sequential writing has a very slight performance penalty because of the distance the disk needs to seek to the other section of the disk to store the mirror. RAID10 in far 2 layout is, however, preferable to layered RAID1+0 '''and''' RAID5 whenever read speeds are of concern and availability / redundancy is crucial. However, it is still not a substitute for backups. See the wikipedia page for more information.<br />
<br />
=== RAID level comparison ===<br />
{| class="wikitable"<br />
! RAID level!!Data redundancy!!Physical drive utilization!!Read performance!!Write performance!!Min drives<br />
|-<br />
| '''0'''||{{No}}||100%||nX<br />
<br />
'''Best'''<br />
||nX<br />
<br />
'''Best'''<br />
||2<br />
|-<br />
| '''1'''||{{Yes}}||50%||Up to nX if multiple processes are reading, otherwise 1X<br />
||1X||2<br />
|-<br />
| '''5'''||{{Yes}}||67% - 94%||(n−1)X<br />
<br />
'''Superior'''<br />
||(n−1)X<br />
<br />
'''Superior'''<br />
||3<br />
|-<br />
| '''6'''||{{Yes}}||50% - 88%||(n−2)X||(n−2)X||4<br />
|-<br />
| '''10,far2'''||{{Yes}}||50%||nX<br />
'''Best;''' on par with RAID0 but redundant<br />
||(n/2)X||2<br />
|-<br />
| '''10,near2'''||{{Yes}}||50%||Up to nX if multiple processes are reading, otherwise 1X||(n/2)X||2<br />
|}<br />
<nowiki>*</nowiki> Where ''n'' is standing for the number of dedicated disks.<br />
<br />
== Implementation ==<br />
The RAID devices can be managed in different ways:<br />
<br />
; Software RAID<br />
: This is the easiest implementation as it does not rely on obscure proprietary firmware and software to be used. The array is managed by the operating system either by:<br />
:* by an abstraction layer (e.g. [[#Installation|mdadm]]); {{Note|This is the method we will use later in this guide.}}<br />
:* by a logical volume manager (e.g. [[LVM]]);<br />
:* by a component of a file system (e.g. [[ZFS]], [[Btrfs]]).<br />
<br />
; Hardware RAID<br />
: The array is directly managed by a dedicated hardware card installed in the PC to which the disks are directly connected. The RAID logic runs on an on-board processor independently of [[Wikipedia:Central processing unit|the host processor (CPU)]]. Although this solution is independent of any operating system, the latter requires a driver in order to function properly with the hardware RAID controller. The RAID array can either be configured via an option rom interface or, depending on the manufacturer, with a dedicated application when the OS has been installed. The configuration is transparent for the Linux kernel: it doesn't see the disks separately.<br />
<br />
; [[Fakeraid|FakeRAID]]<br />
: This type of RAID is properly called BIOS or Onboard RAID, but is falsely advertised as hardware RAID. The array is managed by pseudo-RAID controllers where the RAID logic is implemented in an option rom or in the firmware itself [http://www.win-raid.com/t19f13-Intel-EFI-RAID-quot-SataDriver-quot-BIOS-Modules.html with a EFI SataDriver] (in case of [[UEFI]]), but are not full hardware RAID controllers with ''all'' RAID features implemented. Therefore, this type of RAID is sometimes called FakeRAID. {{Pkg|dmraid}} from the [[official repositories]], will be used to deal with these controllers. Here are some examples of FakeRAID controllers: [[Wikipedia:Intel Rapid Storage Technology|Intel Rapid Storage]], JMicron JMB36x RAID ROM, AMD RAID, ASMedia 106x, and NVIDIA MediaShield.<br />
<br />
===Which type of RAID do I have?===<br />
<br />
Since software RAID is implemented by the user, the type of RAID is easily known to the user.<br />
<br />
However, discerning between FakeRAID and true hardware RAID can be more difficult. As stated, manufacturers often incorrectly distinguish these two types of RAID and false advertising is always possible. The best solution in this instance is to run the {{ic|lspci}} command and looking through the output to find the RAID controller. Then do a search to see what information can be located about the RAID controller. Hardware RAID controllers appear in this list, but FakeRAID implementations do not. Also, true hardware RAID controller are often rather expensive (~$400+), so if someone customized the system, then it is very likely that choosing a hardware RAID setup made a very noticeable change in the computer's price.<br />
<br />
== Installation ==<br />
<br />
Install {{Pkg|mdadm}} from the [[official repositories]]. ''mdadm'' is used for administering pure software RAID using plain block devices: the underlying hardware does not provide any RAID logic, just a supply of disks. ''mdadm'' will work with any collection of block devices. Even if unusual. For example, one can thus make a RAID array from a collection of thumb drives.<br />
<br />
===Prepare the Devices===<br />
<br />
{{Warning|These steps erase everything on a device, so type carefully!}}<br />
<br />
If the device is being reused or re-purposed from an existing array, erase any old RAID configuration information:<br />
# mdadm --misc --zero-superblock /dev/<drive><br />
<br />
or if a particular partition on a drive is to be deleted:<br />
# mdadm --misc --zero-superblock /dev/<partition><br />
<br />
{{Note|<br />
* Zapping a partition's superblock should not affect the other partitions on the disk.<br />
* Due to the nature of RAID functionality it is very difficult to [[Securely wipe disk]]s fully on a running array. Consider whether it is useful to do so before creating it.}}<br />
<br />
===Create the Partition Table (GPT)===<br />
<br />
It is highly recommended to pre-partition the disks to be used in the array. Since most RAID users are selecting HDDs >2 TB, GPT partition tables are required and recommended. Disks are easily partitioned using {{Pkg|gptfdisk}} or cgdisk if you're running from archiso.<br />
<br />
* After created, the partition type should be assigned hex code FD00.<br />
* If a larger disk array is employed, consider assigning [[Persistent_block_device_naming#by-label|disk labels]] or [[Persistent_block_device_naming#by-partlabel|partition labels]] to make it easier to identify an individual disk later. <br />
* Creating partitions that are of the same size on each of the devices is preferred.<br />
* A good tip is to leave approx 100 MB at the end of the device when partitioning. See below for rationale.<br />
<br />
<br />
<br />
====Partitions Types for MBR====<br />
<br />
For those creating partitions on HDDs with a MBR partition table, the partition types available for use are:<br />
<br />
* 0xDA (for non-fs data -- current recommendation by [https://raid.wiki.kernel.org/index.php/Partition_Types kernel.org])<br />
* 0xFD (for raid autodetect arrays -- was useful before booting an initrd to load kernel modules)<br />
<br />
{{Note|It is also possible to create a RAID directly on the raw disks (without partitions), but not recommended because it can cause problems when swapping a failed disk.}}<br />
<br />
When replacing a failed disk of a RAID, the new disk has to be exactly the same size as the failed disk or bigger — otherwise the array recreation process will not work. Even hard drives of the same manufacturer and model can have small size differences. By leaving a little space at the end of the disk unallocated one can compensate for the size differences between drives, which makes choosing a replacement drive model easier. Therefore, '''it is good practice to leave about 100 MB of unallocated space at the end of the disk.'''<br />
<br />
=== Build the Array ===<br />
<br />
{{Warning|Kernel versions 4.2.x and 4.3.x currently have an active bug that prevents them from assembling a RAID10 array; users needing this layout are encouraged to use kernel version 4.1.x series provided by {{pkg|linux-lts}} until this bug is fixed. References are provided in the [[#See also]] section.}}<br />
<br />
Use {{ic|mdadm}} to build the array. Several examples are given below.<br />
<br />
{{Warning|Do not simply copy/paste the examples below; use your brain and substitute the correct options/drive letters!}}<br />
<br />
{{Note|If this is a RAID1 array which is intended to boot from [[Syslinux]] a limitation in syslinux v4.07 requires the metadata value to be 1.0 rather than the default of 1.2.}}<br />
<br />
The following example shows building a 2-device RAID1 array:<br />
<br />
# mdadm --create --verbose --level=1 --metadata=1.2 --raid-devices=2 /dev/md0 /dev/sdb1 /dev/sdc1<br />
<br />
The following example shows building a RAID5 array with 4 active devices and 1 spare device:<br />
<br />
# mdadm --create --verbose --level=5 --metadata=1.2 --chunk=256 --raid-devices=4 /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1<br />
<br />
:{{Tip|{{ic|--chunk}} was used in the previous example to change the chunk size from the default value. See [http://www.zdnet.com/article/chunks-the-hidden-key-to-raid-performance/ Chunks: the hidden key to RAID performance] for more on chunk size optimisation.}}<br />
<br />
The following example shows building a RAID10,far2 array with 2 devices:<br />
<br />
# mdadm --create --verbose --level=10 --metadata=1.2 --chunk=512 --raid-devices=2 --layout=f2 /dev/md0 /dev/sdb1 /dev/sdc1<br />
<br />
{{Tip| The {{ic|--homehost}} and {{ic|--name}} options can be used for a custom raid device name. They are delimited by a colon in the resulting name.}}<br />
<br />
The array is created under the virtual device {{ic|/dev/mdX}}, assembled and ready to use (in degraded mode). One can directly start using it while mdadm resyncs the array in the background. It can take a long time to restore parity. Check the progress with:<br />
<br />
$ cat /proc/mdstat<br />
<br />
=== Update configuration file ===<br />
<br />
By default, most of {{ic|mdadm.conf}} is commented out, and it contains just the following:<br />
<br />
{{hc|/etc/mdadm.conf|DEVICE partitions}}<br />
<br />
This directive tells mdadm to examine the devices referenced by {{ic|/proc/partitions}} and assemble as many arrays as possible. This is fine if you really do want to start all available arrays and are confident that no unexpected superblocks will be found (such as after installing a new storage device). A more precise approach is as follows:<br />
# echo 'DEVICE partitions' > /etc/mdadm.conf<br />
# mdadm --detail --scan >> /etc/mdadm.conf<br />
<br />
This results in something like the following:<br />
{{hc|/etc/mdadm.conf|2=<br />
DEVICE partitions<br />
ARRAY /dev/md/0 metadata=1.2 name=pine:0 UUID=27664f0d:111e493d:4d810213:9f291abe<br />
}}<br />
<br />
This also causes mdadm to examine the devices referenced by {{ic|/proc/partitions}}. However, only devices that have superblocks with a UUID of {{ic|27664…}} are assembled in to active arrays.<br />
<br />
See {{ic|mdadm.conf(5)}} for more information.<br />
<br />
===Assemble the Array===<br />
<br />
Once the configuration file has been updated the array can be assembled using mdadm:<br />
<br />
# mdadm --assemble --scan<br />
<br />
===Format the RAID Filesystem===<br />
<br />
The array can now be formatted like any other disk, just keep in mind that:<br />
* Due to the large volume size not all filesystems are suited (see: [[Wikipedia:Comparison of file systems#Limits|File system limits]]).<br />
* The filesystem should support growing and shrinking while online (see: [[Wikipedia:Comparison of file systems#Features|File system features]]).<br />
* One should calculate the correct stride and stripe-width for optimal performance.<br />
<br />
==== Calculating the Stride and Stripe Width ====<br />
<br />
Two parameters are required to optimise the filesystem structure to fit optimally within the underlying RAID structure: the ''stride'' and ''stripe width''. These are derived from the RAID ''chunk size'', the filesystem ''block size'', and the ''number of "data disks"''.<br />
<br />
The chunk size is a property of the RAID array, decided at the time of its creation. {{ic|mdadm}}'s current default is 512 KiB. It can be found with {{ic|mdadm}}:<br />
<br />
# mdadm --detail /dev/mdX | grep 'Chunk Size'<br />
<br />
The block size is a property of the filesystem, decided at ''its'' creation. The default for many filesystems, including ext4, is 4 KiB. See {{ic|/etc/mke2fs.conf}} for details on ext4.<br />
<br />
The number of "data disks" is the minimum number of devices in the array required to completely rebuild it without data loss. For example, this is N for a raid0 array of N devices and N-1 for raid5.<br />
<br />
Once you have these three quantities, the stride and the stripe width can be calculated using the following formulas:<br />
<br />
stride = chunk size / block size<br />
stripe width = number of data disks * stride<br />
<br />
<br />
===== Example 1. RAID0 =====<br />
<br />
Example formatting to ext4 with the correct stripe width and stride:<br />
* Hypothetical RAID0 array is composed of 2 physical disks.<br />
* Chunk size is 64 KiB.<br />
* Block size is 4 KiB.<br />
<br />
stride = chunk size / block size.<br />
In this example, the math is 64/4 so the stride = 16.<br />
<br />
stripe width = # of physical '''data''' disks * stride.<br />
In this example, the math is 2*16 so the stripe width = 32.<br />
<br />
# mkfs.ext4 -v -L myarray -m 0.5 -b 4096 -E stride=16,stripe-width=32 /dev/md0<br />
<br />
===== Example 2. RAID5 =====<br />
<br />
Example formatting to ext4 with the correct stripe width and stride:<br />
* Hypothetical RAID5 array is composed of 4 physical disks; 3 data discs and 1 parity disc.<br />
* Chunk size is 512 KiB.<br />
* Block size is 4 KiB.<br />
<br />
stride = chunk size / block size.<br />
In this example, the math is 512/4 so the stride = 128.<br />
<br />
stripe width = # of physical '''data''' disks * stride.<br />
In this example, the math is 3*128 so the stripe width = 384.<br />
<br />
# mkfs.ext4 -v -L myarray -m 0.01 -b 4096 -E stride=128,stripe-width=384 /dev/md0<br />
<br />
For more on stride and stripe width, see: [http://wiki.centos.org/HowTos/Disk_Optimization RAID Math].<br />
<br />
===== Example 3. RAID10,far2 =====<br />
<br />
Example formatting to ext4 with the correct stripe width and stride:<br />
* Hypothetical RAID10 array is composed of 2 physical disks. Because of the properties of RAID10 in far2 layout, both count as data disks.<br />
* Chunk size is 512 KiB.<br />
# mdadm --detail /dev/md0 | grep 'Chunk Size'<br />
Chunk Size : 512K<br />
* Block size is 4 KiB.<br />
<br />
stride = chunk size / block size.<br />
In this example, the math is 512/4 so the stride = 128.<br />
<br />
stripe width = # of physical '''data''' disks * stride.<br />
In this example, the math is 2*128 so the stripe width = 256.<br />
<br />
# mkfs.ext4 -v -L myarray -m 0.01 -b 4096 -E stride=128,stripe-width=256 /dev/md0<br />
<br />
== Mounting from a Live CD ==<br />
<br />
Users wanting to mount the RAID partition from a Live CD, use:<br />
<br />
# mdadm --assemble /dev/<disk1> /dev/<disk2> /dev/<disk3> /dev/<disk4><br />
<br />
If your RAID 1 that's missing a disk array was wrongly auto-detected as RAID 1 (as per {{ic|mdadm --detail /dev/md<number>}}) and reported as inactive (as per {{ic|cat /proc/mdstat}}), stop the array first:<br />
<br />
# mdadm --stop /dev/md<number><br />
<br />
== Installing Arch Linux on RAID ==<br />
{{Note|The following section is applicable only if the root filesystem resides on the array. Users may skip this section if the array holds a data partition(s).}}<br />
You should create the RAID array between the [[Partitioning]] and [[File systems#Format a device|formatting]]{{Broken section link}} steps of the Installation Procedure. Instead of directly formatting a partition to be your root file system, it will be created on a RAID array.<br />
Follow the section [[#Setup]]{{Broken section link}} to create the RAID array. Then continue with the installation procedure until the pacstrap step is completed.<br />
When using [[Unified Extensible Firmware Interface|UEFI boot]], also read [[EFI System Partition#ESP on RAID|ESP on RAID]].<br />
<br />
=== Update configuration file ===<br />
{{Note|This should be done outside of the chroot, hence the prefix /mnt to the filepath.}}<br />
After the base system is installed the default configuration file, {{ic|mdadm.conf}}, must be updated like so:<br />
# mdadm --detail --scan >> /mnt/etc/mdadm.conf<br />
<br />
Always check the mdadm.conf configuration file using a text editor after running this command to ensure that its contents look reasonable.<br />
{{Note|To prevent failure of '''mdmonitor''' at boot (enabled by default), you will need to uncomment '''MAILADDR''' and provide an e-mail address and/or application to handle notification of problems with your array at the bottom of mdadm.conf.}}<br />
Continue with the installation procedure until you reach the step “Create initial ramdisk environment”, then follow the next section.<br />
<br />
=== Add mdadm hook to mkinitcpio.conf ===<br />
<br />
{{Accuracy|1=[[Mkinitcpio#Common hooks]] also suggests adding {{ic|mdmon}} to the {{ic|BINARIES}} section. See also [https://bbs.archlinux.org/viewtopic.php?id=148947] and [http://unix.stackexchange.com/questions/57440/cant-remount-local-file-systems-for-read-write-raid1].}}<br />
<br />
{{Note|This should be done whilst chrooted.}}<br />
<br />
Add {{ic|mdadm_udev}} to the [[Mkinitcpio#HOOKS|HOOKS]] section of the {{ic|mkinitcpio.conf}} to add support for mdadm directly into the init image:<br />
<br />
HOOKS="base udev autodetect block '''mdadm_udev''' filesystems usbinput fsck"<br />
<br />
Then [[Mkinitcpio#Image creation and activation|Regenerate the initramfs image]].<br />
<br />
=== Configure the boot loader ===<br />
<br />
{{Accuracy|1=[[Mkinitcpio#Using_RAID]] says kernel parameters are no longer needed. Also can refer to the RAID device via {{ic|/dev/md/label\:0}}}}<br />
<br />
Add an {{ic|md}} [[kernel parameter]] for each RAID array; also point the {{ic|root}} parameter to the correct mapped device. The following example accommodates three RAID 1 arrays and sets the second one as root:<br />
<br />
root=/dev/md1 md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
If booting from a software raid partition fails using the kernel device node method above, an alternative and more reliable way is to use [[Persistent block device naming]], for example:<br />
<br />
root=LABEL=Root_Label<br />
<br />
See also [[GRUB#RAID]].<br />
<br />
== RAID Maintenance ==<br />
=== Scrubbing ===<br />
It is good practice to regularly run data [[wikipedia:Data_scrubbing|scrubbing]] to check for and fix errors. Depending on the size/configuration of the array, a scrub may take multiple hours to complete.<br />
<br />
To initiate a data scrub:<br />
# echo check > /sys/block/md0/md/sync_action<br />
<br />
The check operation scans the drives for bad sectors and automatically repairs them. If it finds good sectors that contain bad data (the data in a sector does not agree with what the data from another disk indicates that it should be, for example the parity block + the other data blocks would cause us to think that this data block is incorrect), then no action is taken, but the event is logged (see below). This "do nothing" allows admins to inspect the data in the sector and the data that would be produced by rebuilding the sectors from redundant information and pick the correct data to keep.<br />
<br />
As with many tasks/items relating to mdadm, the status of the scrub can be queried by reading {{ic|/proc/mdstat}}.<br />
<br />
Example:<br />
{{hc|$ cat /proc/mdstat|<nowiki><br />
Personalities : [raid6] [raid5] [raid4] [raid1] <br />
md0 : active raid1 sdb1[0] sdc1[1]<br />
3906778112 blocks super 1.2 [2/2] [UU]<br />
[>....................] check = 4.0% (158288320/3906778112) finish=386.5min speed=161604K/sec<br />
bitmap: 0/30 pages [0KB], 65536KB chunk<br />
</nowiki>}}<br />
<br />
To stop a currently running data scrub safely:<br />
# echo idle > /sys/block/md0/md/sync_action<br />
<br />
{{Note|If the system is rebooted after a partial scrub has been suspended, the scrub will start over.}}<br />
<br />
When the scrub is complete, admins may check how many blocks (if any) have been flagged as bad:<br />
# cat /sys/block/md0/md/mismatch_cnt<br />
<br />
==== General Notes on Scrubbing ====<br />
{{Note|Users may alternatively echo '''repair''' to /sys/block/md0/md/sync_action but this is ill-advised since if a mismatch in the data is encountered, it would be automatically updated to be consistent. The danger is that we really don't know whether it's the parity or the data block that's correct (or which data block in case of RAID1). It's luck-of-the-draw whether or not the operation gets the right data instead of the bad data.}}<br />
<br />
It is a good idea to set up a cron job as root to schedule a periodic scrub. See {{AUR|raid-check}} which can assist with this. To perform a periodic scrub using systemd timers instead of cron, See {{AUR|raid-check-systemd}} which contains the same script along with associated systemd timer unit files. (note: for typical platter drives, scrubbing can take approximately '''six seconds per gigabyte''' [that's one hour forty-five minutes per terabyte] so plan the start of your cron job or timer appropriately)<br />
<br />
==== RAID1 and RAID10 Notes on Scrubbing ====<br />
Due to the fact that RAID1 and RAID10 writes in the kernel are unbuffered, an array can have non-0 mismatch counts even when the array is healthy. These non-0 counts will only exist in transient data areas where they don't pose a problem. However, we can't tell the difference between a non-0 count that is just in transient data or a non-0 count that signifies a real problem. This fact is a source of false positives for RAID1 and RAID10 arrays. It is however still recommended to scrub regularly in order to catch and correct any bad sectors that might be present in the devices.<br />
<br />
===Removing Devices from an Array===<br />
One can remove a device from the array after marking it as faulty:<br />
# mdadm --fail /dev/md0 /dev/sdxx<br />
<br />
Now remove it from the array:<br />
# mdadm --remove /dev/md0 /dev/sdxx<br />
<br />
Remove device permanently (for example, to use it individually from now on):<br />
Issue the two commands described above then:<br />
<br />
# mdadm --zero-superblock /dev/sdxx<br />
<br />
{{Warning | '''DO NOT''' issue this command on linear or RAID0 arrays or data '''LOSS''' will occur!}}<br />
{{Warning | Reusing the removed disk without zeroing the superblock '''WILL CAUSE LOSS OF ALL DATA''' on the next boot. (After mdadm will try to use it as the part of the raid array).}}<br />
<br />
Stop using an array:<br />
# Umount target array<br />
# Stop the array with: {{ic|mdadm --stop /dev/md0}}<br />
# Repeat the three command described in the beginning of this section on each device.<br />
# Remove the corresponding line from /etc/mdadm.conf<br />
<br />
=== Adding a New Device to an Array ===<br />
Adding new devices with mdadm can be done on a running system with the devices mounted.<br />
Partition the new device using the same layout as one of those already in the arrays as discussed above.<br />
<br />
Assemble the RAID array if it is not already assembled:<br />
# mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1<br />
<br />
Add the new device the array:<br />
# mdadm --add /dev/md0 /dev/sdc1<br />
<br />
This should not take long for mdadm to do. Again, check the progress with:<br />
# cat /proc/mdstat<br />
<br />
Check that the device has been added with the command:<br />
# mdadm --misc --detail /dev/md0<br />
<br />
{{Note|For RAID0 arrays you may get the following error message:<br />
mdadm: add new device failed for /dev/sdc1 as 2: Invalid argument<br />
This is because the above commands will add the new disk as a "spare" but RAID0 doesn't have spares. If you want to add a device to a RAID0 array, you need to "grow" and "add" in the same command. This is demonstrated below:<br />
# mdadm --grow /dev/md0 --raid-devices<nowiki>=</nowiki>3 --add /dev/sdc1<br />
}}<br />
<br />
=== Increasing Size of a RAID Volume ===<br />
<br />
If larger disks are installed in a RAID array or partition size has been increased, it may be desirable to increase the size of the RAID volume to fill the larger available space. This process may be begun by first following the above sections pertaining to replacing disks. Once the RAID volume has been rebuilt onto the larger disks it must be "grown" to fill the space.<br />
# mdadm --grow /dev/md0 --size=max<br />
Next, partitions present on the RAID volume {{ic|/dev/md0}} may need to be resized. See [[Partitioning]] for details. Finally, the filesystem on the above mentioned partition will need to be resized. If partitioning was performed with {{ic|gparted}} this will be done automatically. If other tools were used, unmount and then resize the filesystem manually.<br />
{{bc|<br />
# umount /storage<br />
# fsck.ext4 -f /dev/md0p1<br />
# resize2fs /dev/md0p1<br />
}}<br />
<br />
=== Change sync speed limits ===<br />
<br />
Syncing can take a while. If the machine is not needed for other tasks the speed limit can be increased.<br />
<br />
{{hc|# cat /proc/mdstat|<nowiki><br />
Personalities : [raid1] <br />
md0 : active raid1 sda3[2] sdb3[1]<br />
155042219 blocks super 1.2 [2/1] [_U]<br />
[>....................] recovery = 0.0% (77696/155042219) finish=265.8min speed=9712K/sec<br />
<br />
unused devices: <none><br />
</nowiki>}}<br />
<br />
Check the current speed limit.<br />
<br />
{{hc|# cat /proc/sys/dev/raid/speed_limit_min|<br />
1000<br />
}}<br />
{{hc|# cat /proc/sys/dev/raid/speed_limit_max|<br />
200000<br />
}}<br />
<br />
Increase the limits.<br />
<br />
# echo 400000 >/proc/sys/dev/raid/speed_limit_min<br />
# echo 400000 >/proc/sys/dev/raid/speed_limit_max<br />
<br />
Then check out the syncing speed and estimated finish time.<br />
<br />
{{hc|# cat /proc/mdstat|<nowiki><br />
Personalities : [raid1] <br />
md0 : active raid1 sda3[2] sdb3[1]<br />
155042219 blocks super 1.2 [2/1] [_U]<br />
[>....................] recovery = 1.3% (2136640/155042219) finish=158.2min speed=16102K/sec<br />
<br />
unused devices: <none><br />
</nowiki>}}<br />
<br />
<br />
See also [[sysctl#MDADM]].<br />
<br />
== Monitoring ==<br />
A simple one-liner that prints out the status of the RAID devices:<br />
{{hc|awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}' </proc/mdstat<br />
|md1: [UU]<br />
md0: [UU]<br />
}}<br />
<br />
===Watch mdstat===<br />
{{bc|watch -t 'cat /proc/mdstat'}}<br />
Or preferably using {{pkg|tmux}}<br />
{{bc|tmux split-window -l 12 "watch -t 'cat /proc/mdstat'"}}<br />
<br />
===Track IO with iotop===<br />
The {{pkg|iotop}} package displays the input/output stats for processes. Use this command to view the IO for raid threads.<br />
<br />
{{bc|<nowiki>iotop -a -p $(sed 's, , -p ,g' <<<`pgrep "_raid|_resync|jbd2"`)</nowiki>}}<br />
<br />
===Track IO with iostat===<br />
<br />
The ''iostat'' utility from {{Pkg|sysstat}} package displays the input/output statistics for devices and partitions.<br />
<br />
iostat -dmy 1 /dev/md0<br />
iostat -dmy 1 # all<br />
<br />
===Mailing on events===<br />
A smtp mail server (sendmail) or at least an email forwarder (ssmtp/msmtp) is required to accomplish this. Perhaps the most simplistic solution is to use {{AUR|dma}} which is very tiny (installs to 0.08 MiB) and requires no setup.<br />
<br />
Edit {{ic|/etc/mdadm.conf}} defining the email address to which notifications will be received. <br />
{{Note|If using dma as mentioned above, users may simply mail directly to the username on the localhost rather than to an external email address.}}<br />
<br />
To test the configuration:<br />
# mdadm --monitor --scan --oneshot --test<br />
<br />
[[mdadm]] includes a systemd service (mdmonitor.service) to perform the monitoring task, so at this point, you have nothing left to do. If you do not set a mail address in {{ic|/etc/mdadm.conf}}, that service will fail. If you do not want to receive mail on mdadm events, the failure can be ignored; if you don't want notifications and are sensitive about failure messages, you can mask the unit.<br />
<br />
==== Alternative method ====<br />
<br />
To avoid the installation of a smtp mail server or an email forwarder you can use the [[S-nail]] tool (don't forget to setup) already on your system.<br />
<br />
Create a file named {{ic|/etc/mdadm_warning.sh}} with:<br />
<br />
#!/bin/bash<br />
event=$1<br />
device=$2<br />
<br />
echo " " | /usr/bin/mailx -s "$event on $device" '''destination@email.com'''<br />
<br />
And give it execution permissions {{ic|chmod +x /etc/mdadm_warning.sh}}<br />
<br />
Then add this to the mdadm.conf<br />
<br />
PROGRAM /etc/mdadm_warning.sh<br />
<br />
To test and enable use the same as in the previous method.<br />
<br />
==Troubleshooting==<br />
If you are getting error when you reboot about "invalid raid superblock magic" and you have additional hard drives other than the ones you installed to, check that your hard drive order is correct. During installation, your RAID devices may be hdd, hde and hdf, but during boot they may be hda, hdb and hdc. Adjust your kernel line accordingly. This is what happened to me anyway.<br />
<br />
===Error: "kernel: ataX.00: revalidation failed"===<br />
If you suddenly (after reboot, changed BIOS settings) experience Error messages like:<br />
<br />
Feb 9 08:15:46 hostserver kernel: ata8.00: revalidation failed (errno=-5)<br />
<br />
Is doesn't necessarily mean that a drive is broken. You often find panic links on the web which go for the worst. In a word, No Panic. Maybe you just changed APIC or ACPI settings within your BIOS or Kernel parameters somehow. Change them back and you should be fine. Ordinarily, turning ACPI and/orACPI off should help.<br />
<br />
===Start arrays read-only===<br />
When an md array is started, the superblock will be written, and resync may begin. To start read-only set the kernel module {{ic|md_mod}} parameter {{ic|start_ro}}. When this is set, new arrays get an 'auto-ro' mode, which disables all internal io (superblock updates, resync, recovery) and is automatically switched to 'rw' when the first write request arrives.<br />
<br />
{{Note|The array can be set to true 'ro' mode using {{ic|mdadm --readonly}} before the first write request, or resync can be started without a write using {{ic|mdadm --readwrite}}.}}<br />
<br />
To set the parameter at boot, add {{ic|<nowiki>md_mod.start_ro=1</nowiki>}} to your kernel line.<br />
<br />
Or set it at module load time from {{ic|/etc/modprobe.d/}} file or from directly from {{ic|/sys/}}.<br />
{{bc|echo 1 > /sys/module/md_mod/parameters/start_ro}}<br />
<br />
===Recovering from a broken or missing drive in the raid===<br />
You might get the above mentioned error also when one of the drives breaks for whatever reason. In that case you will have to force the raid to still turn on even with one disk short. Type this (change where needed):<br />
# mdadm --manage /dev/md0 --run<br />
<br />
Now you should be able to mount it again with something like this (if you had it in fstab):<br />
# mount /dev/md0<br />
<br />
Now the raid should be working again and available to use, however with one disk short! So, to add that one disc partition it the way like described above in [[#Prepare the Devices|Prepare the device]]. Once that is done you can add the new disk to the raid by doing:<br />
# mdadm --manage --add /dev/md0 /dev/sdd1<br />
<br />
If you type:<br />
# cat /proc/mdstat<br />
you probably see that the raid is now active and rebuilding.<br />
<br />
You also might want to update your configuration (see: [[#Update configuration file]]).<br />
<br />
== Benchmarking ==<br />
There are several tools for benchmarking a RAID. The most notable improvement is the speed increase when multiple threads are reading from the same RAID volume.<br />
<br />
{{AUR|tiobench}} specifically benchmarks these performance improvements by measuring fully-threaded I/O on the disk.<br />
<br />
{{Pkg|bonnie++}} tests database type access to one or more files, and creation, reading, and deleting of small files which can simulate the usage of programs such as Squid, INN, or Maildir format e-mail. The enclosed [http://www.coker.com.au/bonnie++/zcav/ ZCAV] program tests the performance of different zones of a hard drive without writing any data to the disk.<br />
<br />
{{ic|hdparm}} should '''NOT''' be used to benchmark a RAID, because it provides very inconsistent results.<br />
<br />
== See also ==<br />
* [http://www.gentoo.org/doc/en/articles/software-raid-p1.xml Software RAID in the new Linux 2.4 kernel, Part 1] and [http://www.gentoo.org/doc/en/articles/software-raid-p2.xml Part 2] in the Gentoo Linux Docs<br />
* [http://raid.wiki.kernel.org/index.php/Linux_Raid Linux RAID wiki entry] on The Linux Kernel Archives<br />
* [https://raid.wiki.kernel.org/index.php/Write-intent_bitmap How Bitmaps Work]<br />
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-raid.html Chapter 15: Redundant Array of Independent Disks (RAID)] of Red Hat Enterprise Linux 6 Documentation<br />
* [http://tldp.org/FAQ/Linux-RAID-FAQ/x37.html Linux-RAID FAQ] on the Linux Documentation Project<br />
* [http://support.dell.com/support/topics/global.aspx/support/entvideos/raid?c=us&l=en&s=gen Dell.com Raid Tutorial] - Interactive Walkthrough of Raid<br />
* [http://www.miracleas.com/BAARF/ BAARF] including ''[http://www.miracleas.com/BAARF/RAID5_versus_RAID10.txt Why should I not use RAID 5?]'' by Art S. Kagel<br />
* [http://www.linux-mag.com/id/7924/ Introduction to RAID], [http://www.linux-mag.com/id/7931/ Nested-RAID: RAID-5 and RAID-6 Based Configurations], [http://www.linux-mag.com/id/7928/ Intro to Nested-RAID: RAID-01 and RAID-10], and [http://www.linux-mag.com/id/7932/ Nested-RAID: The Triple Lindy] in Linux Magazine<br />
* [http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html HowTo: Speed Up Linux Software Raid Building And Re-syncing]<br />
* [http://fomori.org/blog/?p=94 RAID5-Server to hold all your data]<br />
<br />
'''Active bugs'''<br />
* [http://marc.info/?l=linux-raid&m=144960710718870&w=2 linux-raid ML #1]<br />
* [http://marc.info/?l=linux-raid&m=144830809503689&w=2 linux-raid ML #2]<br />
<br />
'''mdadm'''<br />
* [http://anonscm.debian.org/gitweb/?p=pkg-mdadm/mdadm.git;a=blob_plain;f=debian/FAQ;hb=HEAD Debian mdadm FAQ]<br />
* [http://www.kernel.org/pub/linux/utils/raid/mdadm/ mdadm source code]<br />
* [http://www.linux-mag.com/id/7939/ Software RAID on Linux with mdadm] in Linux Magazine<br />
* [[Wikipedia:mdadm|Wikipedia - mdadm]]<br />
<br />
'''Forum threads'''<br />
* [http://forums.overclockers.com.au/showthread.php?t=865333 Raid Performance Improvements with bitmaps]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=125445 GRUB and GRUB2]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=123698 Can't install grub2 on software RAID]<br />
* [http://forums.gentoo.org/viewtopic-t-888624-start-0.html Use RAID metadata 1.2 in boot and root partition]<br />
<br />
'''RAID with encryption'''<br />
* [http://www.shimari.com/dm-crypt-on-raid/ Linux/Fedora: Encrypt /home and swap over RAID with dm-crypt] by Justin Wells</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Docker&diff=497718Docker2017-11-21T15:29:17Z<p>Nodiscc: See also: add wikipedia page link</p>
<hr />
<div>[[Category:Virtualization]]<br />
[[ja:Docker]]<br />
[[ru:Docker]]<br />
[[zh-hant:Docker]]<br />
{{Related articles start}}<br />
{{Related|systemd-nspawn}}<br />
{{Related|Linux Containers}}<br />
{{Related|Lxc-systemd}}<br />
{{Related|Vagrant}}<br />
{{Related articles end}}<br />
[https://www.docker.com Docker] is a utility to pack, ship and run any application as a lightweight container.<br />
<br />
== Installation ==<br />
<br />
{{Note|<br />
*Docker does not support i686 [https://github.com/docker/docker/issues/136].<br />
*Docker needs the {{ic|loop}} module on first usage. The following steps may be required before starting docker:<br />
# tee /etc/modules-load.d/loop.conf <<< "loop"<br />
# modprobe loop <br />
You may need to reboot before the module is available.<br />
<br />
The error message from not enabling the loop module may look like this:<br />
'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay<br />
}}<br />
<br />
[[Install]] the {{Pkg|docker}} package or, for the development version, the {{Aur|docker-git}} package. Next [[start]] and enable {{ic|docker.service}} and verify operation:<br />
<br />
# docker info<br />
<br />
If you want to be able to run docker as a regular user, add yourself to the {{ic|docker}} [[group]].<br />
<br />
{{Warning|Anyone added to the {{ic|docker}} group is root equivalent. More information [https://github.com/docker/docker/issues/9976 here] and [http://docs.docker.com/engine/articles/security/ here].}}<br />
<br />
Then re-login or to make your current user session aware of this new group, you can use:<br />
<br />
$ newgrp docker<br />
<br />
== Configuration ==<br />
<br />
=== Storage driver ===<br />
<br />
The docker storage driver (or graph driver) has huge impact on performance. Its job is to store layers of container images efficiently, that is when several images share a layer, only one layer uses disk space. The compatible option, `devicemapper` offers suboptimal performance, which is outright terrible on rotating disks. Additionally, `devicemappper` is not recommended in production.<br />
<br />
As Arch linux ships new kernels, there is no point using the compatibility option. A good, modern choice is {{ic|overlay2}}.<br />
<br />
To see current storage driver, run {{ic|# docker info {{!}} head}}, modern docker installation should already use {{ic|overlay2}} by default.<br />
<br />
To set your own choice of storage driver, create a [[Drop-in snippet]] and use {{ic|-s}} option to {{ic|dockerd}} (use {{ic|systemctl edit docker}}):<br />
{{hc|/etc/systemd/system/docker.service.d/override.conf|2=<br />
[Service]<br />
ExecStart=<br />
ExecStart=/usr/bin/dockerd -H fd:// -s overlay2<br />
}}<br />
<br />
Note that the {{ic|1=ExecStart=}} line is needed to drop inherited {{ic|ExecStart}}.<br />
<br />
Further information on options is available on the [https://docs.docker.com/engine/userguide/storagedriver/selectadriver/ user guide].<br />
<br />
=== Remote API ===<br />
<br />
To open the Remote API to port {{ic|4243}} manually, run:<br />
<br />
# /usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock<br />
<br />
{{ic|-H tcp://0.0.0.0:4243}} part is for opening the Remote API.<br />
<br />
{{ic|-H unix:///var/run/docker.sock}} part for host machine access via terminal.<br />
<br />
==== Remote API with systemd ====<br />
<br />
To start the remote API with the docker daemon, create a [[Drop-in snippet]] with the following content:<br />
<br />
{{hc|/etc/systemd/system/docker.service.d/override.conf|2=<br />
[Service]<br />
ExecStart=<br />
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock<br />
}}<br />
<br />
=== Daemon socket configuration ===<br />
<br />
The ''docker'' daemon listens to a [[Wikipedia:Unix domain socket|Unix socket]] by default. To listen on a specified port instead, create a [[Drop-in snippet]] with the following content:<br />
<br />
{{hc|/etc/systemd/system/docker.socket.d/socket.conf|2=<br />
[Socket]<br />
ListenStream=0.0.0.0:2375<br />
}}<br />
<br />
=== Proxies ===<br />
<br />
Proxy configuration is broken down into two. First is the host configuration of the Docker daemon, second is the configuration required for your container to see your proxy.<br />
<br />
==== Proxy configuration ====<br />
<br />
Create a [[Drop-in snippet]] with the following content:<br />
{{hc|/etc/systemd/system/docker.service.d/proxy.conf|2=<br />
[Service]<br />
Environment="HTTP_PROXY=192.168.1.1:8080"<br />
Environment="HTTPS_PROXY=192.168.1.1:8080"<br />
}}<br />
<br />
{{Note|This assumes {{ic|192.168.1.1}} is your proxy server, do not use {{ic|127.0.0.1}}.}}<br />
<br />
Verify that the configuration has been loaded:<br />
<br />
# systemctl show docker --property Environment<br />
Environment=HTTP_PROXY=192.168.1.1:8080 HTTPS_PROXY=192.168.1.1:8080<br />
<br />
==== Container configuration ====<br />
<br />
The settings in the {{ic|docker.service}} file will not translate into containers. To achieve this you must set {{ic|ENV}} variables in your {{ic|Dockerfile}} thus:<br />
<br />
FROM base/archlinux<br />
ENV http_proxy="<nowiki>http://192.168.1.1:3128</nowiki>"<br />
ENV https_proxy="<nowiki>https://192.168.1.1:3128</nowiki>"<br />
<br />
[https://docs.docker.com/engine/reference/builder/#env Docker] provide detailed information on configuration via {{ic|ENV}} within a Dockerfile.<br />
<br />
=== Configuring DNS ===<br />
<br />
By default, docker will make {{ic|resolv.conf}} in the container match {{ic|/etc/resolv.conf}} on the host machine, filtering out local addresses (e.g. {{ic|127.0.0.1}}). If this yields an empty file, then [https://developers.google.com/speed/public-dns/ Google DNS servers] are used. If you are using a service like [[dnsmasq]] to provide name resolution, you may need to add an entry to the {{ic|/etc/resolv.conf}} for docker's network interface so that it is not filtered out.<br />
<br />
=== Running Docker with a manually-defined network ===<br />
<br />
If you manually configure your network using systemd-network version '''220 or higher''', containers you start with Docker may be unable to access your network. Beginning with version 220, the forwarding setting for a given network ({{ic|net.ipv4.conf.<interface>.forwarding}}) defaults to {{ic|off}}. This setting prevents IP forwarding. It also conflicts with Docker which enables the {{ic|net.ipv4.conf.all.forwarding}} setting within a container.<br />
<br />
To work around this, edit the {{ic|<interface>.network}} file in {{ic|/etc/systemd/network/}} on your Docker host add the following block:<br />
<br />
{{hc|/etc/systemd/network/<interface>.network|2=<br />
[Network]<br />
...<br />
IPForward=kernel<br />
...}}<br />
<br />
This configuration allows IP forwarding from the container as expected.<br />
<br />
=== Images location ===<br />
<br />
By default, docker images are located at {{ic|/var/lib/docker}}. They can be moved to other partitions. <br />
First, [[stop]] the {{ic|docker.service}}. <br />
<br />
If you have run the docker images, you need to make sure the images are unmounted totally. Once that is completed, you may move the images from {{ic|/var/lib/docker}} to the target destination.<br />
<br />
Then add a [[Drop-in snippet]] for the {{ic|docker.service}}, adding the {{ic|--data-root}} parameter to the {{ic|ExecStart}}:<br />
<br />
{{hc|/etc/systemd/system/docker.service.d/docker-storage.conf|2=<br />
[Service]<br />
ExecStart= <br />
ExecStart=/usr/bin/dockerd --data-root=''/path/to/new/location/docker'' -H fd://}}<br />
<br />
=== Insecure registries ===<br />
<br />
If you decide to use a self signed certificate for your private registry, Docker will refuse to use it until you declare that you trust it.<br />
Add a [[Drop-in snippet]] for the {{ic|docker.service}}, adding the {{ic|--insecure-registry}} parameter to the {{ic|dockerd}}:<br />
{{hc|/etc/systemd/system/docker.service.d/override.conf|2=<br />
[Service]<br />
ExecStart=<br />
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry my.registry.name:5000<br />
}}<br />
<br />
== Images ==<br />
=== Arch Linux ===<br />
The following command pulls the [https://hub.docker.com/r/archlinux/base/ archlinux/base] x86_64 image.<br />
<br />
# docker pull archlinux/base<br />
<br />
See also [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md].<br />
<br />
=== Debian ===<br />
The following command pulls the [https://hub.docker.com/r/_/debian/ debian] x86_64 image.<br />
<br />
# docker pull debian<br />
<br />
==== Manually ====<br />
Build Debian image with {{Pkg|debootstrap}}:<br />
<br />
# mkdir jessie-chroot<br />
# debootstrap jessie ./jessie-chroot http://http.debian.net/debian/<br />
# cd jessie-chroot<br />
# tar cpf - . | docker import - debian<br />
# docker run -t -i --rm debian /bin/bash<br />
<br />
== Arch Linux image with snapshot repository ==<br />
Arch Linux on Docker can become problematic when multiple images are created and updated each having different package versions. To keep Docker containers with consistent package versions, an unofficial [https://registry.hub.docker.com/u/pritunl/archlinux/ Docker image with a snapshot repository] is available. This allows installing new packages from the official repository as it was on the day that the snapshot was created.<br />
<br />
$ docker pull pritunl/archlinux:latest<br />
$ docker run --rm -t -i pritunl/archlinux:latest /bin/bash<br />
<br />
Alternatively, you could use [[Arch Linux Archive]] by freezing {{ic|/etc/pacman.d/mirrorlist}} <br />
Server=https://archive.archlinux.org/repos/2020/01/02/$repo/os/$arch<br />
<br />
== Clean Remove Docker + Images ==<br />
<br />
In case you want to remove Docker entirely you can do this by following the steps below:<br />
<br />
{{Note|Do not just copy paste those commands without making sure you know what you are doing.}}<br />
<br />
Check for running containers:<br />
<br />
# docker ps<br />
<br />
List all containers running on the host for deletion:<br />
<br />
# docker ps -a<br />
<br />
Stop a running container:<br />
<br />
# docker stop <CONTAINER ID><br />
<br />
Killing still running containers:<br />
<br />
# docker kill <CONTAINER ID><br />
<br />
Delete all containers listed by ID:<br />
<br />
# docker rm <CONTAINER ID><br />
<br />
List all Docker images:<br />
<br />
# docker images<br />
<br />
Delete all images by ID:<br />
<br />
# docker rmi <IMAGE ID><br />
<br />
Delete all Docker data (purge directory):<br />
<br />
# rm -R /var/lib/docker<br />
<br />
== Useful tips ==<br />
<br />
To grab the IP address of a running container:<br />
<br />
{{hc|<nowiki>$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-name OR id> </nowiki>|<br />
172.17.0.37}}<br />
<br />
== Troubleshooting ==<br />
=== Cannot start a container with systemd 232 ===<br />
Append {{ic|1=systemd.legacy_systemd_cgroup_controller=yes}} as [[kernel parameter]], see [https://github.com/opencontainers/runc/issues/1175 bug report] for details.<br />
<br />
=== Deleting Docker Images in a BTRFS Filesystem ===<br />
Deleting docker images in a [[btrfs]] filesystem leaves the images in {{ic|/var/lib/docker/btrfs/subvolumes/}} with a size of 0. When you try to delete this you get a permission error.<br />
# docker rm bab4ff309870<br />
# rm -Rf /var/lib/docker/btrfs/subvolumes/*<br />
rm: cannot remove '/var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab': Operation not permitted<br />
<br />
This is caused by btrfs which created subvolumes for the docker images. So the correct command to delete them is:<br />
# btrfs subvolume delete /var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab<br />
<br />
=== docker0 Bridge gets no IP / no internet access in containers ===<br />
<br />
Docker enables IP forwarding by itself, but by default systemd overrides the respective sysctl setting. The following disables this override (for all interfaces):<br />
# cat > /etc/systemd/network/ipforward.network <<EOF<br />
[Network]<br />
IPForward=kernel<br />
EOF<br />
<br />
# cat > /etc/sysctl.d/99-docker.conf <<EOF<br />
net.ipv4.ip_forward = 1<br />
EOF<br />
<br />
# sysctl -w net.ipv4.ip_forward=1<br />
<br />
{{Accuracy|Add a reference/bug-report link to the following note.}}<br />
<br />
{{Note|It has been observed that with systemd version 220 creating this file causes bridges used by Docker to lose their IP addresses. Running Docker with a manually-defined network, as described above, is known to work.}}<br />
<br />
Finally [[restart]] the {{ic|systemd-networkd}} and {{ic|docker}} services.<br />
<br />
=== Default number of allowed processes/threads too low ===<br />
<br />
If you run into error messages like<br />
<br />
# e.g. Java<br />
java.lang.OutOfMemoryError: unable to create new native thread<br />
# e.g. C, bash, ...<br />
fork failed: Resource temporarily unavailable<br />
<br />
then you might need to adjust the number of processes allowed by systemd. Default (see system.conf) is 500, which is pretty small for running several docker containers. You need to create a drop-in service file for this:<br />
<br />
# mkdir /etc/systemd/system/docker.service.d<br />
# cat > /etc/systemd/system/docker.service.d/tasks.conf <<EOF<br />
[Service]<br />
TasksMax=infinity<br />
EOF<br />
# systemctl daemon-reload<br />
# systemctl restart docker.service<br />
<br />
=== Error initializing graphdriver: devmapper ===<br />
<br />
If {{ic|systemctl}} fails to start docker and provides an error:<br />
<br />
Error starting daemon: error initializing graphdriver: devmapper: Device docker-8:2-915035-pool is not a thin pool<br />
<br />
Then, try the following steps to resolve the error. Stop the service, back up {{ic|/var/lib/docker/}} (if desired), remove the contents of {{ic|/var/lib/docker/}}, and try to start the service. See the open [https://github.com/docker/docker/issues/21304 GitHub issue] for details.<br />
<br />
== See also ==<br />
<br />
* [https://docs.docker.com/engine/installation/linux/archlinux/ Arch Linux on docs.docker.com]<br />
* [http://opensource.com/business/14/7/docker-security-selinux Are Docker containers really secure?] — opensource.com<br />
* [[Wikipedia:Docker (software)|Wikipedia - Docker (software)]]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Certbot&diff=497717Certbot2017-11-21T15:26:02Z<p>Nodiscc: add inline link to Wikipedia:Certificate authority</p>
<hr />
<div>[[Category:Networking]]<br />
[[Category:Encryption]]<br />
[[ja:Let’s Encrypt]]<br />
[[ru:Let’s Encrypt]]<br />
[https://letsencrypt.org/ Let’s Encrypt] is a free, automated, and open [[Wikipedia:Certificate authority|certificate authority]] utilizing the [[Wikipedia:Automated Certificate Management Environment|ACME]] protocol.<br />
<br />
The official client is called '''Certbot''', which allows to request valid X.509 certificates straight from the command line.<br />
A minimal client with manual CSR creation is available at {{AUR|acme-tiny}}, clients suitable for scripts are {{AUR|simp_le-git}} and {{AUR|letsencrypt-cli}}.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|certbot}} package.<br />
<br />
Plugins are available for automated configuration and installation of the issued certificates in web servers:<br />
* The experimental plugin for [[Nginx]] is provided with the {{Pkg|certbot-nginx}} package.<br />
* Automated installation using the [[Apache HTTP Server]] is enabled via the {{Pkg|certbot-apache}} package.<br />
<br />
== Configuration ==<br />
<br />
Consult the [https://certbot.eff.org/docs/ Certbot documentation] for more information about creation and usage of certificates.<br />
<br />
{{Expansion|Explain what the Nginx ({{ic|# certbot --nginx}}) and Apache plugins actually do and how they modify the webserver configuration. So far this section targets only the [[#Webroot]] and [[#Manual]] ways.}}<br />
<br />
=== Plugins ===<br />
==== Nginx ====<br />
<br />
{{Expansion|Explain which files in {{ic|/etc/nginx/}} are created or modified by ''certbot''.}}<br />
<br />
The plugin {{pkg|certbot-nginx}} provides an automatic configuration for [[nginx]] [[nginx#Server_blocks|server-blocks]]:<br />
<br />
# certbot --nginx<br />
<br />
To renew certificates, simple run:<br />
<br />
# certbot renew<br />
<br />
{{Accuracy|The [[#Automatic renewal]] section is written for the [[#Webroot]] plugin, the notes (especially {{ic|--post-hook}}) don't apply to [[#Nginx]].}}<br />
<br />
See [[#Automatic renewal]] to keep installed certificates valid.<br />
<br />
=== Webroot ===<br />
{{Note|<br />
* The Webroot method requires '''HTTP on port 80''' for Certbot to validate.<br />
* The Server Name must match that of it's corresponding DNS.<br />
* Permissions may need to be altered on the host to allow read-access to {{ic|http://domain.tld/.well-known}}.<br />
}}<br />
<br />
When using the webroot method the Certbot client places a challenge response inside {{ic|/path/to/domain.tld/html/.well-known/acme-challenge/}} which is used for validation.<br />
<br />
The use of this method is recommend over a manual install; it offers automatic renewal and easier certificate management.<br />
<br />
{{Tip|1=The following initial [[Nginx#Server_blocks|nginx server]] configuration may be helpful to obtain a first-time certificate:<br />
{{hc|/etc/nginx/servers-available/domain.tld|<br />
<nowiki><br />
server {<br />
listen 80;<br />
listen [::]:80;<br />
server_name domain.tld;<br />
root /usr/share/nginx/html;<br />
location / {<br />
index index.htm index.html;<br />
}<br />
<br />
# ACME challenge<br />
location ^~ /.well-known/acme-challenge/ {<br />
default_type "text/plain";<br />
root /var/lib/letsencrypt;<br />
}<br />
}<br />
</nowiki><br />
}}<br />
}}<br />
<br />
==== Obtain certificate(s) ====<br />
{{Expansion|detail lacking to successfully accomplish task being taught|section=accuracy_flag}}<br />
Request a certificate for {{ic|domain.tld}} using {{ic|/var/lib/letsencrypt/}} as public accessible path:<br />
# certbot certonly --email '''email@example.com''' --webroot -w '''/var/lib/letsencrypt/''' -d '''domain.tld'''<br />
<br />
To add a (sub)domain, include all registered domains used on the current setup:<br />
# certbot certonly --email '''email@example.com''' --webroot -w '''/var/lib/letsencrypt/''' -d '''domain.tld,sub.domain.tld'''<br />
<br />
To renew (all) the current certificate(s):<br />
# certbot renew<br />
<br />
See [[#Automatic renewal]] as alternative approach.<br />
<br />
=== Manual ===<br />
<br />
If there is no plugin for your web server, use the following command:<br />
# certbot certonly --manual<br />
<br />
When preferring to use DNS challenge (TXT record) use:<br />
# certbot certonly --manual --preferred-challenges dns<br />
<br />
This will automatically verify your domain and create a private key and certificate pair. These are placed in {{ic|/etc/letsencrypt/live/''your.domain''/}}.<br />
<br />
You can then manually configure your web server to use the key and certificate in that directory.<br />
<br />
{{Note|Running this command multiple times will create multiple sets of files with a trailing number in {{ic|/etc/letsencrypt/live/''your.domain''/}} so take care to rename them in that directory or in the webserver config file.}}<br />
<br />
== Advanced Configuration ==<br />
<br />
{{Style|Make it clear that this section does not apply to [[#Plugins]], which configure the webserver automatically.}}<br />
<br />
=== Webserver Configuration ===<br />
<br />
Instead of using plugins for automatic configuration, it may be preferred to enable SSL for a server manually.<br />
<br />
{{Style|Full configuration of SSL on the webserver is out of scope, link to [[nginx#TLS/SSL]] and [[Apache_HTTP_Server#TLS/SSL]] instead.}}<br />
<br />
{{Tip|<br />
* Mozilla has a useful [https://wiki.mozilla.org/Security/Server_Side_TLS SSL/TLS article] which includes an [https://mozilla.github.io/server-side-tls/ssl-config-generator/ automated tool] to help create a more secure configuration.<br />
* [https://cipherli.st Cipherli.st] provides strong SSL implementation examples and tutorial for most modern webservers.<br />
}}<br />
<br />
==== nginx ====<br />
<br />
An example of the server {{ic|domain.tld}} using the signed SSL-certificate of Let's Encrypt:<br />
{{hc|/etc/nginx/servers-available/domain.tld|<br />
<nowiki><br />
server {<br />
listen 443 ssl http2;<br />
listen [::]:443 ssl http2;<br />
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;<br />
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;<br />
ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;<br />
server_name domain.tld;<br />
..<br />
}<br />
</nowiki><br />
}}<br />
<br />
=== Multiple domains ===<br />
Management of can be made easier by mapping all HTTP-requests for {{ic|/.well-known/acme-challenge/}} to a single folder, e.g. {{ic|/var/lib/letsencrypt}}.<br />
<br />
The path has then to be writable for the Let's Encrypt client and the web server (e.g. [[nginx]] or [[Apache]] running as user ''http''):<br />
# mkdir -p /var/lib/letsencrypt/.well-known<br />
# chgrp http /var/lib/letsencrypt<br />
# chmod g+s /var/lib/letsencrypt<br />
<br />
==== nginx ====<br />
<br />
Create a file containing the location block and include this inside a server block:<br />
{{hc|/etc/nginx/conf.d/letsencrypt.conf|<br />
<nowiki><br />
location ^~ /.well-known {<br />
allow all;<br />
alias /var/lib/letsencrypt/.well-known/;<br />
default_type "text/plain";<br />
try_files $uri =404;<br />
}<br />
</nowiki>}}<br />
<br />
Example of a server configuration:<br />
{{hc|/etc/nginx/servers-available/domain.conf|<nowiki><br />
server {<br />
server_name domain.tld<br />
..<br />
include conf.d/letsencrypt.conf;<br />
}<br />
</nowiki>}}<br />
<br />
==== Apache ====<br />
<br />
Create the file {{ic|/etc/httpd/conf/extra/httpd-acme.conf}}:<br />
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki><br />
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"<br />
<Directory "/var/lib/letsencrypt/"><br />
AllowOverride None<br />
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec<br />
Require method GET POST OPTIONS<br />
</Directory><br />
</nowiki>}}<br />
Including this in {{ic|/etc/httpd/conf/httpd.conf}}:<br />
{{hc|/etc/httpd/conf/httpd.conf|<nowiki><br />
Include conf/extra/httpd-acme.conf<br />
</nowiki>}}<br />
<br />
=== Automatic renewal ===<br />
<br />
==== systemd ====<br />
Create a [[systemd]] {{ic|certbot.service}}:<br />
{{hc|1=/etc/systemd/system/certbot.service|<br />
2=[Unit]<br />
Description=Let's Encrypt renewal<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/certbot renew --quiet --agree-tos<br />
}}<br />
<br />
You'll probably want your web server to reload the certificates after each time they're renewed. This can be done by adding {{ic|--post-hook "systemctl reload nginx.service"}} to the {{ic|ExecStart}} command [https://certbot.eff.org/docs/using.html#renewing-certificates]. Of course use {{ic|httpd.service}} instead of {{ic|nginx.service}} if appropriate.<br />
<br />
{{Note|Before adding a [[systemd/Timers|timer]], check that the service is working correctly and is not trying to prompt anything.}}<br />
<br />
Add a timer to check for certificate renewal twice a day and include a randomized delay so that everyone's requests for renewal will be spread over the day to lighten the Let's Encrypt server load [https://certbot.eff.org/#arch-nginx]:<br />
<br />
{{hc|1=/etc/systemd/system/certbot.timer|<br />
2=[Unit]<br />
Description=Twice daily renewal of Let's Encrypt's certificates<br />
<br />
[Timer]<br />
OnCalendar=0/12:00:00<br />
RandomizedDelaySec=1h<br />
Persistent=true<br />
<br />
[Install]<br />
WantedBy=timers.target}}<br />
<br />
[[Enable]] and [[start]] {{ic|certbot.timer}}.<br />
<br />
== See also ==<br />
<br />
* [https://certbot.eff.org/ EFF's Certbot documentation]<br />
* [https://letsencrypt.org/docs/client-options/ List of ACME clients]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=PulseAudio/Troubleshooting&diff=497714PulseAudio/Troubleshooting2017-11-21T14:47:49Z<p>Nodiscc: https, missing trailing slash</p>
<hr />
<div>[[Category:Sound]]<br />
[[it:PulseAudio/Troubleshooting]]<br />
[[ja:PulseAudio/トラブルシューティング]]<br />
[[ru:PulseAudio/Troubleshooting]]<br />
See [[PulseAudio]] for the main article.<br />
<br />
== Volume ==<br />
<br />
Here you will find some hints on volume issues and why you may not hear anything.<br />
<br />
=== Auto-Mute Mode ===<br />
<br />
Auto-Mute Mode may be enabled. It can be disabled using {{ic|alsamixer}}.<br />
<br />
See http://superuser.com/questions/431079/how-to-disable-auto-mute-mode for more.<br />
<br />
To save your current settings as the default options, run {{ic|alsactl store}} as root.<br />
<br />
=== Muted audio device ===<br />
<br />
If one experiences no audio output via any means while using [[ALSA]], attempt to unmute the sound card. To do this, launch {{ic|alsamixer}} and make sure each column has a green {{ic|00}} under it (this can be toggled by pressing {{ic|m}}):<br />
<br />
$ alsamixer -c 0<br />
<br />
{{Note|alsamixer will not tell you which output device is set as the default. One possible cause of no sound after install is that PulseAudio detects the wrong output device as a default. Install {{Pkg|pavucontrol}} and check if there is any output on the pavucontrol panel when playing a ''.wav'' file.}}<br />
<br />
=== Output stuck muted while Master is toggled ===<br />
<br />
In setups with multiple outputs (e.g. 'Headphone' and 'Speaker') using plain amixer to toggle Master can trigger PulseAudio to mute the active output too, but it does not necessarily unmute it when Master is toggled back to be unmuted. [https://lists.freedesktop.org/archives/pulseaudio-discuss/2015-December/025062.html] To resolve this, amixer must have the device flag set to 'pulse':<br />
<br />
$ amixer -D pulse sset Master toggle<br />
<br />
This will cause amixer to ask PulseAudio to do the toggling rather than toggling it directly.<br />
Because of this, PulseAudio will correctly unmute Master as well as any applicable output.<br />
<br />
=== Muted application ===<br />
<br />
If a specific application is muted or low while all else seems to be in order, it may be due to individual {{ic|sink-input}} settings. With the offending application playing audio, run:<br />
<br />
$ pacmd list-sink-inputs<br />
<br />
Find and make note of the {{ic|index}} of the corresponding {{ic|sink input}}. The {{ic|properties:}} {{ic|application.name}} and {{ic|application.process.binary}}, among others, should help here. Ensure sane settings are present, specifically those of {{ic|muted}} and {{ic|volume}}.<br />
If the sink is muted, it can be unmuted by:<br />
<br />
$ pacmd set-sink-input-mute <index> false<br />
<br />
If the volume needs adjusting, it can be set to 100% by:<br />
<br />
$ pacmd set-sink-input-volume <index> 0x10000<br />
<br />
{{Note|If {{ic|pacmd}} reports {{ic|0 sink input(s)}}, double-check that the application is playing audio. If it is still absent, verify that other applications show up as sink inputs.}}<br />
<br />
=== Volume adjustment does not work properly ===<br />
<br />
Check:<br />
{{ic|/usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common}}<br />
<br />
If the volume does not appear to increment/decrement properly using {{ic|alsamixer}} or {{ic|amixer}}, it may be due to PulseAudio having a larger number of increments (65537 to be exact). Try using larger values when changing volume (e.g. {{ic|amixer set Master 655+}}).<br />
<br />
=== Per-application volumes change when the Master volume is adjusted ===<br />
<br />
This is because PulseAudio uses flat volumes by default, instead of relative volumes, relative to an absolute master volume. If this is found to be inconvenient, asinine, or otherwise undesireable, relative volumes can be enabled by disabling flat volumes in the PulseAudio daemon's configuration file:<br />
<br />
{{hc|/etc/pulse/daemon.conf or ~/.config/pulse/daemon.conf|<nowiki><br />
flat-volumes = no<br />
</nowiki>}}<br />
<br />
and then restarting PulseAudio by executing<br />
<br />
$ pulseaudio -k<br />
$ pulseaudio --start<br />
<br />
=== Volume gets louder every time a new application is started ===<br />
<br />
Per default, it seems as if changing the volume in an application sets the global system volume to that level instead of only affecting the respective application. Applications setting their volume on startup will therefore cause the system volume to "jump".<br />
<br />
Fix this by disabling flat volumes, as demonstrated in the previous section. When Pulse comes back after a few seconds, applications will not alter the global system volume anymore but have their own volume level again.<br />
<br />
{{Note|A previously installed and removed pulseaudio-equalizer may leave behind remnants of the setup in {{ic|~/.config/pulse/default.pa}} or {{ic|~/.pulse/default.pa}} which can also cause maximized volume trouble. Comment that out as needed.}}<br />
<br />
=== Sound output is only mono on M-Audio Audiophile 2496 sound card ===<br />
<br />
Add the following:<br />
<br />
{{hc|/etc/pulseaudio/default.pa|<nowiki><br />
load-module module-alsa-sink sink_name=delta_out device=hw:M2496 format=s24le channels=10 channel_map=left,right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7<br />
load-module module-alsa-source source_name=delta_in device=hw:M2496 format=s24le channels=12 channel_map=left,right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7,aux8,aux9<br />
set-default-sink delta_out<br />
set-default-source delta_in<br />
</nowiki>}}<br />
<br />
=== No sound below a volume cutoff ===<br />
<br />
Known issue (won't fix): https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/223133<br />
<br />
If sound does not play when PulseAudio's volume is set below a certain level, try setting {{ic|1=ignore_dB=1}} in {{ic|/etc/pulse/default.pa}}:<br />
{{hc|/etc/pulse/default.pa|<nowiki><br />
load-module module-udev-detect ignore_dB=1<br />
</nowiki>}}<br />
<br />
However, be aware that it may cause another bug preventing PulseAudio to unmute speakers when headphones or other audio devices are unplugged.<br />
<br />
=== Low volume for internal microphone ===<br />
<br />
If you experience low volume on internal notebook microphone, try setting:<br />
{{hc|/etc/pulse/default.pa|<nowiki><br />
set-source-volume 1 300000<br />
</nowiki>}}<br />
<br />
=== Clients alter master output volume (a.k.a. volume jumps to 100% after running application) ===<br />
<br />
If changing the volume in specific applications or simply running an application changes the master output volume this is likely due to flat volumes mode of pulseaudio. Before disabling it, KDE users should try lowering their system notifications volume in ''System Settings -> Application and System Notifications -> Manage Notifications'' under the ''Player Settings'' tab to something reasonable. Changing the ''Event Sounds'' volume in KMix or another volume mixer application will not help here. This should make the flat-volumes mode work out as intended, if it does not work, some other application is likely requesting 100% volume when its playing something. If all else fails, you can try to disable flat-volumes:<br />
<br />
{{hc|/etc/pulse/daemon.conf|<nowiki><br />
flat-volumes = no<br />
</nowiki>}}<br />
<br />
Then restart PulseAudio daemon:<br />
<br />
# pulseaudio -k<br />
# pulseaudio --start<br />
<br />
=== No sound after resume from suspend ===<br />
<br />
If audio generally works, but stops after resume from suspend, try "reloading" PulseAudio by executing:<br />
$ /usr/bin/pasuspender /bin/true<br />
<br />
This is better than completely killing and restarting it ({{ic|pulseaudio -k}} followed by {{ic|pulseaudio --start}}), because it does not break already running applications.<br />
<br />
If the above fixes your problem, you may wish to automate it, by creating a systemd service file.<br />
<br />
1. Create the template service file in {{ic|/etc/systemd/system/resume-fix-pulseaudio@.service}}:<br />
<br />
[Unit]<br />
Description=Fix PulseAudio after resume from suspend<br />
After=suspend.target<br />
<br />
[Service]<br />
User=%I<br />
Type=oneshot<br />
Environment="XDG_RUNTIME_DIR=/run/user/%U"<br />
ExecStart=/usr/bin/pasuspender /bin/true<br />
<br />
[Install]<br />
WantedBy=suspend.target<br />
<br />
2. Enable it for your user account<br />
<br />
# systemctl enable resume-fix-pulseaudio@YOUR_USERNAME_HERE.service<br />
<br />
3. Reload systemd<br />
<br />
# systemctl --system daemon-reload<br />
<br />
=== ALSA channels mute when headphones are plugged/unplugged improperly ===<br />
<br />
If when you unplug your headphones or plug them in the audio remains muted in alsamixer on the wrong channel due to it being set to 0%, you may be able to fix it by opening {{ic|/etc/pulse/default.pa}} and commenting out the line:<br />
<br />
load-module module-switch-on-port-available<br />
<br />
== Microphone ==<br />
<br />
=== Microphone not detected by PulseAudio ===<br />
<br />
Determine the card and device number of your mic:<br />
<br />
$ arecord -l<br />
**** List of CAPTURE Hardware Devices ****<br />
card 0: PCH [HDA Intel PCH], device 0: ALC269VC Analog [ALC269VC Analog]<br />
Subdevices: 1/1<br />
Subdevice #0: subdevice #0<br />
<br />
In hw:CARD,DEVICE notation, you would specify the above device as {{ic|hw:0,0}}.<br />
<br />
Then, edit {{ic|/etc/pulse/default.pa}} and insert a {{ic|load-module}} line specifying your device as follows:<br />
<br />
load-module module-alsa-source device=hw:0,0<br />
# the line above should be somewhere before the line below<br />
.ifexists module-udev-detect.so<br />
<br />
Finally, restart pulseaudio to apply the new settings:<br />
<br />
$ pulseaudio -k ; pulseaudio -D<br />
<br />
If everything worked correctly, you should now see your mic show up when running {{ic|pavucontrol}} (under the {{ic|Input Devices}} tab).<br />
<br />
=== PulseAudio uses wrong microphone ===<br />
<br />
If PulseAudio uses the wrong microphone, and changing the Input Device with Pavucontrol did not help, take a look at alsamixer. It seems that Pavucontrol does not always set the input source correctly.<br />
<br />
$ alsamixer<br />
<br />
Press {{ic|F6}} and choose your sound card, e.g. HDA Intel. Now press {{ic|F5}} to display all items. Try to find the item: {{ic|Input Source}}. With the up/down arrow keys you are able to change the input source.<br />
<br />
Now try if the correct microphone is used for recording.<br />
<br />
=== No microphone on ThinkPad T400/T500/T420 ===<br />
<br />
Run:<br />
<br />
alsamixer -c 0<br />
<br />
Unmute and maximize the volume of the "Internal Mic".<br />
<br />
Once you see the device with:<br />
<br />
arecord -l<br />
<br />
you might still need to adjust the settings. The microphone and the audio jack are duplexed. Set the configuration of the internal audio in pavucontrol to ''Analog Stereo Duplex''.<br />
<br />
=== No microphone input on Acer Aspire One ===<br />
<br />
Install pavucontrol, unlink the microphone channels and turn down the left one to 0.<br />
Reference: http://getsatisfaction.com/jolicloud/topics/deaf_internal_mic_on_acer_aspire_one#reply_2108048<br />
<br />
=== Static noise in microphone recording ===<br />
<br />
If we are getting static noise in Skype, gnome-sound-recorder, arecord, etc.'s recordings, then the sound card sample rate is incorrect. That is why there is static noise in Linux microphone recordings. To fix this, we need to set the sampling rate in {{ic|/etc/pulse/daemon.conf}} for the sound hardware.<br />
<br />
In addition to the guide below, since [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PulseAudio 11] it is possible to set {{ic|1=avoid-resampling = yes}} in {{ic|daemon.conf}} to use the application sampling rate without resampling.<br />
<br />
==== Determine sound cards in the system (1/5) ====<br />
<br />
This requires {{Pkg|alsa-utils}} and related packages to be installed:<br />
{{hc|$ arecord --list-devices|<br />
**** List of CAPTURE Hardware Devices ****<br />
card 0: Intel [HDA Intel], device 0: ALC888 Analog [ALC888 Analog]<br />
Subdevices: 1/1<br />
Subdevice #0: subdevice #0<br />
card 0: Intel [HDA Intel], device 2: ALC888 Analog [ALC888 Analog]<br />
Subdevices: 1/1<br />
Subdevice #0: subdevice #0<br />
}}<br />
<br />
Sound card is {{ic|hw:0,0}}.<br />
<br />
==== Determine sampling rate of the sound card (2/5) ====<br />
<br />
We aim to find the highest sample rate supported by the {{ic|hw:0,0}} sound card using a ''trial-and-error'' procedure starting from a low value. When the top value is reached, we got a warning message:<br />
<br />
{{hc|1=arecord -f dat -r 60000 -D hw:0,0 -d 5 test.wav|2=<br />
"Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 60000 Hz, Stereo<br />
Warning: rate is not accurate (requested = 60000Hz, '''got = 44100Hz''')<br />
please, try the plug plugin<br />
}}<br />
<br />
observe, the {{ic|1=got = 44100Hz}}. This is the maximum sampling rate of our card.<br />
<br />
==== Setting the sound card's sampling rate into PulseAudio configuration (3/5) ====<br />
<br />
The default sampling rate in PulseAudio:<br />
{{hc|1=$ grep "default-sample-rate" /etc/pulse/daemon.conf|2=<br />
; default-sample-rate = 48000<br />
}}<br />
<br />
{{ic|48000}} is disabled and needs to be changed to {{ic|44100}}:<br />
# sed 's/; default-sample-rate = 48000/default-sample-rate = 44100/g' -i /etc/pulse/daemon.conf<br />
<br />
==== Restart PulseAudio to apply the new settings (4/5) ====<br />
<br />
$ pulseaudio -k<br />
$ pulseaudio --start<br />
<br />
==== Finally check by recording and playing it back (5/5) ====<br />
<br />
Let us record some voice using a microphone for, say, 10 seconds. Make sure the microphone is not muted and all<br />
<br />
$ arecord -f cd -d 10 test-mic.wav<br />
<br />
After 10 seconds, let us play the recording...<br />
<br />
$ aplay test-mic.wav<br />
<br />
Now hopefully, there is no static noise in microphone recording anymore.<br />
<br />
==== Another Possible Cause ====<br />
<br />
Another possible cause is that your mic has two channels but only one channel can provide a valid sound signal. Some information can be found [https://github.com/MaartenBaert/ssr/issues/323#issuecomment-268230548 here]. The solution is to remap the stereo input to a mono input:<br />
<br />
1. Find your source name from the following command; mine is {{ic|alsa_input.pci-0000_00_1f.3.analog-stereo}}<br />
<br />
pacmd list-sources | grep 'name:.*input'<br />
<br />
2. Edit {{ic|/etc/pulse/default.pa}} and add the following lines, where INPUT_NAME is name of the input source from above step:<br />
<br />
load-module module-remap-source source_name=record_mono master=INPUT_NAME master_channel_map=front-left channel_map=mono<br />
set-default-source record_mono<br />
<br />
3. Restart PulseAudio:<br />
<br />
pulseaudio -k<br />
pulseaudio --start<br />
<br />
Now {{ic|arecord}} hopefully works. You may still need to change the {{ic|RecordStream from}} setting to {{ic|Remapped Built-in Audio Analog Stereo}} of a specific application in the {{ic|Recording}} tab of {{ic|pavucontrol}}.<br />
<br />
==== If using a USB microphone ====<br />
<br />
Try plugging it into a different port (eg: ports at the back rather than front).<br />
<br />
=== No microphone on Steam or Skype with enable-remixing = no ===<br />
<br />
When you set {{ic|1=enable-remixing = no}} on {{ic|/etc/pulse/daemon.conf}} you may find that your microphone has stopped working on certain applications like Skype or Steam. This happens because these applications capture the microphone as mono only and because remixing is disabled, Pulseaudio will no longer remix your stereo microphone to mono.<br />
<br />
To fix this you need to tell Pulseaudio to do this for you:<br />
<br />
1. Find the name of the source <br />
<br />
# pacmd list-sources<br />
<br />
Example output edited for brevity, the name you need is in bold:<br />
<br />
index: 2<br />
name: <'''alsa_input.pci-0000_00_14.2.analog-stereo'''><br />
driver: <module-alsa-card.c><br />
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY<br />
<br />
2. Add a remap rule to {{ic|/etc/pulse/default.pa}}, use the name you found with the previous command, here we will use '''alsa_input.pci-0000_00_14.2.analog-stereo''' as an example:<br />
<br />
{{hc|/etc/pulse/default.pa|<nowiki><br />
### Remap microphone to mono<br />
load-module module-remap-source master=alsa_input.pci-0000_00_14.2.analog-stereo master_channel_map=front-left,front-right channels=2 channel_map=mono,mono<br />
</nowiki>}}<br />
<br />
3. Restart Pulseaudio<br />
<br />
# pulseaudio -k<br />
<br />
{{Note|Pulseaudio may fail to start if you do not exit a program that was using the microphone (e.g. if you tested on Steam before modifying the file), in which case you should exit the application and manually start Pulseaudio}}<br />
<br />
# pulseaudio --start<br />
<br />
=== Microphone distorted due to automatic adjustment ===<br />
If your microphone volume creeps up automatically and causes the sound to be distorted, you can fix it by disabling mic boost:<br />
<br />
In {{ic|/usr/share/pulseaudio/alsa-mixer/paths/analog-input-internal-mic.conf}} and {{ic|/usr/share/pulseaudio/alsa-mixer/paths/analog-input-mic.conf}},<br />
<br />
* Under {{ic|[Element Internal Mic Boost]}} set {{ic|volume}} to {{ic|zero}}.<br />
* Under {{ic|[Element Int Mic Boost]}} set {{ic|volume}} to {{ic|zero}}.<br />
* Under {{ic|[Element Mic Boost]}} set {{ic|volume}} to {{ic|zero}}.<br />
<br />
Then restart PulseAudio:<br />
<br />
# pulseaudio -k<br />
<br />
== Audio quality ==<br />
<br />
=== Enable Echo/Noise-Cancelation ===<br />
<br />
Arch does not load the Pulseaudio Echo-Cancelation module by default, therefore, we have to add it in {{ic|/etc/pulse/default.pa}}. First you can test if the module is present with {{ic|pacmd}} and entering {{ic|list-modules}}. If you cannot find a line showing {{ic|name: <module-echo-cancel>}} you have to add <br />
<br />
{{hc|/etc/pulse/default.pa|<br />
### Enable Echo/Noise-Cancelation<br />
<nowiki>load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink</nowiki><br />
set-default-source echoCancel_source<br />
set-default-sink echoCancel_sink<br />
}}<br />
<br />
then restart Pulseaudio<br />
<br />
pulseaudio -k<br />
pulseaudio --start<br />
<br />
and check if the module is activated by starting {{ic|pavucontrol}}. Under {{ic|Recoding}} the input device should show {{ic|Echo-Cancel Source Stream from"}}<br />
<br />
<br />
Here is a list of possible 'aec_args' for 'aec_method=webrtc' with their default values [https://github.com/pulseaudio/pulseaudio/blob/master/src/modules/echo-cancel/webrtc.cc][https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3]:<br />
<br />
* {{ic|1=analog_gain_control=1}} - Analog AGC - 'Automatic Gain Control' done over changing the volume directly - Will most likely lead to [[PulseAudio/Troubleshooting#Microphone_distorted_due_to_automatic_adjustment|distortions]].<br />
* {{ic|1=digital_gain_control=0}} - Digital AGC - 'Automatic Gain Control' done in post processing (higher CPU load).<br />
* {{ic|1=experimental_agc=0}} - Allow enabling of the webrtc experimental AGC mechanism.<br />
* {{ic|1=agc_start_volume=85}} - Initial volume when using AGC - Possible values 0-255 - A too low initial volume may prevent the AGC algorithm from ever raising the volume high enough [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/9.0/].<br />
* {{ic|1=high_pass_filter=1}} - ?<br />
* {{ic|1=noise_suppression=1}} - Noise suppression.<br />
* {{ic|1=mobile=0}} - ?<br />
* {{ic|1=routing_mode=speakerphone}} - Possible Values "quiet-earpiece-or-headset,earpiece,loud-earpiece,speakerphone,loud-speakerphone" - only valid with "mobile=1".<br />
* {{ic|1=comfort_noise=1}} - ? - only valid with "mobile=1".<br />
* {{ic|1=drift_compensation=0}} - Drift compensation to allow echo cancellation between different devices (such as speakers on your laptop and the microphone on your USB webcam). - only possible with "mobile=0".<br />
* {{ic|1=voice_detection=1}} - VAD - Voice activity detection.<br />
* {{ic|1=extended_filter=0}} - The extended filter is more complex and less sensitive to incorrect delay reporting from the hardware than the regular filter. The extended filter mode is disabled by default, because it seemed produce worse results during double-talk [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/9.0/].<br />
* {{ic|1=intelligibility_enhancer=0}} - Some bits for webrtc intelligibility enhancer.<br />
* {{ic|1=beamforming=0}} - See [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3][https://arunraghavan.net/2016/06/beamforming-in-pulseaudio/]<br />
* {{ic|1=mic_geometry=x1,y1,z1,x2,y2,z2}} - Only with "beamforming=1".<br />
* {{ic|1=target_direction=a,e,r}} - Only with "beamforming=1".<br />
<br />
<br />
If you are using the [[PulseAudio/Troubleshooting#Enable_Echo.2FNoise-Cancelation|module-echo-cancel]], you probably don't want other applications to do additional audio post processing.<br><br />
Here is a list for disabling audio post processing in following applications:<br />
<br />
* Mumble:<br><br />
# Configure -> Settings -> Check 'Advanced' check box -> Audio Input<br><br />
# Echo: Select 'Disabled'<br><br />
# Noise Suppression: Set slider to 'Off'<br><br />
# Max. Aplification: Set slider to '1.0'<br />
<br />
* TeamSpeak:<br><br />
# Tools -> Options -> Check 'Advanced Options' check box<br><br />
# Uncheck: 'Echo reduction', 'Echo cancellation', 'Remove background noise' and 'Automatic voice gain control'<br />
<br />
* Firefox:<br><br />
#Is described [[Firefox_tweaks#Disable_WebRTC_audio_post_processing|here]]<br />
<br />
<br />
BEWARE:<br><br />
If you plug in a USB Soundcard/Headset, or you have for example a 5.1 Speaker configuration and plug in a Headset on your front audio connectors after you have loaded the 'module-echo-cancel', you have to manually unload and load the 'module-echo-cancel' again, because unfortunately there is no way to tell the 'module-echo-cancel' that it should automatically switch to the new default 'source_master' and 'source_sink'. See https://bugs.freedesktop.org/show_bug.cgi?id=100403<br />
<br />
=== Glitches, skips or crackling ===<br />
<br />
The newer implementation of the PulseAudio sound server uses timer-based audio scheduling instead of the traditional, interrupt-driven approach. <br />
<br />
Timer-based scheduling may expose issues in some ALSA drivers. On the other hand, other drivers might be glitchy without it on, so check to see what works on your system. <br />
<br />
To turn timer-based scheduling off add {{ic|1=tsched=0}} in {{ic|/etc/pulse/default.pa}}:<br />
{{hc|/etc/pulse/default.pa|2=<br />
load-module module-udev-detect tsched=0<br />
}}<br />
<br />
Then restart the PulseAudio server:<br />
<br />
$ pulseaudio -k<br />
$ pulseaudio --start<br />
<br />
Do the reverse to enable timer-based scheduling, if not already enabled by default.<br />
<br />
If you are using Intel's [[Wikipedia:IOMMU|IOMMU]] and experience glitches and/or skips, add {{ic|1=intel_iommu=igfx_off}} to your kernel command line.<br />
<br />
Some Intel audio cards using the {{ic|snd-hda-intel}} module need the otions {{ic|1=vid=8086 pid=8ca0 snoop=0}}. In order to set them permanently, create/modify the following file including the line below.<br />
{{hc|/etc/modprobe.d/sound.conf|2=<br />
options snd-hda-intel vid=8086 pid=8ca0 snoop=0<br />
}}<br />
<br />
Please report any such cards to [http://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/BrokenDrivers/ PulseAudio Broken Sound Driver page]<br />
<br />
=== Static noise when using headphones ===<br />
<br />
If you are encountering static in your headphone jack, one possible culprit may be ALSA's loopback mixing. In addition to setting tsched=0 as documented above, it may be helpful to disable loopback mixing. This can be accomplished trivially with alsamixer, part of {{Pkg|alsa-utils}}. This should not impact audio playback or microphone recording negatively, unless you require loopback mixing.<br />
<br />
=== Setting the default fragment number and buffer size in PulseAudio ===<br />
<br />
{{Poor writing|Copied from Linux mint topic with few additions}}<br />
<br />
==== Disabling timer-based scheduling (0/4) ====<br />
<br />
By default, PulseAudio uses timer-based scheduling. In this mode, fragments are not used at all, and so the default-fragments and default-fragment-size-msec parameters are ignored.<br />
To turn timer-based scheduling off add {{ic|1=tsched=0}} in {{ic|/etc/pulse/default.pa}}:<br />
{{hc|/etc/pulse/default.pa|2=<br />
load-module module-udev-detect tsched=0<br />
}}<br />
<br />
==== Finding out your audio device parameters (1/4) ====<br />
<br />
To find out what your sound card buffering settings are, use the following command and scroll through the output until you find the correct sink entry.<br />
<br />
{{hc|$ pactl list sinks|<nowiki><br />
Sink #1<br />
State: RUNNING<br />
Name: alsa_output.pci-0000_00_1b.0.analog-stereo<br />
Description: Built-in Audio Analog Stereo<br />
Driver: module-alsa-card.c<br />
Sample Specification: s16le 2ch 44100Hz<br />
Channel Map: front-left,front-right<br />
Owner Module: 7<br />
Mute: no<br />
Volume: front-left: 42600 / 65% / -11.22 dB, front-right: 42600 / 65% / -11.22 dB<br />
balance 0.00<br />
Base Volume: 65536 / 100% / 0.00 dB<br />
Monitor Source: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor<br />
Latency: 70662 usec, configured 85000 usec<br />
Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY <br />
Properties:<br />
alsa.resolution_bits = "16"<br />
device.api = "alsa"<br />
device.class = "sound"<br />
alsa.class = "generic"<br />
alsa.subclass = "generic-mix"<br />
alsa.name = "ALC283 Analog"<br />
alsa.id = "ALC283 Analog"<br />
alsa.subdevice = "0"<br />
alsa.subdevice_name = "subdevice #0"<br />
alsa.device = "0"<br />
alsa.card = "1"<br />
alsa.card_name = "HDA Intel PCH"<br />
alsa.long_card_name = "HDA Intel PCH at 0xe111c000 irq 43"<br />
alsa.driver_name = "snd_hda_intel"<br />
device.bus_path = "pci-0000:00:1b.0"<br />
sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card1"<br />
device.bus = "pci"<br />
device.vendor.id = "8086"<br />
device.vendor.name = "Intel Corporation"<br />
device.product.id = "9ca0"<br />
device.product.name = "Wildcat Point-LP High Definition Audio Controller"<br />
device.form_factor = "internal"<br />
device.string = "front:1"<br />
device.buffering.buffer_size = "352800"<br />
device.buffering.fragment_size = "176400"<br />
device.access_mode = "mmap+timer"<br />
device.profile.name = "analog-stereo"<br />
device.profile.description = "Analog Stereo"<br />
device.description = "Built-in Audio Analog Stereo"<br />
alsa.mixer_name = "Realtek ALC283"<br />
alsa.components = "HDA:10ec0283,10ec0283,00100003"<br />
module-udev-detect.discovered = "1"<br />
device.icon_name = "audio-card-pci"<br />
Ports:<br />
analog-output-speaker: Speakers (priority: 10000, not available)<br />
analog-output-headphones: Headphones (priority: 9000, available)<br />
Active Port: analog-output-headphones<br />
Formats:<br />
pcm<br />
...<br />
</nowiki>}}<br />
<br />
Take note the {{ic|buffer_size}} and {{ic|fragment_size}} values for the relevant sound card.<br />
<br />
==== Calculate your fragment size in msecs and number of fragments (2/4) ====<br />
<br />
PulseAudio's default sampling rate and bit depth are set to {{ic|44100Hz}} @ {{ic|16 bits}}.<br />
<br />
With this configuration, the bit rate we need is {{ic|44100}}*{{ic|16}} = {{ic|705600}} bits per second. That is {{ic|1411200 bps}} for stereo.<br />
<br />
Let us take a look at the parameters we have found in the previous step:<br />
<br />
device.buffering.buffer_size = "352800" => 352800/1411200 = 0.25 s = 250 ms<br />
device.buffering.fragment_size = "176400" => 176400/1411200 = 0.125 s = 125 ms<br />
<br />
==== Modify PulseAudio's configuration file (3/4) ====<br />
<br />
{{hc|/etc/pulse/daemon.conf|<nowiki><br />
; default-fragments = X<br />
; default-fragment-size-msec = Y<br />
</nowiki>}}<br />
<br />
In the previous step, we calculated the fragment size parameter.<br />
The number of fragments is simply buffer_size/fragment_size, which in this case ({{ic|250/125}}) is {{ic|2}}:<br />
<br />
{{hc|/etc/pulse/daemon.conf|2=<br />
; default-fragments = '''2'''<br />
; default-fragment-size-msec = '''125'''<br />
}}<br />
<br />
==== Restart the PulseAudio daemon (4/4) ====<br />
<br />
$ pulseaudio -k<br />
$ pulseaudio --start<br />
<br />
For more information, see: [http://forums.linuxmint.com/viewtopic.php?f=42&t=44862 Linux Mint topic]<br />
<br />
=== Choppy sound with analog surround sound setup ===<br />
<br />
The low-frequency effects (LFE) channel is not remixed per default. To enable it the following needs to be set in {{ic|/etc/pulse/daemon.conf}} :<br />
{{hc|/etc/pulse/daemon.conf|<nowiki><br />
enable-lfe-remixing = yes<br />
</nowiki>}}<br />
<br />
=== Laggy sound ===<br />
<br />
This issue is due to incorrect buffer sizes. First verify that the variables {{ic|default-fragments}} and {{ic|default-fragment-size-msec}} are not being set to non default values in the file {{ic|/etc/pulse/daemon.conf}}. If the issue is still present, try setting them to the following values:<br />
<br />
{{hc|/etc/pulse/daemon.conf|2=<br />
default-fragments = 5<br />
default-fragment-size-msec = 2<br />
}}<br />
<br />
=== Choppy/distorted sound ===<br />
This can result from an incorrectly set sample rate. Try the following setting:<br />
<br />
{{hc|/etc/pulse/daemon.conf|2=<br />
avoid-resampling = yes #(Needs [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PA11] or higher)<br />
default-sample-rate = 48000<br />
}}<br />
and restart the PulseAudio server.<br />
<br />
If one experiences choppy sound in applications using [[Wikipedia:OpenAL|OpenAL]], change the sample rate in {{ic|/etc/openal/alsoft.conf}}:<br />
{{hc|/etc/openal/alsoft.conf|2=<br />
frequency = 48000<br />
}}<br />
<br />
Setting the PCM volume above 0 dB can cause [[Wikipedia:Clipping_(audio)|clipping]]. Running {{ic|alsamixer}} will allow you to see if this is the problem and if so fix it. Note that ALSA may not [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/PulseAudioStoleMyVolumes/ correctly export] the dB information to PulseAudio. Try the following:<br />
<br />
{{hc|/etc/pulse/default.pa|2=<br />
load-module module-udev-detect ignore_dB=1<br />
}}<br />
<br />
and restart the PulseAudio server. See also [[#No sound below a volume cutoff]].<br />
<br />
== Hardware and Cards ==<br />
<br />
=== No HDMI sound output after some time with the monitor turned off ===<br />
<br />
The monitor is connected via HDMI/DisplayPort, and the audio jack is plugged in the headphone jack of the monitor, but PulseAudio insists that it is unplugged:<br />
<br />
{{hc|pactl list sinks|<br />
...<br />
hdmi-output-0: HDMI / DisplayPort (priority: 5900, not available)<br />
...<br />
}}<br />
<br />
This leads to no sound coming from HDMI output. A workaround for this is to switch to another VT and back again. If that does not work, try: turn off your monitor, switch to another VT, turn on your monitor, and switch back. This problem has been reported by ATI/Nvidia/Intel users.<br />
<br />
Another workaround could be to disable the switch-on-port-available module by commenting it in /etc/pulse/default.pa [https://bugs.freedesktop.org/show_bug.cgi?id=93946#c36]:<br />
<br />
{{hc|/etc/pulse/default.pa|<br />
...<br />
### Should be after module-*-restore but before module-*-detect<br />
#load-module module-switch-on-port-available<br />
...<br />
}}<br />
<br />
=== No HDMI sound using a headless server ===<br />
You might want to use HDMI audio with your a/v receiver but no display. HDMI requires a video signal, which we have from the virtual terminal. <br />
<br />
By default, this signal is turned off after 600 seconds, thus the audio sink gets lost as well.<br />
<br />
To prevent screen blanking, add {{ic|consoleblank&#61;0}} to the kernel command line.<br />
<br />
=== No cards ===<br />
<br />
If PulseAudio starts, run {{ic|pacmd list}}. If no cards are reported, make sure that the ALSA devices are not in use:<br />
<br />
$ fuser -v /dev/snd/*<br />
$ fuser -v /dev/dsp<br />
<br />
Make sure any applications using the pcm or dsp files are shut down before restarting PulseAudio.<br />
<br />
=== Starting an application interrupts other app's sound ===<br />
<br />
If you have trouble with some applications (eg. Teamspeak, Mumble) interrupting sound output of already running applications (eg. Deadbeaf), you can solve this by commenting out the line {{ic|load-module module-role-cork}} in {{ic|/etc/pulse/default.pa}} like shown below:<br />
<br />
{{hc|/etc/pulse/default.pa|<br />
### Cork music/video streams when a phone stream is active<br />
# load-module module-role-cork<br />
}}<br />
<br />
Then restart pulseaudo by using your normal user account with<br />
<br />
pulseaudio -k<br />
pulseaudio --start<br />
<br />
=== The only device shown is "dummy output" or newly connected cards are not detected ===<br />
<br />
If the only playback device is the Dummy Output, PulseAudio cannot access your sound devices. It is possible there is an issue with logind giving permissions, see [[General troubleshooting#Session permissions]] for more information.<br />
<br />
An application might also not have been configured to work with PulseAudio. This happens with [[FluidSynth#Conflicting_with_PulseAudio|FluidSynth]] for example. To see which application is responsible for a direct access to the sound card via alsa, run the following command:<br />
<br />
# fuser -v /dev/snd/*<br />
<br />
Try to close these applications. pulseaudio, if running, should take again precedence over these applications and all the applications relying on pulseaudio should work again like expected.<br />
<br />
=== No HDMI 5/7.1 Selection for Device ===<br />
<br />
If you are unable to select 5/7.1 channel output for a working HDMI device, then turning off "stream device reading" in {{ic|/etc/pulse/default.pa}} might help. <br />
<br />
See [[#Fallback device is not respected]].<br />
<br />
=== Failed to create sink input: sink is suspended ===<br />
<br />
If you do not have any output sound and receive dozens of errors related to a suspended sink in your {{ic|journalctl -b}} log, then backup first and then delete your user-specific pulse folders:<br />
<br />
$ rm -r ~/.pulse ~/.pulse-cookie ~/.config/pulse<br />
<br />
=== Simultaneous output to multiple sound cards / devices ===<br />
<br />
Simultaneous output to two different devices can be very useful. For example, being able to send audio to your A/V receiver via your graphics card's HDMI output, while also sending the same audio through the analogue output of your motherboard's built-in audio. This is much less hassle than it used to be (in this example, we are using GNOME desktop).<br />
<br />
Using {{Pkg|paprefs}}, simply select "Add virtual output device for simultaneous output on all local sound cards" from under the "Simultaneous Output" tab. Then, under GNOME's "sound settings", select the simultaneous output you have just created.<br />
<br />
If this does not work, try adding the following to {{ic|~/.asoundrc}}:<br />
<br />
pcm.dsp {<br />
type plug<br />
slave.pcm "dmix"<br />
}<br />
<br />
{{Tip|Simultaneous output can also be achieved manually using alsamixer. Disable "auto mute" item, then unmute other output sources you want to hear and increase their volume.}}<br />
<br />
=== Simultaneous output to multiple sinks on the same sound card not working ===<br />
<br />
This can be useful for users who have multiple sound sources and want to play them on different sinks/outputs. <br />
An example use-case for this would be if you play music and also voice chat and want to output music to speakers (in this case Digital S/PDIF) and voice to headphones. (Analog)<br />
<br />
This is sometimes auto detected by PulseAudio but not always. If you know that your sound card can output to both Analog and S/PDIF at the same time and PulseAudio does not have this option in its profiles in pavucontrol, or veromix then you probably need to create a configuration file for your sound card.<br />
<br />
More in detail you need to create a profile-set for your specific sound card.<br />
This is done in two steps mostly.<br />
* Create udev rule to make PulseAudio choose your PulseAudio configuration file specific to the sound card.<br />
* Create the actual configuration.<br />
<br />
Create a pulseadio udev rule.<br />
<br />
{{Note|This is only an example for Asus Xonar Essence STX.<br />
Read [[udev]] to find out the correct values.}}<br />
<br />
{{Note|Your configuration file should have lower number than the original PulseAudio rule to take effect.}}<br />
<br />
{{hc|/usr/lib/udev/rules.d/90-pulseaudio-Xonar-STX.rules|<br />
ACTION&#61;&#61;"change", SUBSYSTEM&#61;&#61;"sound", KERNEL&#61;&#61;"card*", \<br />
ATTRS&#123;subsystem_vendor&#125;&#61;&#61;"0x1043", ATTRS&#123;subsystem_device&#125;&#61;&#61;"0x835c", ENV&#123;PULSE_PROFILE_SET&#125;&#61;"asus-xonar-essence-stx.conf" <br />
}}<br />
<br />
Now, create a configuration file. If you bother, you can start from scratch and make it saucy. However you can also use the default configuration file, rename it, and then add your profile there that you know works. Less pretty but also faster.<br />
<br />
To enable multiple sinks for Asus Xonar Essence STX you need only to add this in.<br />
<br />
{{Note|{{ic|asus-xonar-essence-stx.conf}} also includes all code/mappings from {{ic|default.conf}}.}}<br />
<br />
{{hc|/usr/share/pulseaudio/alsa-mixer/profile-sets/asus-xonar-essence-stx.conf|<br />
[Profile analog-stereo+iec958-stereo]<br />
description &#61; Analog Stereo Duplex + Digital Stereo Output<br />
input-mappings &#61; analog-stereo<br />
output-mappings &#61; analog-stereo iec958-stereo<br />
skip-probe &#61; yes<br />
}}<br />
<br />
This will auto-profile your Asus Xonar Essence STX with default profiles and add your own profile so you can have multiple sinks.<br />
<br />
You need to create another profile in the configuration file if you want to have the same functionality with AC3 Digital 5.1 output.<br />
<br />
[http://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Profiles/ See PulseAudio article about profiles]<br />
<br />
=== Some profiles like SPDIF are not enabled by default on the card ===<br />
<br />
Some profiles like IEC-958 (i.e. S/PDIF) may not be enabled by default on the selected sink. Each time the system starts up, the card profile is disabled and the pulseaudio daemon cannot select it.<br />
You have to add the profile selection to you default.pa file. <br />
Verify the card and profile name with :<br />
<br />
$ pacmd list-cards<br />
Then edit the config to add the profile<br />
{{hc|~/.config/pulse/default.pa|<br />
## Replace with your card name and the profile you want to activate<br />
set-card-profile alsa_card.pci-0000_00_1b.0 output:iec958-stereo+input:analog-stereo<br />
}}<br />
<br />
Pulse audio will add this profile the pool of available profiles<br />
<br />
== Bluetooth ==<br />
<br />
=== Disable Bluetooth support ===<br />
<br />
If you do not use Bluetooth, you may experience the following error in your journal:<br />
<br />
bluez5-util.c: GetManagedObjects() failed: org.freedesktop.DBus.Error.ServiceUnknown: The name org.bluez was not provided by any .service files<br />
<br />
To disable Bluetooth support in PulseAudio, make sure that the following lines are commented out in the configuration file in use ({{ic|~/.config/pulse/default.pa}} or {{ic|/etc/pulse/default.pa}}):<br />
<br />
{{hc|~/.config/pulse/default.pa|<br />
### Automatically load driver modules for Bluetooth hardware<br />
#.ifexists module-bluetooth-policy.so<br />
#load-module module-bluetooth-policy<br />
#.endif<br />
<br />
#.ifexists module-bluetooth-discover.so<br />
#load-module module-bluetooth-discover<br />
#.endif<br />
}}<br />
<br />
=== Bluetooth headset replay problems ===<br />
<br />
Some user [https://bbs.archlinux.org/viewtopic.php?id=117420 reports] huge delays or even no sound when the Bluetooth connection does not send any data. This is due to the {{ic|module-suspend-on-idle}} module, which automatically suspends sinks/sources on idle. As this can cause problems with headset, the responsible module can be deactivated.<br />
<br />
To disable loading of the {{ic|module-suspend-on-idle}} module, comment out the following line in the configuration file in use ({{ic|~/.config/pulse/default.pa}} or {{ic|/etc/pulse/default.pa}}):<br />
<br />
{{hc|~/.config/pulse/default.pa|<br />
### Automatically suspend sinks/sources that become idle for too long<br />
#load-module module-suspend-on-idle<br />
}}<br />
<br />
Finally restart PulseAudio to apply the changes.<br />
<br />
=== Automatically switch to Bluetooth or USB headset ===<br />
<br />
Add the following:<br />
{{hc|/etc/pulse/default.pa|<br />
# automatically switch to newly-connected devices<br />
load-module module-switch-on-connect<br />
}}<br />
<br />
Since [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PulseAudio 11] USB and bluetooth devices are preferred over internal sound cards by default, but as in the above link described, you still need module-switch-on-connect to also moves existing streams to the new sink.<br />
<br />
=== My Bluetooth device is paired but does not play any sound ===<br />
<br />
[[Bluetooth headset#A2DP_not_working_with_PulseAudio|See the article in Bluetooth headset section]]<br />
<br />
Starting from PulseAudio 2.99 and bluez 4.101 you should '''avoid''' using Socket interface. Do NOT use:<br />
<br />
{{hc|/etc/bluetooth/audio.conf|<nowiki><br />
[General]<br />
Enable=Socket<br />
</nowiki>}}<br />
<br />
If you face problems with A2DP and PA 2.99 make sure you have {{Pkg|sbc}} library.<br />
<br />
== Applications ==<br />
<br />
=== Flash content ===<br />
<br />
Since Adobe Flash does not directly support PulseAudio, the recommended way is to [[PulseAudio#ALSA|configure ALSA to use the virtual PulseAudio sound card]].<br />
<br />
If Flash audio is lagging, you may try to have Flash access ALSA directly. See [[PulseAudio#ALSA/dmix without grabbing hardware device]] for details.<br />
<br />
=== Permission errors bug ===<br />
<br />
{{hc|pulseaudio --start|<br />
E: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Operation not permitted<br />
W: [autospawn] lock-autospawn.c: Cannot access autospawn lock.<br />
E: [pulseaudio] main.c: Failed to acquire autospawn lock}}<br />
<br />
Known programs that changes permissions for {{ic|/run/user/''user id''/pulse}} when using [[Polkit]] for root elevation:<br />
<br />
*{{AUR|sakis3g}} <br />
<br />
As a workaround, include {{Pkg|gksu}} or {{Pkg|kdesu}} in a [[desktop entry]], or add {{ic|1=''username'' ALL=NOPASSWD: /usr/bin/''program_name''}} to [[sudoers]] to run it with {{Pkg|sudo}} or {{ic|gksudo}} without a password.<br />
<br />
The other workaround is to uncomment and set {{ic|1=daemonize = yes}} in the {{ic|/etc/pulse/daemon.conf}}.<br />
<br />
See also [https://bbs.archlinux.org/viewtopic.php?id=135955].<br />
<br />
=== Audacity ===<br />
<br />
When starting Audacity you may find that your headphones no longer work. This can be because Audacity is trying to use them as a recording device. To fix this, open Audacity, then set its recording device to {{ic|1=pulse:Internal Mic:0}}.<br />
<br />
Under some circumstances, playback may be distorted, very fast, or freeze, as discussed in the [http://wiki.audacityteam.org/wiki/Linux_Issues#ALSA_and_other_sound_systems Audacity Wiki's Linux Issues page].<br />
<br />
The solution proposed in this page may work: start Audacity with:<br />
<br />
$ env PULSE_LATENCY_MSEC=30 audacity<br />
<br />
If the solution above does not fix this issue, one may wish to temporarily disable pulseaudio while running Audacity by using the {{ic|pasuspender}} command:<br />
<br />
$ pasuspender -- audacity<br />
<br />
Then, be sure to select the appropriate ALSA input and output devices in Audacity.<br />
<br />
See also [[#Setting the default fragment number and buffer size in PulseAudio]].<br />
<br />
== Other Issues ==<br />
<br />
=== Bad configuration files ===<br />
<br />
After starting PulseAudio, if the system outputs no sound, it may be necessary to delete the contents of {{ic|~/.config/pulse}} and/or {{ic|~/.pulse}}. PulseAudio will automatically create new configuration files on its next start.<br />
<br />
=== Cannot update configuration of sound device in pavucontrol ===<br />
<br />
{{Pkg|pavucontrol}} is a handy GUI utility for configuring PulseAudio. Under its 'Configuration' tab, you can select different profiles for each of your sound devices e.g. analogue stereo, digital output (IEC958), HDMI 5.1 Surround etc.<br />
<br />
However, you may run into an instance where selecting a different profile for a card results in the pulse daemon crashing and auto restarting without the new selection "sticking". If this occurs, use the other useful GUI tool, {{Pkg|paprefs}}, to check under the "Simultaneous Output" tab for a virtual simultaneous device. If this setting is active (checked), it will prevent you changing any card's profile in pavucontrol. Uncheck this setting, then adjust your profile in pavucontrol prior to re-enabling simultaneous output in paprefs.<br />
<br />
=== Failed to create sink input: sink is suspended ===<br />
<br />
If you do not have any output sound and receive dozens of errors related to a suspended sink in your {{ic|journalctl -b}} log, then backup first and then delete your user-specific pulse folders:<br />
<br />
$ rm -r ~/.pulse ~/.pulse-cookie ~/.config/pulse<br />
<br />
=== Pulse overwrites ALSA settings ===<br />
<br />
PulseAudio usually overwrites the ALSA settings — for example set with alsamixer — at start-up, even when the ALSA daemon is loaded. Since there seems to be no other way to restrict this behaviour, a workaround is to restore the ALSA settings again after PulseAudio has started. Add the following command to {{ic|.xinitrc}} or {{ic|.bash_profile}} or any other [[autostart]] file:<br />
<br />
restore_alsa() {<br />
while [ -z "$(pidof pulseaudio)" ]; do<br />
sleep 0.5<br />
done<br />
alsactl -f /var/lib/alsa/asound.state restore <br />
}<br />
restore_alsa &<br />
<br />
=== Prevent Pulse from restarting after being killed ===<br />
<br />
Sometimes you may wish to temporarily disable Pulse. In order to do so you will have to prevent Pulse from restarting after being killed.<br />
<br />
{{hc|~/.config/pulse/client.conf|2=<br />
# Disable autospawning the PulseAudio daemon<br />
autospawn = no<br />
}}<br />
<br />
=== Daemon startup failed ===<br />
<br />
Try resetting PulseAudio:<br />
<br />
$ rm -rf /tmp/pulse* ~/.pulse* ~/.config/pulse<br />
$ pulseaudio -k<br />
$ pulseaudio --start<br />
<br />
* Check that options for sinks are set up correctly.<br />
<br />
* If you configured in default.pa to load and use the OSS modules then check with {{Pkg|lsof}} that {{ic|/dev/dsp}} device is not used by another application.<br />
<br />
* Set a preferred working resample method. Use {{ic|pulseaudio --dump-resample-methods}} to see a list with all available resample methods you can use.<br />
<br />
* To get details about currently appeared unfixed errors or just get status of daemon use commands like {{ic|pax11publish -d}} and {{ic|pulseaudio -v}} where {{ic|v}} option can be used multiple time to set verbosity of log output equal to the {{ic|1=--log-level[=LEVEL]}} option where LEVEL is from 0 to 4. See the [[#Outputs by PulseAudio error status check utilities]] section.<br />
<br />
See also man pages for {{man|1|pax11publish}} and {{man|1|pulseaudio}} for more details.<br />
<br />
==== Outputs by PulseAudio error status check utilities ====<br />
<br />
If the {{ic|pax11publish -d}} shows error like:<br />
<br />
N: [pulseaudio] main.c: User-configured server at "user", refusing to start/autospawn.<br />
<br />
then run {{ic|pax11publish -r}} command then could be also good to logout and login again. This manual cleanup is always required when using LXDM because it does not restart the X server on logout; see [[LXDM#PulseAudio]]{{Broken section link}}.<br />
<br />
If the {{ic|pulseaudio -vvvv}} command shows error like:<br />
<br />
E: [pulseaudio] module-udev-detect.c: You apparently ran out of inotify watches, probably because Tracker/Beagle took them all away. I wished people would do their homework first and fix inotify before using it for watching whole directory trees which is something the current inotify is certainly not useful for. Please make sure to drop the Tracker/Beagle guys a line complaining about their broken use of inotify.<br />
<br />
This can be resolved temporary by:<br />
$ echo 100000 > /proc/sys/fs/inotify/max_user_watches<br />
<br />
For permanent use save settings in the ''99-sysctl.conf'' file:<br />
<br />
{{hc|/etc/sysctl.d/99-sysctl.conf|2=<br />
# Increase inotify max watchs per user<br />
fs.inotify.max_user_watches = 100000}}<br />
<br />
{{Warning|It may cause much bigger consumption of memory by kernel.}}<br />
<br />
'''See also''' <br />
<br />
* [http://www.linuxinsight.com/proc_sys_fs_inotify.html proc_sys_fs_inotify] and [http://lwn.net/Articles/604686/ dnotify, inotify]- more details about ''inotify/max_user_watches''<br />
* [http://stackoverflow.com/questions/535768/what-is-a-reasonable-amount-of-inotify-watches-with-linux?answertab=votes#tab-top reasonable amount of inotify watches with Linux]<br />
* {{man|7|inotify}} - man page<br />
<br />
=== Daemon already running ===<br />
<br />
On some systems, PulseAudio may be started multiple times. journalctl will report:<br />
<br />
[pulseaudio] pid.c: Daemon already running.<br />
<br />
Make sure to use only one method of autostarting applications. {{Pkg|pulseaudio}} includes these files:<br />
<br />
* {{ic|/etc/X11/xinit/xinitrc.d/pulseaudio}}<br />
* {{ic|/etc/xdg/autostart/pulseaudio.desktop}}<br />
* {{ic|/etc/xdg/autostart/pulseaudio-kde.desktop}}<br />
<br />
Also check user autostart files and directories, such as [[xinitrc]], {{ic|~/.config/autostart/}} etc.<br />
<br />
=== Subwoofer stops working after end of every song ===<br />
<br />
Known issue: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/494099<br />
<br />
To fix this, must edit {{ic|/etc/pulse/daemon.conf}} and enable {{ic|enable-lfe-remixing}} :<br />
{{hc|/etc/pulse/daemon.conf|<nowiki><br />
enable-lfe-remixing = yes<br />
</nowiki>}}<br />
<br />
=== Unable to select surround configuration other than "Surround 4.0" ===<br />
<br />
If you are unable to set 5.1 surround output in pavucontrol because it only shows "Analog Surround 4.0 Output", open the ALSA mixer and change the output configuration there to 6 channels. Then restart pulseaudio, and pavucontrol will list many more options.<br />
<br />
=== Realtime scheduling ===<br />
<br />
If rtkit does not work, you can manually set up your system to run PulseAudio with real-time scheduling, which can help performance. To do this, add the following lines to {{ic|/etc/security/limits.conf}}:<br />
<br />
@pulse-rt - rtprio 9<br />
@pulse-rt - nice -11<br />
<br />
Afterwards, you need to add your user to the {{ic|pulse-rt}} group:<br />
<br />
# gpasswd -a <user> pulse-rt<br />
<br />
=== pactl "invalid option" error with negative percentage arguments ===<br />
<br />
{{ic|pactl}} commands that take negative percentage arguments will fail with an 'invalid option' error. Use the standard shell '--' pseudo argument<br />
to disable argument parsing before the negative argument. ''e.g.'' {{ic|pactl set-sink-volume 1 -- -5%}}.<br />
<br />
=== Fallback device is not respected ===<br />
<br />
PulseAudio does not have a true default device. Instead it uses a [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/DefaultDevice/ "fallback"], which only applies to new sound streams. This means previously run applications are not affected by the newly set fallback device.<br />
<br />
{{Pkg|gnome-control-center}}, {{Pkg|mate-media}} and {{AUR|paswitch}} handle this gracefully. Alternatively: <br />
<br />
1. Move the old streams in {{Pkg|pavucontrol}} manually to the new sound card.<br />
<br />
2. Stop Pulse, erase the "stream-volumes" in {{ic|~/.config/pulse}} and/or {{ic|~/.pulse}} and restart Pulse. This also resets application volumes.<br />
<br />
3. Disable stream device reading. This may be not wanted when using different soundcards with different applications.<br />
<br />
{{hc|/etc/pulse/default.pa|<nowiki><br />
load-module module-stream-restore restore_device=false<br />
</nowiki>}}<br />
<br />
=== RTP/UDP packet flood ===<br />
<br />
In some cases the default configuration might flood the network with UDP packets.[https://bugs.freedesktop.org/show_bug.cgi?id=44777] <br />
To fix this problem, launch {{ic|paprefs}} and disable "Multicast/RTP Sender".[https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/411688/comments/36]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Talk:PulseAudio&diff=497713Talk:PulseAudio2017-11-21T14:45:22Z<p>Nodiscc: /* Networked audio */ sign</p>
<hr />
<div>==Configuration of the PulseAudio ALSA plugin==<br />
Can anybody give an example where to use the ''pcm.pulse'' setting? --[[User:BertiBoeller|BertiBoeller]] 12:33, 17 October 2009 (EDT)<br />
<br />
== Abandoned draft ==<br />
<br />
[[PulseAudio/Configuration]] was initially created to discuss PA configuration; then its goal was changed to be a replacement for this whole article; then it was abandoned. Currently it's marked for merge in [[PulseAudio#Configuration]]: is there anything worth being merged from there? -- [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 04:44, 30 November 2014 (UTC)<br />
<br />
:It seems to focus more on generic explanation/configuration, where the main article is mostly about troubleshooting (considering the size of that section, you'd consider moving it to [[PulseAudio/Troubleshooting]] ...) -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 10:40, 30 November 2014 (UTC)<br />
<br />
::How much sense would it make to actually merge [[PulseAudio/Configuration#Easy_configuration]] and [[PulseAudio/Configuration#Advanced_configuration]] and then simply redirect [[PulseAudio/Configuration]] to [[PulseAudio#Configuration]]?<br />
::I'd agree with moving Troubleshooting to [[PulseAudio/Troubleshooting]].<br />
::-- [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 12:01, 2 December 2014 (UTC)<br />
<br />
:::I do agree it makes sense to merge [[PulseAudio/Configuration#Easy_configuration]] and [[PulseAudio/Configuration#Advanced_configuration]] in [[PulseAudio/Configuration]]. I made an attempt in this way. [[User:Gabx|Gabx]] ([[User talk:Gabx|talk]]) 18:24, 28 December 2014 (UTC)<br />
<br />
::::I like what I see so far, more extensive configuration in the main article also allows to cut back on [[PulseAudio/Troubleshooting]]. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 23:29, 28 December 2014 (UTC)<br />
<br />
== Restore package list ==<br />
Why [https://wiki.archlinux.org/index.php?title=PulseAudio&diff=381413&oldid=381339 revert the list]? I think Arch News is just a temp reminder. Arch Wiki should keep all needed info.--[[User:Fengchao|Fengchao]] ([[User talk:Fengchao|talk]]) 09:37, 1 August 2015 (UTC)<br />
<br />
:I'm not sure what the right policy is for this (hence my query in my edit summary) but I would just point out that the [https://www.archlinux.org/news/?page=12 archive] does stretch back to 2002 so I don't think it's unsafe to link to that material. -- [[User:Chazza|Chazza]] ([[User talk:Chazza|talk]]) 16:34, 1 August 2015 (UTC)<br />
<br />
::That's true, but the set of split packages can change in the future... -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 18:37, 1 August 2015 (UTC)<br />
::: Exactly, so at that time, the news page is out of date and only wiki page could be updated to keep up.--[[User:Fengchao|Fengchao]] ([[User talk:Fengchao|talk]]) 12:57, 19 August 2015 (UTC)<br />
<br />
:::We should ask for a more extensive optdepends instead of maintaining this information here. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 19:03, 1 August 2015 (UTC)<br />
<br />
::::Alternatively creating a ''pulseaudio-modules'' group should be equally simple for the packager, more comprehensible to the user and most naturally referenceable from the wiki. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 19:14, 1 August 2015 (UTC)<br />
:::::Then before a group is created, should we restore the package list?--[[User:Fengchao|Fengchao]] ([[User talk:Fengchao|talk]]) 12:57, 19 August 2015 (UTC)<br />
<br />
::::::I don't think any action need be taken until such a time that the set of split packages changes. -- [[User:Chazza|Chazza]] ([[User talk:Chazza|talk]]) 17:14, 7 September 2015 (UTC)<br />
<br />
:::::::Considering [https://wiki.archlinux.org/index.php?title=PulseAudio&diff=next&oldid=408749], I think including the list explicitly is useful already. Restored in [https://wiki.archlinux.org/index.php?title=PulseAudio&diff=409861&oldid=409859]. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 14:30, 22 November 2015 (UTC)<br />
<br />
== Equalizer module is unsupported ==<br />
<br />
As of {{pkg|pulseaudio}}-7.0-2, loading the {{ic|module-equalizer-sink}} module results in the following warning:<br />
<br />
pulseaudio[535]: W: [pulseaudio] module-equalizer-sink.c: module-equalizer-sink is currently unsupported, and can sometimes cause PulseAudio crashes, increased latency or audible artifacts.<br />
pulseaudio[535]: W: [pulseaudio] module-equalizer-sink.c: If you're facing audio problems, try unloading this module as a potential workaround.<br />
<br />
Running ''qpaeq'' then makes PulseAudio crash with this error:<br />
<br />
pulseaudio[535]: E: [pulseaudio] iface-module.c: Assertion 'pa_dbus_protocol_add_interface(m->dbus_protocol, m->path, &module_interface_info, m) >= 0' failed at modules/dbus/iface-module.c:309, function pa_dbusiface_module_new(). Aborting.<br />
<br />
-- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 08:43, 28 September 2015 (UTC)<br />
<br />
:This is not correct. Recently installed {{pkg|pulseaudio}}-7.0-2 and following the instructions in the wiki am successfully running the equalizer.<br />
<br />
:[[User:Brettski|brettski]] ([[User talk:Brettski|talk]]) 03:46, 13 October 2015 (UTC)<br />
<br />
::This is odd. You should have at least seen the first warning in your journal... -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 07:01, 13 October 2015 (UTC)<br />
<br />
== Adding User to Audio Group ==<br />
<br />
Currently, the article says, "There is no need to add your user to audio group, as it uses udev and logind to dynamically give access to the currently "active" user". That is a little heavy-handed; perhaps a wording like "There is '''usually''' no need..."? For instance, on one of my machines running pulse audio, I was unable to play any sounds as "me", but could using root. The server is running headless, and I access it over SSH. It's understandable that udev doesn't consider "me" the currently "active" user in this scenario. It is essential to know that adding a user to the audio group helps in this circumstance, so I appreciate the explicit mention of that group. Does my rewording make sense, or is there a better rewording? [[User:Lmat|Lmat]] ([[User talk:Lmat|talk]]) 14:29, 1 March 2016 (UTC)<br />
:This looks like a reasonable rewording. Additionally I would considering explicitly describing in which cases it might make sense in the Wiki. -- [[User:Edh|Edh]] ([[User talk:Edh|talk]]) 14:56, 1 March 2016 (UTC)<br />
<br />
== Default sink @DEFAULT_SINK@ and keyboard control ==<br />
<br />
I got a hard time finding {{ic|pactl set-sink-volume @DEFAULT_SINK@ -5%}}.<br />
<br />
{{ic|@DEFAULT_SINK@}} comes very handy and fixes a long time frustration with PulseAudio (with sink indices changing each time I plug unplug a jack, or to get commands working across multiple machines with different sinks).<br />
<br />
It will probably help more people to make some changes or add a Tip about {{ic|@DEFAULT_SINK@}} somewhere ([[PulseAudio#Keyboard volume control]] ?).<br />
<br />
Only after finding about it, I found [[Xbindkeys#Xbindkeysrc]]. Maybe [[PulseAudio#Keyboard volume control]] could also Tip about [[Xbindkeys#Xbindkeysrc]].<br />
<br />
(I would have edit the page, if only I knew which changes was best: add a Tip and/or change the command lines and/or something else ?)<br />
<br />
-- [[User:Gravemind2a|Gravemind2a]] ([[User talk:Gravemind2a|talk]]) 09:55, 4 September 2016 (UTC)<br />
<br />
: I suppose changing the commands is the best approach. However for those who want to edit a specific sink a small note should be added. This is just my personal opinion on this matter. -- [[User:Edh|Edh]] ([[User talk:Edh|talk]]) 10:11, 4 September 2016 (UTC)<br />
<br />
:: I think it is better suited as a tip, because if you start directly with {{ic|@DEFAULT_SINK@}}, it's not clear at all what the shortcut is for. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 11:07, 4 September 2016 (UTC)<br />
<br />
:: I've added the tip and edited the [[xbindkeys]] page to link to both [[PulseAudio]] and [[ALSA]] pages for alternative commands. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 11:37, 4 September 2016 (UTC)<br />
<br />
::: Thanks. I also discovered {{ic|@DEFAULT_SOURCE@}} (for microphone) and I've added tips in [[PulseAudio/Examples#Set default input sources]] and [[PulseAudio/Examples#Set the default output source]] -- [[User:Gravemind2a|Gravemind2a]] ([[User talk:Gravemind2a|talk]]) 11:55, 4 September 2016 (UTC)<br />
<br />
: Hey, Gravemind2a, does {{ic|amixer -q -D pulse sset Master 5%+ unmute}} work for you? Take a look at my comment right above yours, in this Talk page. --[[User:Denilsonsa|Denilsonsa]] ([[User talk:Denilsonsa|talk]]) 11:03, 4 September 2016 (UTC)<br />
<br />
:: Yes it works. But if it also works directly with PulseAudio {{ic|@DEFAULT_SINK@}}, why go through alsa amixer ? (and also long time ago I had issues with fast repeating asynchronous amixer volume commands making left/right speaker unbalanced, that actually made me drop Alsa in favor to PulseAudio)-- [[User:Gravemind2a|Gravemind2a]] ([[User talk:Gravemind2a|talk]]) 11:29, 4 September 2016 (UTC)<br />
<br />
<br />
== Networked audio ==<br />
<br />
I have added a stub/[[PulseAudio#Networked_audio|section]] about sending/receiving audio through the network using PA. The relevant documentation is [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/ here]. I have a working networked PulseAudio setup, it's available [https://github.com/nodiscc/srv01/tree/master/roles/pulseaudio here] as an ansible playbook, please allow for some time for me to port the most important information here. --[[User:Nodiscc|Nodiscc]] ([[User talk:Nodiscc|talk]]) 14:45, 21 November 2017 (UTC)</div>Nodiscchttps://wiki.archlinux.org/index.php?title=Talk:PulseAudio&diff=497712Talk:PulseAudio2017-11-21T14:45:06Z<p>Nodiscc: /* Networked audio*/ work started</p>
<hr />
<div>==Configuration of the PulseAudio ALSA plugin==<br />
Can anybody give an example where to use the ''pcm.pulse'' setting? --[[User:BertiBoeller|BertiBoeller]] 12:33, 17 October 2009 (EDT)<br />
<br />
== Abandoned draft ==<br />
<br />
[[PulseAudio/Configuration]] was initially created to discuss PA configuration; then its goal was changed to be a replacement for this whole article; then it was abandoned. Currently it's marked for merge in [[PulseAudio#Configuration]]: is there anything worth being merged from there? -- [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 04:44, 30 November 2014 (UTC)<br />
<br />
:It seems to focus more on generic explanation/configuration, where the main article is mostly about troubleshooting (considering the size of that section, you'd consider moving it to [[PulseAudio/Troubleshooting]] ...) -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 10:40, 30 November 2014 (UTC)<br />
<br />
::How much sense would it make to actually merge [[PulseAudio/Configuration#Easy_configuration]] and [[PulseAudio/Configuration#Advanced_configuration]] and then simply redirect [[PulseAudio/Configuration]] to [[PulseAudio#Configuration]]?<br />
::I'd agree with moving Troubleshooting to [[PulseAudio/Troubleshooting]].<br />
::-- [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 12:01, 2 December 2014 (UTC)<br />
<br />
:::I do agree it makes sense to merge [[PulseAudio/Configuration#Easy_configuration]] and [[PulseAudio/Configuration#Advanced_configuration]] in [[PulseAudio/Configuration]]. I made an attempt in this way. [[User:Gabx|Gabx]] ([[User talk:Gabx|talk]]) 18:24, 28 December 2014 (UTC)<br />
<br />
::::I like what I see so far, more extensive configuration in the main article also allows to cut back on [[PulseAudio/Troubleshooting]]. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 23:29, 28 December 2014 (UTC)<br />
<br />
== Restore package list ==<br />
Why [https://wiki.archlinux.org/index.php?title=PulseAudio&diff=381413&oldid=381339 revert the list]? I think Arch News is just a temp reminder. Arch Wiki should keep all needed info.--[[User:Fengchao|Fengchao]] ([[User talk:Fengchao|talk]]) 09:37, 1 August 2015 (UTC)<br />
<br />
:I'm not sure what the right policy is for this (hence my query in my edit summary) but I would just point out that the [https://www.archlinux.org/news/?page=12 archive] does stretch back to 2002 so I don't think it's unsafe to link to that material. -- [[User:Chazza|Chazza]] ([[User talk:Chazza|talk]]) 16:34, 1 August 2015 (UTC)<br />
<br />
::That's true, but the set of split packages can change in the future... -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 18:37, 1 August 2015 (UTC)<br />
::: Exactly, so at that time, the news page is out of date and only wiki page could be updated to keep up.--[[User:Fengchao|Fengchao]] ([[User talk:Fengchao|talk]]) 12:57, 19 August 2015 (UTC)<br />
<br />
:::We should ask for a more extensive optdepends instead of maintaining this information here. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 19:03, 1 August 2015 (UTC)<br />
<br />
::::Alternatively creating a ''pulseaudio-modules'' group should be equally simple for the packager, more comprehensible to the user and most naturally referenceable from the wiki. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 19:14, 1 August 2015 (UTC)<br />
:::::Then before a group is created, should we restore the package list?--[[User:Fengchao|Fengchao]] ([[User talk:Fengchao|talk]]) 12:57, 19 August 2015 (UTC)<br />
<br />
::::::I don't think any action need be taken until such a time that the set of split packages changes. -- [[User:Chazza|Chazza]] ([[User talk:Chazza|talk]]) 17:14, 7 September 2015 (UTC)<br />
<br />
:::::::Considering [https://wiki.archlinux.org/index.php?title=PulseAudio&diff=next&oldid=408749], I think including the list explicitly is useful already. Restored in [https://wiki.archlinux.org/index.php?title=PulseAudio&diff=409861&oldid=409859]. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 14:30, 22 November 2015 (UTC)<br />
<br />
== Equalizer module is unsupported ==<br />
<br />
As of {{pkg|pulseaudio}}-7.0-2, loading the {{ic|module-equalizer-sink}} module results in the following warning:<br />
<br />
pulseaudio[535]: W: [pulseaudio] module-equalizer-sink.c: module-equalizer-sink is currently unsupported, and can sometimes cause PulseAudio crashes, increased latency or audible artifacts.<br />
pulseaudio[535]: W: [pulseaudio] module-equalizer-sink.c: If you're facing audio problems, try unloading this module as a potential workaround.<br />
<br />
Running ''qpaeq'' then makes PulseAudio crash with this error:<br />
<br />
pulseaudio[535]: E: [pulseaudio] iface-module.c: Assertion 'pa_dbus_protocol_add_interface(m->dbus_protocol, m->path, &module_interface_info, m) >= 0' failed at modules/dbus/iface-module.c:309, function pa_dbusiface_module_new(). Aborting.<br />
<br />
-- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 08:43, 28 September 2015 (UTC)<br />
<br />
:This is not correct. Recently installed {{pkg|pulseaudio}}-7.0-2 and following the instructions in the wiki am successfully running the equalizer.<br />
<br />
:[[User:Brettski|brettski]] ([[User talk:Brettski|talk]]) 03:46, 13 October 2015 (UTC)<br />
<br />
::This is odd. You should have at least seen the first warning in your journal... -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 07:01, 13 October 2015 (UTC)<br />
<br />
== Adding User to Audio Group ==<br />
<br />
Currently, the article says, "There is no need to add your user to audio group, as it uses udev and logind to dynamically give access to the currently "active" user". That is a little heavy-handed; perhaps a wording like "There is '''usually''' no need..."? For instance, on one of my machines running pulse audio, I was unable to play any sounds as "me", but could using root. The server is running headless, and I access it over SSH. It's understandable that udev doesn't consider "me" the currently "active" user in this scenario. It is essential to know that adding a user to the audio group helps in this circumstance, so I appreciate the explicit mention of that group. Does my rewording make sense, or is there a better rewording? [[User:Lmat|Lmat]] ([[User talk:Lmat|talk]]) 14:29, 1 March 2016 (UTC)<br />
:This looks like a reasonable rewording. Additionally I would considering explicitly describing in which cases it might make sense in the Wiki. -- [[User:Edh|Edh]] ([[User talk:Edh|talk]]) 14:56, 1 March 2016 (UTC)<br />
<br />
== Default sink @DEFAULT_SINK@ and keyboard control ==<br />
<br />
I got a hard time finding {{ic|pactl set-sink-volume @DEFAULT_SINK@ -5%}}.<br />
<br />
{{ic|@DEFAULT_SINK@}} comes very handy and fixes a long time frustration with PulseAudio (with sink indices changing each time I plug unplug a jack, or to get commands working across multiple machines with different sinks).<br />
<br />
It will probably help more people to make some changes or add a Tip about {{ic|@DEFAULT_SINK@}} somewhere ([[PulseAudio#Keyboard volume control]] ?).<br />
<br />
Only after finding about it, I found [[Xbindkeys#Xbindkeysrc]]. Maybe [[PulseAudio#Keyboard volume control]] could also Tip about [[Xbindkeys#Xbindkeysrc]].<br />
<br />
(I would have edit the page, if only I knew which changes was best: add a Tip and/or change the command lines and/or something else ?)<br />
<br />
-- [[User:Gravemind2a|Gravemind2a]] ([[User talk:Gravemind2a|talk]]) 09:55, 4 September 2016 (UTC)<br />
<br />
: I suppose changing the commands is the best approach. However for those who want to edit a specific sink a small note should be added. This is just my personal opinion on this matter. -- [[User:Edh|Edh]] ([[User talk:Edh|talk]]) 10:11, 4 September 2016 (UTC)<br />
<br />
:: I think it is better suited as a tip, because if you start directly with {{ic|@DEFAULT_SINK@}}, it's not clear at all what the shortcut is for. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 11:07, 4 September 2016 (UTC)<br />
<br />
:: I've added the tip and edited the [[xbindkeys]] page to link to both [[PulseAudio]] and [[ALSA]] pages for alternative commands. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 11:37, 4 September 2016 (UTC)<br />
<br />
::: Thanks. I also discovered {{ic|@DEFAULT_SOURCE@}} (for microphone) and I've added tips in [[PulseAudio/Examples#Set default input sources]] and [[PulseAudio/Examples#Set the default output source]] -- [[User:Gravemind2a|Gravemind2a]] ([[User talk:Gravemind2a|talk]]) 11:55, 4 September 2016 (UTC)<br />
<br />
: Hey, Gravemind2a, does {{ic|amixer -q -D pulse sset Master 5%+ unmute}} work for you? Take a look at my comment right above yours, in this Talk page. --[[User:Denilsonsa|Denilsonsa]] ([[User talk:Denilsonsa|talk]]) 11:03, 4 September 2016 (UTC)<br />
<br />
:: Yes it works. But if it also works directly with PulseAudio {{ic|@DEFAULT_SINK@}}, why go through alsa amixer ? (and also long time ago I had issues with fast repeating asynchronous amixer volume commands making left/right speaker unbalanced, that actually made me drop Alsa in favor to PulseAudio)-- [[User:Gravemind2a|Gravemind2a]] ([[User talk:Gravemind2a|talk]]) 11:29, 4 September 2016 (UTC)<br />
<br />
<br />
== Networked audio ==<br />
<br />
I have added a stub/[[PulseAudio#Networked_audio|section]] about sending/receiving audio through the network using PA. The relevant documentation is [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/ here]. I have a working networked PulseAudio setup, it's available [https://github.com/nodiscc/srv01/tree/master/roles/pulseaudio here] as an ansible playbook, please allow for some time for me to port the most important information here.</div>Nodiscchttps://wiki.archlinux.org/index.php?title=PulseAudio&diff=497711PulseAudio2017-11-21T14:37:59Z<p>Nodiscc: /* Networked audio */ add new section, and stub template</p>
<hr />
<div>[[Category:Sound]]<br />
[[cs:PulseAudio]]<br />
[[es:PulseAudio]]<br />
[[fr:PulseAudio]]<br />
[[it:PulseAudio]]<br />
[[ja:PulseAudio]]<br />
[[pt:PulseAudio]]<br />
[[ru:PulseAudio]]<br />
[[tr:PulseAudio]]<br />
[[zh-hans:PulseAudio]]<br />
{{Related articles start}}<br />
{{Related|PulseAudio/Examples}}<br />
{{Related|PulseAudio/Troubleshooting}}<br />
{{Related articles end}}<br />
[[Wikipedia:PulseAudio|PulseAudio]] PulseAudio is a general purpose sound server intended to run as a middleware between your applications and your hardware devices, either using [[ALSA]] or [[OSS]]. It also offers easy network streaming accross local devices using [[Avahi]] if enabled. While its main purpose is to ease audio configuration, its modular design allows more advanced users to configure the daemon precisely to best suit their needs.<br />
<br />
== Installation ==<br />
<br />
Install the {{Pkg|pulseaudio}} package.<br />
<br />
Some PulseAudio modules have been [https://www.archlinux.org/news/pulseaudio-split/ split] from the main package and must be installed separately if needed:<br />
<br />
* {{Pkg|pulseaudio-bluetooth}}: Bluetooth (Bluez) support<br />
* {{Pkg|pulseaudio-equalizer}}: Equalizer sink (qpaeq)<br />
* {{Pkg|pulseaudio-gconf}}: GConf support (paprefs)<br />
* {{Pkg|pulseaudio-jack}}: [[JACK]] sink, source and jackdbus detection<br />
* {{Pkg|pulseaudio-lirc}}: Infrared (LIRC) volume control<br />
* {{Pkg|pulseaudio-zeroconf}}: Zeroconf (Avahi/DNS-SD) support<br />
<br />
{{Note|Some confusion may occur between [[ALSA]] and PulseAudio. ALSA includes a Linux kernel component with sound card drivers, as well as a userspace component, {{ic|libalsa}}.[http://www.alsa-project.org/main/index.php/Download] PulseAudio builds only on the kernel component, but offers compatibility with {{ic|libalsa}} through {{Pkg|pulseaudio-alsa}}.[http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/#index14h3]}}<br />
<br />
=== Front-ends ===<br />
<br />
There are a number of front-ends available for controlling the PulseAudio daemon:<br />
<br />
* Configuration/volume control (graphical): {{Pkg|pavucontrol}}<br />
* General daemon configuration (graphical): {{Pkg|paprefs}}<br />
* Volume control via mapped keyboard keys: {{AUR|pulseaudio-ctl}}, {{AUR|pavolume-git}}<br />
* Console (CLI) mixers: {{Pkg|ponymix}} and {{Pkg|pamixer}}<br />
* Console (curses) mixer: {{AUR|pulsemixer}}<br />
* Web volume control: [https://github.com/Siot/PaWebControl PaWebControl]<br />
* System tray icon: {{AUR|pasystray}}, {{AUR|pasystray-git}}, {{AUR|pasystray-gtk2-standalone}}, and {{AUR|pasystray-gtk3-standalone}}<br />
: {{Tip|The non-standalone versions of {{ic|pasystray}} can install both GTK2 and GTK3 versions and requires choosing which during build. The standalone versions install a single version.}}<br />
* KF5 plasma applet: {{Pkg|kmix}} and {{Pkg|plasma-pa}}<br />
* Xfce4 plugin: {{Pkg|xfce4-pulseaudio-plugin}}, {{AUR|pa-applet-git}}<br />
* If you want to use Bluetooth headsets or other Bluetooth audio devices with PulseAudio, see the [[Bluetooth headset]] article.<br />
<br />
== Configuration ==<br />
<br />
=== Configuration files ===<br />
<br />
{{Merge|PulseAudio/Configuration|Configuration should stay in the main article, so the linked page should be merged here.|section=Abandoned draft}}<br />
<br />
By default, PulseAudio is configured to automatically detect all sound cards and manage them. It takes control of all detected ALSA devices and redirects all audio streams to itself, making the PulseAudio daemon the central configuration point. The daemon should work mostly out of the box, only requiring a few minor tweaks. <br />
<br />
PulseAudio will first look for configuration files in the home directory {{ic|~/.config/pulse}}, then system-wide {{ic|/etc/pulse}}.<br />
<br />
PulseAudio runs as a server daemon that can run either system-wide or on per-user basis using a client/server architecture. The daemon by itself does nothing without its '''modules''' except to provide an API and host dynamically loaded modules. The audio routing and processing tasks are all handled by various modules. You can find a detailed list of all available modules at [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/ Pulseaudio Loadable Modules]. To enable them you can just add a line {{ic|load-module <module-name-from-list>}} to {{ic|~/.config/pulse/default.pa}}.<br />
<br />
{{Tip|<br />
* It is strongly suggested not to edit system-wide configuration files, but rather edit user ones. Create the {{ic|~/.config/pulse}} directory, then copy the system configuration files into it and edit according to your need.<br />
* Make sure you keep user configuration in sync with changes to the packaged files in {{ic|/etc/pulse/}}. Otherwise, PulseAudio may refuse to start due to configuration errors.<br />
* There is usually no need to add your user to the {{ic|audio}} group, as PulseAudio uses [[udev]] and ''logind'' to give access dynamically to the currently "active" user. Exceptions would include running the machine headless so that there is no currently "active" user.}}<br />
<br />
==== daemon.conf ====<br />
<br />
Defines base settings like the default sample rates used by modules, resampling methods, realtime scheduling and various other settings related to the server process. These can not be changed at runtime without restarting the PulseAudio daemon. The defaults are sensible for most users.<br />
<br />
{{Note|PulseAudio does not perform tilde expansion on paths in this file. Use absolute paths for any files.}}<br />
<br />
{| class="wikitable"<br />
|+ Notable configuration options<br />
! Option || Description<br />
|+<br />
| system-instance || If set to {{ic|yes}}, run the daemon as a [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/ system-wide] instance. [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ Highly discouraged] as it can introduce security issues. Useful on [[Xorg multiseat|Multiseat]] systems, or headless systems that have no real local users. Defaults to {{ic|no}}.<br />
|+<br />
| avoid-resampling || With {{ic|1=avoid-resampling = yes}}, PulseAudio automatically configures the hardware to the sample rate which the application uses, if the hardware supports this sample rate (needs [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PA 11] or higher)<br />
|+<br />
| resample-method || Which resampler to use when audio with incompatible sample rates needs to be passed between modules (e.g. playback of 96kHz audio on hardware which only supports 48kHz). The available resamplers can be listed with {{ic|$ pulseaudio --dump-resample-methods}}. Choose the best tradeoff between CPU usage and audio quality for the present use-case. {{Tip|In some cases PulseAudio will generate a high CPU load. This can happen when multiple streams are resampled (individually). If this is a common use-case in a workflow, it should be considered to create an additional sink at a matching sample rate which can then be fed into the main sink, resampling only once.}}<br />
|+<br />
| flat-volumes ||{{ic|flat-volumes}} scales the device-volume with the volume of the "loudest" application. For example, raising the VoIP call volume will raise the hardware volume and adjust the music-player volume so it stays where it was, without having to lower the volume of the music-player manually. Defaults to {{ic|yes}} upstream, but to {{ic|no}} within Arch. {{Note|The default behavior upstream can sometimes be confusing and some applications, unaware of this feature, can set their volume to 100% at startup, potentially blowing your speakers or your ears. This is why Arch defaults to the classic (ALSA) behavior by setting this to {{ic|no}}.}}<br />
|+<br />
| default-fragments || Audio samples are split into multiple fragments of {{ic|default-fragment-size-msec}} each. The larger the buffer is, the less likely audio will skip when the system is overloaded. On the downside this will increase the overall latency. Increase this value if you have issues.<br />
|}<br />
<br />
==== default.pa ====<br />
<br />
This file is a startup script and is used to configure modules. It is actually parsed and read after the daemon has finished initializing and additional commands can be sent at runtime using {{ic|$ pactl}} or {{ic|$ pacmd}}. The startup script can also be provided on the command line by starting PulseAudio in a terminal using {{ic|$ pulseaudio -nC}}. This will make the daemon load the CLI module and will accept the configuration directly from the command line, and output resulting information or error messages on the same terminal. This can be useful when debugging the daemon or just to test various modules before setting them permanently on disk. The manual page is quite self-explanatory, consult {{man|5|pulse-cli-syntax}} for the details of the syntax.<br />
<br />
{{tip|<br />
* Rather than being a complete copy, {{ic|~/.config/pulse/default.pa}} can start with the line {{ic|.include /etc/pulse/default.pa}} and then just override the defaults.<br />
* Run {{ic|<nowiki>$ pacmd list-sinks|egrep -i 'index:|name:'</nowiki>}} to list available sinks. The present default sink is marked with an asterisk.<br />
* Edit {{ic|~/.config/pulse/default.pa}} to insert/alter the set-default-sink command using the sink's name as the numbering cannot be guaranteed repeatable.<br />
}}<br />
<br />
==== client.conf ====<br />
This is the configuration file read by every PulseAudio client application. It is used to configure runtime options for individual clients. It can be used to set and configure the default sink and source statically as well as allowing (or disallowing) clients to automatically start the server if not currently running.<br />
<br />
=== Configuration command ===<br />
<br />
The main command to configure a server during runtime is {{ic|$ pacmd}}. Run {{ic|$ pacmd --help}} for a list options, or just run {{ic|$ pacmd}} to enter the shell interactive mode and {{ic|Ctrl+d}} to exit. All modifications will immediately be applied.<br />
<br />
Once your new settings have been tested and meet your needs, edit the {{ic|default.pa}} accordingly to make the change persistent. See [[PulseAudio/Examples]] for some basic settings.<br />
<br />
{{Tip|leave the {{ic|load-module module-default-device-restore}} line in the {{ic|default.pa}} file untouched. It will allow you to restart the server in its default state, thus dismissing any wrong setting.}}<br />
<br />
It is important to understand that the "sources" (processes, capture devices) and "sinks" (sound cards, servers, other processes) accessible and selectable through PulseAudio depend upon the current hardware "Profile" selected. These "Profiles" are those ALSA "pcms" listed by the command {{ic|aplay -L}}, and more specifically by the command {{ic|pacmd list-cards}}, which will include a line "index:", a list beginning "profiles:", and a line "active profile: <...>" in the output, among other things. "Profiles" correspond to different card input/output configurations, notably the number of available input/output channels.<br />
<br />
The "active profile" can be set with the command {{ic|pacmd set-card-profile INDEX PROFILE}}, with ''no'' comma separating INDEX and PROFILE, where INDEX is just the number on the line "index:" and a PROFILE name is everything shown from the beginning of any line under "profile:" to just ''before'' the colon and first space, as shown by the command {{ic|pacmd list-cards}}. For instance, {{ic|pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo}}.<br />
<br />
It may be easier to select a "Profile" with a graphical tool like {{ic|pavucontrol}}, under the "Configuration" tab, or KDE System Settings, "Multimedia/Audio and Video Settings", under the "Audio Hardware Setup" tab. Each audio "Card", which are those devices listed by the command {{ic|aplay -l}}, or again by the command {{ic|pacmd list-cards}}, will have its own selectable "Profile". When a "Profile" has been selected, the then available "sources" and "sinks" can be seen by using the commands {{ic|pacmd list-sources}} and {{ic|pacmd list-sinks}}. Note that the "index" of the available sources and sinks will change each time a card profile is changed.<br />
<br />
The selected "Profile" can be an issue for some applications, especially the Adobe Flash players, typically {{ic|/usr/lib/mozilla/plugins/libflashplayer.so}} and {{ic|/usr/lib/PepperFlash/libpepflashplayer.so}}. Often, these Flash players will only work when one of the Stereo profiles is selected, and otherwise, will play video with no sound, or will simply "crash". When all else fails, you might try selecting a different profile.<br />
<br />
Of course, when configuring some variation of Surround Sound in PulseAudio, the appropriate Surround profile will have to be selected, before Surround Sound will work, or in order to do things like remap the speaker channels.<br />
<br />
== Running ==<br />
<br />
PulseAudio on Arch has {{ic|pulseaudio.socket}} enabled by default for the [[systemd/User]] instance. This means that PulseAudio will automatically start when needed.<br />
<br />
{{Note|<br />
* To disable {{ic|pulseaudio.socket}}, make sure that {{ic|$XDG_CONFIG_HOME/systemd/user/}} exists and run {{ic|systemctl --user mask pulseaudio.socket}}.<br />
* Many [[desktop environments]] autostart programs based on [[Desktop entries#Autostart|desktop files]] in the {{ic|/etc/xdg/autostart/}} directory. In this case, PulseAudio will be launched automatically regardless of the socket activation status.<br />
}}<br />
<br />
For more information, see [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Running/ PulseAudio: Running].<br />
<br />
== Back-end configuration ==<br />
<br />
=== ALSA ===<br />
<br />
If you have applications that do not support PulseAudio explicitly but rely on ALSA, these applications will try to access the sound card directly via ALSA and will therefore bypass PulseAudio. PulseAudio will thus not have access to the sound card any more. As a result, all applications relying on PulseAudio will not be working any more, leading to [[PulseAudio/Troubleshooting#The only device shown is "dummy output" or newly connected cards are not detected|this issue]]. To prevent this, you will need to install the {{Pkg|pulseaudio-alsa}} package. It contains the necessary {{ic|/etc/asound.conf}} for configuring ALSA to use PulseAudio. Also make sure that {{ic|~/.asoundrc}} does not exist, as it would override the {{ic|/etc/asound.conf}} file.<br />
<br />
Please also install {{Pkg|lib32-libpulse}} and {{Pkg|lib32-alsa-plugins}} if you run a x86_64 system and want to have sound for 32-bit [[multilib]] programs like [[Wine]] and [[Steam]].<br />
<br />
To prevent applications from using ALSA's OSS emulation and bypassing PulseAudio (thereby preventing other applications from playing sound), make sure the module {{ic|snd_pcm_oss}} is not being loaded at boot. If it is currently loaded ({{ic|<nowiki>lsmod | grep oss</nowiki>}}), disable it by executing:<br />
# rmmod snd_pcm_oss<br />
<br />
==== Expose PulseAudio sources, sinks and mixers to ALSA ====<br />
Although {{Pkg|pulseaudio-alsa}} contains the necessary configuration file to allow ALSA applications to use PulseAudio's default device, ALSA's {{ic|pulse}} plugin is more versatile than that:<br />
<br />
{{hc|~/.asoundrc (or /etc/asound.conf)|2=<br />
# Create an alsa input/output using specific PulseAudio sources/sinks<br />
pcm.pulse-example1 {<br />
type pulse<br />
device "my-combined-sink" # name of a source or sink<br />
fallback "pulse-example2" # if combined not available<br />
}<br />
<br />
pcm.pulse-example2 {<br />
type pulse<br />
device "other-sound-card" # name of a source or sink<br />
# example: device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# Create an alsa mixer using specific PulseAudio sources/sinks<br />
# these can be tested with "alsamixer -D pulse-example3"<br />
ctl.pulse-example3 {<br />
type pulse<br />
device "my-output" # name of source or sink to control<br />
<br />
# example: always control the laptop speakers:<br />
# device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
fallback "pulse-example4" # supports fallback too<br />
}<br />
<br />
# Mixers also can control a specific source and sink, separately:<br />
ctl.pulse-example4 {<br />
type pulse<br />
sink "my-usb-headphones"<br />
source "my-internal-mic"<br />
<br />
# example: output to HDMI, record using internal<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# These can override the default mixer (example: for pnmixer integration)<br />
ctl.!default {<br />
type pulse<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
}}<br />
<br />
The [http://git.alsa-project.org/?p=alsa-plugins.git;a=tree;f=pulse;hb=HEAD source code] can be read to know all available options.<br />
<br />
==== ALSA/dmix without grabbing hardware device ====<br />
<br />
{{Note|This section describes alternative configuration, which is generally '''not''' recommended.}}<br />
<br />
You may want to use ALSA directly in most of your applications while still being able to use applications which require PulseAudio at the same time. The following steps allow you to make PulseAudio use dmix instead of grabbing ALSA hardware device.<br />
<br />
* Remove package {{Pkg|pulseaudio-alsa}}, which provides compatibility layer between ALSA applications and PulseAudio. After this your ALSA apps will use ALSA directly without being hooked by Pulse.<br />
<br />
* Edit {{ic|/etc/pulse/default.pa}}.<br />
:Find and uncomment lines which load back-end drivers. Add '''device''' parameters as follows. Then find and comment lines which load autodetect modules.<br />
load-module module-alsa-sink '''device=dmix'''<br />
load-module module-alsa-source '''device=dsnoop'''<br />
# load-module module-udev-detect<br />
# load-module module-detect<br />
<br />
* ''Optional:'' If you use {{Pkg|kdemultimedia-kmix}} you may want to control ALSA volume instead of PulseAudio volume:<br />
$ echo export KMIX_PULSEAUDIO_DISABLE=1 > ~/.kde4/env/kmix_disable_pulse.sh<br />
$ chmod +x ~/.kde4/env/kmix_disable_pulse.sh<br />
<br />
* Now, reboot your computer and try running ALSA and PulseAudio applications at the same time. They both should produce sound simultaneously.<br />
:Use {{Pkg|pavucontrol}} to control PulseAudio volume if needed.<br />
<br />
=== OSS ===<br />
<br />
There are multiple ways of making OSS-only programs output to PulseAudio:<br />
<br />
==== ossp ====<br />
<br />
Install {{Pkg|ossp}} package and start {{ic|osspd.service}}.<br />
<br />
==== padsp wrapper ====<br />
<br />
Programs using OSS can work with PulseAudio by starting it with padsp (included with PulseAudio):<br />
<br />
$ padsp OSSprogram<br />
<br />
A few examples:<br />
<br />
$ padsp aumix<br />
$ padsp sox foo.wav -t ossdsp /dev/dsp<br />
<br />
You can also add a custom wrapper script like this: <br />
<br />
{{hc|/usr/local/bin/OSSProgram|<nowiki><br />
#!/bin/sh<br />
exec padsp /usr/bin/OSSprogram "$@"<br />
</nowiki>}}<br />
<br />
Make sure {{ic|/usr/local/bin}} comes before {{ic|/usr/bin}} in your '''PATH'''.<br />
<br />
=== GStreamer ===<br />
<br />
Install {{Pkg|gst-plugins-good}}, or {{AUR|gstreamer0.10-good-plugins}} if your intended program has a legacy [[GStreamer]] implementation.<br />
<br />
=== OpenAL ===<br />
<br />
OpenAL Soft should use PulseAudio by default, but can be explicitly configured to do so: {{hc|/etc/openal/alsoft.conf|2=drivers=pulse,alsa}}<br />
<br />
=== libao ===<br />
<br />
Edit the libao configuration file:<br />
{{hc|/etc/libao.conf|2=default_driver=pulse}}<br />
Be sure to remove the {{ic|1=dev=default}} option of the alsa driver or adjust it to specify a specific Pulse sink name or number. <br />
<br />
{{Note|You could possibly also keep the libao standard of outputting to the ''alsa'' driver and its default device if you install {{pkg|pulseaudio-alsa}} since the ALSA default device then '''is''' PulseAudio.}}<br />
<br />
== Equalizer ==<br />
<br />
{{Warning|The equalizer module is considered unstable and might be removed from PulseAudio. For more, see the [https://lists.freedesktop.org/archives/pulseaudio-discuss/2014-March/020174.html mailing list].}}<br />
<br />
PulseAudio has an integrated 10-band equalizer system. In order to use the equalizer do the following:<br />
<br />
Install {{Pkg|pulseaudio-equalizer}}:<br />
<br />
=== Load equalizer sink and dbus-protocol module ===<br />
<br />
$ pactl load-module module-equalizer-sink<br />
$ pactl load-module module-dbus-protocol<br />
<br />
=== GUI front-end ===<br />
<br />
run:<br />
<br />
$ qpaeq<br />
<br />
{{Note|If qpaeq has no effect, install {{pkg|pavucontrol}} and change "ALSA Playback on" to "FFT based equalizer on ..." while the media player is running.}}<br />
<br />
=== Load equalizer and dbus module on every boot ===<br />
<br />
Edit the {{ic|/etc/pulse/default.pa}} or {{ic|~/.config/pulse/default.pa}} file with your favorite editor and append the following lines:<br />
<br />
### Load the integrated PulseAudio equalizer and D-Bus module<br />
load-module module-equalizer-sink<br />
load-module module-dbus-protocol<br />
<br />
{{Note|The equalizer sink needs to be loaded after the master sink is already available.}}<br />
<br />
=== Alternative equalizers ===<br />
<br />
{{AUR|pulseaudio-equalizer-ladspa}} (based on {{Pkg|swh-plugins}}) can be used as an alternative to {{Pkg|pulseaudio-equalizer}}.<br />
<br />
{{AUR|pulseeffects}} applies peak limiting, compression, reverberation, auto volume and 15 bands equalization to Pulseaudio applications output.<br />
<br />
== Applications ==<br />
<br />
=== QEMU ===<br />
<br />
Refer to [[QEMU#Host]] for a detailed guide on how to configure pulseaudio within [[QEMU]].<br />
<br />
=== AlsaMixer.app ===<br />
<br />
Make {{AUR|alsamixer.app}} dockapp for the {{Pkg|windowmaker}} use pulseaudio, e.g.<br />
$ AlsaMixer.app --device pulse<br />
<br />
Here is a two examples where the first one is for ALSA and the other one is for pulseaudio. You can run multiple instances of it. Use the {{ic|-w}} option to choose which of the control buttons to bind to the mouse wheel.<br />
# AlsaMixer.app -3 Mic -1 Master -2 PCM --card 0 -w 1<br />
# AlsaMixer.app --device pulse -1 Capture -2 Master -w 2<br />
<br />
{{Note|It can use only those output sinks that set as default.}}<br />
<br />
=== XMMS2 ===<br />
<br />
Make it switch to pulseaudio output<br />
$ nyxmms2 server config output.plugin pulse<br />
and to alsa<br />
$ nyxmms2 server config output.plugin alsa<br />
To make xmms2 use a different output sink, e.g.<br />
$ nyxmms2 server config pulse.sink alsa_output.pci-0000_04_01.0.analog-stereo.monitor<br />
<br />
See also the official guide [https://xmms2.org/wiki/Using_the_application].<br />
<br />
=== KDE Plasma Workspaces and Qt4 ===<br />
<br />
PulseAudio will automatically be used by KDE/Qt4 applications. It is supported by default in the KDE sound mixer. For more information see the [https://www.freedesktop.org/wiki/Software/PulseAudio/Desktops/KDE/ KDE page in the PulseAudio wiki].<br />
<br />
One useful tidbit from that page is that {{ic|load-module module-device-manager}} should be loaded. This usually happens automatically at login through the script {{ic|/usr/bin/start-pulseaudio-x11}}; if you find that the module is not loaded automatically you can consider adding it manually to {{ic|/etc/pulse/default.pa}}. See [[#Switch on connect]] for possible conflicts with the {{ic|module-switch-on-connect}}.<br />
<br />
If the phonon-gstreamer backend is used for Phonon, GStreamer should also be configured as described in [[#GStreamer]].<br />
<br />
=== Audacious ===<br />
<br />
[[Audacious]] natively supports PulseAudio. In order to use it, set Audacious Preferences -> Audio -> Current output plugin to 'PulseAudio Output Plugin'.<br />
<br />
=== Music Player Daemon (MPD) ===<br />
<br />
[http://mpd.wikia.com/wiki/PulseAudio configure] [[MPD]] to use PulseAudio. See also [[MPD/Tips and Tricks#PulseAudio]].<br />
<br />
=== MPlayer ===<br />
<br />
[[MPlayer]] natively supports PulseAudio output with the {{ic|-ao pulse}} option. It can also be configured to default to PulseAudio output, in {{ic|~/.mplayer/config}} for per-user, or {{ic|/etc/mplayer/mplayer.conf}} for system-wide:<br />
{{hc|/etc/mplayer/mplayer.conf|2=ao=pulse}}<br />
<br />
=== guvcview ===<br />
<br />
{{Pkg|guvcview}} when using the PulseAudio input from a [[Webcam]] may have the audio input suspended resulting in no audio being recorded. You can check this by executing:<br />
<br />
$ pactl list sources<br />
<br />
If the audio source is "suspended" then modifying the following line in {{ic|/etc/pulse/default.pa}} and changing:<br />
<br />
load-module module-suspend-on-idle<br />
to<br />
#load-module module-suspend-on-idle<br />
<br />
And then either restarting PulseAudio or your computer will only idle the input source instead of suspending it. guvcview will then correctly record audio from the device.<br />
<br />
== Networked audio ==<br />
<br />
{{Stub|Play sound through the outputs of another computer on the network}}<br />
<br />
== Tips and tricks ==<br />
<br />
{{Merge|PulseAudio/Examples|Same topic.}}<br />
<br />
=== Keyboard volume control ===<br />
<br />
Map the following commands to your volume keys: {{ic|XF86AudioRaiseVolume}}, {{ic|XF86AudioLowerVolume}}, {{ic|XF86AudioMute}}. See [[Extra keyboard keys in Xorg]] for details.<br />
<br />
First find out which sink corresponds to the audio output you'd like to control.<br />
To list available sinks:<br />
pactl list sinks short<br />
<br />
Suppose sink 0 is to be used, to raise the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"<br />
<br />
To lower the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 -5%"<br />
<br />
To mute/unmute the volume:<br />
pactl set-sink-mute 0 toggle<br />
<br />
To mute/unmute the microphone:<br />
pactl set-source-mute 1 toggle<br />
<br />
{{Tip|To have keyboard shortcuts operate always on the default sink, specify {{ic|@DEFAULT_SINK@}} as the sink number, for example {{ic|pactl set-sink-mute @DEFAULT_SINK@ toggle}}.}}<br />
<br />
=== Play sound from a non-interactive shell (systemd service, cron) === <br />
<br />
Set {{ic|XDG_RUNTIME_DIR}} before the command (replace {{ic|''user_id''}} with the ID of the user running PulseAudio):<br />
<br />
XDG_RUNTIME_DIR=/run/user/''user_id'' paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
Or use {{ic|machinectl}}:<br />
<br />
# machinectl shell .host --uid=''user_id'' /usr/bin/paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
=== X11 Bell Events ===<br />
<br />
To get pulseaudio to handle X11 bell events, run the following commands after the X11 session has been started:<br />
<br />
pactl upload-sample /usr/share/sounds/freedesktop/stereo/bell.oga x11-bell<br />
pactl load-module module-x11-bell sample=x11-bell display=$DISPLAY<br />
<br />
To adjust the volume of the X11 bell, run the following command:<br />
<br />
xset b 100<br />
<br />
100 is a percentage. This requires the {{Pkg|xorg-xset}} package. See [[Autostarting]] for a way to run these commands automatically when the X11 session is started.<br />
<br />
=== Switch on connect ===<br />
This is a module used to switch the output sound to the newly connected device. For example, if you plug in a USB headset, the output will be switched to that. If you unplug it, the output will be set back to the last device. This used to be quite buggy but got a lot of attention in PulseAudio 8.0 and should work quite well now.<br />
<br />
If you just want to test the module then you can load it at runtime by calling:<br />
$ pactl load-module module-switch-on-connect<br />
<br />
If you want to make the change persistent you will have to add it to your local pulseaudio settings or to /etc/pulse/default.pa (system wide effect). In either case, add this line:<br />
load-module module-switch-on-connect<br />
<br />
{{Accuracy|Editing {{ic|/usr/bin/start-pulseaudio-x11}} will not survive package upgrade. The offending module can be unloaded in the config before loading {{ic|module-switch-on-connect}}, see [[Talk:Bluetooth_headset#GDMs_pulseaudio_instance_captures_bluetooth_headset]].}}<br />
<br />
On KDE/Plasma5 you should furthermore disable module-device-manager. As soon as Plasma5 is started it loads (via start-pulseaudio-x11) the module module-device-manager for pulseaudio to manage the devices. But that module apparently conflicts with module-switch-on-connect. Therefore you should disable that module by editing /bin/start-pulseaudio-x11 and commenting the lines for KDE. Simply logout and login again and in order to renew your pulseaudio session. On connect switching should now work properly.<br />
<br />
===Script for switching analogic outputs===<br />
<br />
Some sound cards present the option of multiple analog outputs, being switchable through using Pulseaudio profiles. But switching manually can become a chore, so you can use the following commands to switch it:<br />
$ pactl set-sink-port 'number of the card' 'port'<br />
<br />
This will set the default output to whatever port you chose.<br />
Example:<br />
$ pactl set-sink-port 0 "analog-output;output-speaker" <br />
<br />
The values can be easily obtained using:<br />
$ pactl list<br />
<br />
Current output can be obtained through:<br />
$ pactl list sinks | grep "active profile"| cut -d ' ' -f 3-<br />
<br />
This process can be automated through a simple script. This script then can be given a shortcut by the user:<br />
<br />
{{hc|~/pa.sh (or anything the user wants)|<nowiki><br />
#!/bin/bash<br />
# This script uses kdialog notification to warn the user of the currently swapped to profile. User could adapt it to their needs or change it.<br />
<br />
CURRENT_PROFILE=$(pactl list sinks | grep "active profile"| cut -d ' ' -f 3-)<br />
<br />
if [ "$CURRENT_PROFILE" = "analog-output;output-speaker" ] ; then<br />
pactl set-sink-port 0 "analog-output;output-headphones-1"<br />
kdialog --title "Pulseaudio" --passivepopup "Headphone" 2 & <br />
else <br />
pactl set-sink-port 0 "analog-output;output-speaker" <br />
kdialog --title "Pulseaudio" --passivepopup "Speaker" 2 &<br />
fi<br />
</nowiki>}}<br />
<br />
This script is intended to swap between two profiles. First checking the current profile then swapping it. Users are required to change the field 'active profile' according to the language pactl reports. Users might need to change the number of the card and the output to fit their machine.<br />
<br />
== Troubleshooting ==<br />
<br />
See [[PulseAudio/Troubleshooting]].<br />
<br />
== See also ==<br />
<br />
* [http://www.alsa-project.org/main/index.php/Asoundrc .asoundrc on ALSA wiki]<br />
* [http://www.pulseaudio.org/ PulseAudio official site]<br />
* [http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/ PulseAudio FAQ]</div>Nodiscchttps://wiki.archlinux.org/index.php?title=PulseAudio&diff=497710PulseAudio2017-11-21T14:34:05Z<p>Nodiscc: /* daemon.conf */ fix newline</p>
<hr />
<div>[[Category:Sound]]<br />
[[cs:PulseAudio]]<br />
[[es:PulseAudio]]<br />
[[fr:PulseAudio]]<br />
[[it:PulseAudio]]<br />
[[ja:PulseAudio]]<br />
[[pt:PulseAudio]]<br />
[[ru:PulseAudio]]<br />
[[tr:PulseAudio]]<br />
[[zh-hans:PulseAudio]]<br />
{{Related articles start}}<br />
{{Related|PulseAudio/Examples}}<br />
{{Related|PulseAudio/Troubleshooting}}<br />
{{Related articles end}}<br />
[[Wikipedia:PulseAudio|PulseAudio]] PulseAudio is a general purpose sound server intended to run as a middleware between your applications and your hardware devices, either using [[ALSA]] or [[OSS]]. It also offers easy network streaming accross local devices using [[Avahi]] if enabled. While its main purpose is to ease audio configuration, its modular design allows more advanced users to configure the daemon precisely to best suit their needs.<br />
<br />
== Installation ==<br />
<br />
Install the {{Pkg|pulseaudio}} package.<br />
<br />
Some PulseAudio modules have been [https://www.archlinux.org/news/pulseaudio-split/ split] from the main package and must be installed separately if needed:<br />
<br />
* {{Pkg|pulseaudio-bluetooth}}: Bluetooth (Bluez) support<br />
* {{Pkg|pulseaudio-equalizer}}: Equalizer sink (qpaeq)<br />
* {{Pkg|pulseaudio-gconf}}: GConf support (paprefs)<br />
* {{Pkg|pulseaudio-jack}}: [[JACK]] sink, source and jackdbus detection<br />
* {{Pkg|pulseaudio-lirc}}: Infrared (LIRC) volume control<br />
* {{Pkg|pulseaudio-zeroconf}}: Zeroconf (Avahi/DNS-SD) support<br />
<br />
{{Note|Some confusion may occur between [[ALSA]] and PulseAudio. ALSA includes a Linux kernel component with sound card drivers, as well as a userspace component, {{ic|libalsa}}.[http://www.alsa-project.org/main/index.php/Download] PulseAudio builds only on the kernel component, but offers compatibility with {{ic|libalsa}} through {{Pkg|pulseaudio-alsa}}.[http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/#index14h3]}}<br />
<br />
=== Front-ends ===<br />
<br />
There are a number of front-ends available for controlling the PulseAudio daemon:<br />
<br />
* Configuration/volume control (graphical): {{Pkg|pavucontrol}}<br />
* General daemon configuration (graphical): {{Pkg|paprefs}}<br />
* Volume control via mapped keyboard keys: {{AUR|pulseaudio-ctl}}, {{AUR|pavolume-git}}<br />
* Console (CLI) mixers: {{Pkg|ponymix}} and {{Pkg|pamixer}}<br />
* Console (curses) mixer: {{AUR|pulsemixer}}<br />
* Web volume control: [https://github.com/Siot/PaWebControl PaWebControl]<br />
* System tray icon: {{AUR|pasystray}}, {{AUR|pasystray-git}}, {{AUR|pasystray-gtk2-standalone}}, and {{AUR|pasystray-gtk3-standalone}}<br />
: {{Tip|The non-standalone versions of {{ic|pasystray}} can install both GTK2 and GTK3 versions and requires choosing which during build. The standalone versions install a single version.}}<br />
* KF5 plasma applet: {{Pkg|kmix}} and {{Pkg|plasma-pa}}<br />
* Xfce4 plugin: {{Pkg|xfce4-pulseaudio-plugin}}, {{AUR|pa-applet-git}}<br />
* If you want to use Bluetooth headsets or other Bluetooth audio devices with PulseAudio, see the [[Bluetooth headset]] article.<br />
<br />
== Configuration ==<br />
<br />
=== Configuration files ===<br />
<br />
{{Merge|PulseAudio/Configuration|Configuration should stay in the main article, so the linked page should be merged here.|section=Abandoned draft}}<br />
<br />
By default, PulseAudio is configured to automatically detect all sound cards and manage them. It takes control of all detected ALSA devices and redirects all audio streams to itself, making the PulseAudio daemon the central configuration point. The daemon should work mostly out of the box, only requiring a few minor tweaks. <br />
<br />
PulseAudio will first look for configuration files in the home directory {{ic|~/.config/pulse}}, then system-wide {{ic|/etc/pulse}}.<br />
<br />
PulseAudio runs as a server daemon that can run either system-wide or on per-user basis using a client/server architecture. The daemon by itself does nothing without its '''modules''' except to provide an API and host dynamically loaded modules. The audio routing and processing tasks are all handled by various modules. You can find a detailed list of all available modules at [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/ Pulseaudio Loadable Modules]. To enable them you can just add a line {{ic|load-module <module-name-from-list>}} to {{ic|~/.config/pulse/default.pa}}.<br />
<br />
{{Tip|<br />
* It is strongly suggested not to edit system-wide configuration files, but rather edit user ones. Create the {{ic|~/.config/pulse}} directory, then copy the system configuration files into it and edit according to your need.<br />
* Make sure you keep user configuration in sync with changes to the packaged files in {{ic|/etc/pulse/}}. Otherwise, PulseAudio may refuse to start due to configuration errors.<br />
* There is usually no need to add your user to the {{ic|audio}} group, as PulseAudio uses [[udev]] and ''logind'' to give access dynamically to the currently "active" user. Exceptions would include running the machine headless so that there is no currently "active" user.}}<br />
<br />
==== daemon.conf ====<br />
<br />
Defines base settings like the default sample rates used by modules, resampling methods, realtime scheduling and various other settings related to the server process. These can not be changed at runtime without restarting the PulseAudio daemon. The defaults are sensible for most users.<br />
<br />
{{Note|PulseAudio does not perform tilde expansion on paths in this file. Use absolute paths for any files.}}<br />
<br />
{| class="wikitable"<br />
|+ Notable configuration options<br />
! Option || Description<br />
|+<br />
| system-instance || If set to {{ic|yes}}, run the daemon as a [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/ system-wide] instance. [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ Highly discouraged] as it can introduce security issues. Useful on [[Xorg multiseat|Multiseat]] systems, or headless systems that have no real local users. Defaults to {{ic|no}}.<br />
|+<br />
| avoid-resampling || With {{ic|1=avoid-resampling = yes}}, PulseAudio automatically configures the hardware to the sample rate which the application uses, if the hardware supports this sample rate (needs [https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/11.0/ PA 11] or higher)<br />
|+<br />
| resample-method || Which resampler to use when audio with incompatible sample rates needs to be passed between modules (e.g. playback of 96kHz audio on hardware which only supports 48kHz). The available resamplers can be listed with {{ic|$ pulseaudio --dump-resample-methods}}. Choose the best tradeoff between CPU usage and audio quality for the present use-case. {{Tip|In some cases PulseAudio will generate a high CPU load. This can happen when multiple streams are resampled (individually). If this is a common use-case in a workflow, it should be considered to create an additional sink at a matching sample rate which can then be fed into the main sink, resampling only once.}}<br />
|+<br />
| flat-volumes ||{{ic|flat-volumes}} scales the device-volume with the volume of the "loudest" application. For example, raising the VoIP call volume will raise the hardware volume and adjust the music-player volume so it stays where it was, without having to lower the volume of the music-player manually. Defaults to {{ic|yes}} upstream, but to {{ic|no}} within Arch. {{Note|The default behavior upstream can sometimes be confusing and some applications, unaware of this feature, can set their volume to 100% at startup, potentially blowing your speakers or your ears. This is why Arch defaults to the classic (ALSA) behavior by setting this to {{ic|no}}.}}<br />
|+<br />
| default-fragments || Audio samples are split into multiple fragments of {{ic|default-fragment-size-msec}} each. The larger the buffer is, the less likely audio will skip when the system is overloaded. On the downside this will increase the overall latency. Increase this value if you have issues.<br />
|}<br />
<br />
==== default.pa ====<br />
<br />
This file is a startup script and is used to configure modules. It is actually parsed and read after the daemon has finished initializing and additional commands can be sent at runtime using {{ic|$ pactl}} or {{ic|$ pacmd}}. The startup script can also be provided on the command line by starting PulseAudio in a terminal using {{ic|$ pulseaudio -nC}}. This will make the daemon load the CLI module and will accept the configuration directly from the command line, and output resulting information or error messages on the same terminal. This can be useful when debugging the daemon or just to test various modules before setting them permanently on disk. The manual page is quite self-explanatory, consult {{man|5|pulse-cli-syntax}} for the details of the syntax.<br />
<br />
{{tip|<br />
* Rather than being a complete copy, {{ic|~/.config/pulse/default.pa}} can start with the line {{ic|.include /etc/pulse/default.pa}} and then just override the defaults.<br />
* Run {{ic|<nowiki>$ pacmd list-sinks|egrep -i 'index:|name:'</nowiki>}} to list available sinks. The present default sink is marked with an asterisk.<br />
* Edit {{ic|~/.config/pulse/default.pa}} to insert/alter the set-default-sink command using the sink's name as the numbering cannot be guaranteed repeatable.<br />
}}<br />
<br />
==== client.conf ====<br />
This is the configuration file read by every PulseAudio client application. It is used to configure runtime options for individual clients. It can be used to set and configure the default sink and source statically as well as allowing (or disallowing) clients to automatically start the server if not currently running.<br />
<br />
=== Configuration command ===<br />
<br />
The main command to configure a server during runtime is {{ic|$ pacmd}}. Run {{ic|$ pacmd --help}} for a list options, or just run {{ic|$ pacmd}} to enter the shell interactive mode and {{ic|Ctrl+d}} to exit. All modifications will immediately be applied.<br />
<br />
Once your new settings have been tested and meet your needs, edit the {{ic|default.pa}} accordingly to make the change persistent. See [[PulseAudio/Examples]] for some basic settings.<br />
<br />
{{Tip|leave the {{ic|load-module module-default-device-restore}} line in the {{ic|default.pa}} file untouched. It will allow you to restart the server in its default state, thus dismissing any wrong setting.}}<br />
<br />
It is important to understand that the "sources" (processes, capture devices) and "sinks" (sound cards, servers, other processes) accessible and selectable through PulseAudio depend upon the current hardware "Profile" selected. These "Profiles" are those ALSA "pcms" listed by the command {{ic|aplay -L}}, and more specifically by the command {{ic|pacmd list-cards}}, which will include a line "index:", a list beginning "profiles:", and a line "active profile: <...>" in the output, among other things. "Profiles" correspond to different card input/output configurations, notably the number of available input/output channels.<br />
<br />
The "active profile" can be set with the command {{ic|pacmd set-card-profile INDEX PROFILE}}, with ''no'' comma separating INDEX and PROFILE, where INDEX is just the number on the line "index:" and a PROFILE name is everything shown from the beginning of any line under "profile:" to just ''before'' the colon and first space, as shown by the command {{ic|pacmd list-cards}}. For instance, {{ic|pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo}}.<br />
<br />
It may be easier to select a "Profile" with a graphical tool like {{ic|pavucontrol}}, under the "Configuration" tab, or KDE System Settings, "Multimedia/Audio and Video Settings", under the "Audio Hardware Setup" tab. Each audio "Card", which are those devices listed by the command {{ic|aplay -l}}, or again by the command {{ic|pacmd list-cards}}, will have its own selectable "Profile". When a "Profile" has been selected, the then available "sources" and "sinks" can be seen by using the commands {{ic|pacmd list-sources}} and {{ic|pacmd list-sinks}}. Note that the "index" of the available sources and sinks will change each time a card profile is changed.<br />
<br />
The selected "Profile" can be an issue for some applications, especially the Adobe Flash players, typically {{ic|/usr/lib/mozilla/plugins/libflashplayer.so}} and {{ic|/usr/lib/PepperFlash/libpepflashplayer.so}}. Often, these Flash players will only work when one of the Stereo profiles is selected, and otherwise, will play video with no sound, or will simply "crash". When all else fails, you might try selecting a different profile.<br />
<br />
Of course, when configuring some variation of Surround Sound in PulseAudio, the appropriate Surround profile will have to be selected, before Surround Sound will work, or in order to do things like remap the speaker channels.<br />
<br />
== Running ==<br />
<br />
PulseAudio on Arch has {{ic|pulseaudio.socket}} enabled by default for the [[systemd/User]] instance. This means that PulseAudio will automatically start when needed.<br />
<br />
{{Note|<br />
* To disable {{ic|pulseaudio.socket}}, make sure that {{ic|$XDG_CONFIG_HOME/systemd/user/}} exists and run {{ic|systemctl --user mask pulseaudio.socket}}.<br />
* Many [[desktop environments]] autostart programs based on [[Desktop entries#Autostart|desktop files]] in the {{ic|/etc/xdg/autostart/}} directory. In this case, PulseAudio will be launched automatically regardless of the socket activation status.<br />
}}<br />
<br />
For more information, see [http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Running/ PulseAudio: Running].<br />
<br />
== Back-end configuration ==<br />
<br />
=== ALSA ===<br />
<br />
If you have applications that do not support PulseAudio explicitly but rely on ALSA, these applications will try to access the sound card directly via ALSA and will therefore bypass PulseAudio. PulseAudio will thus not have access to the sound card any more. As a result, all applications relying on PulseAudio will not be working any more, leading to [[PulseAudio/Troubleshooting#The only device shown is "dummy output" or newly connected cards are not detected|this issue]]. To prevent this, you will need to install the {{Pkg|pulseaudio-alsa}} package. It contains the necessary {{ic|/etc/asound.conf}} for configuring ALSA to use PulseAudio. Also make sure that {{ic|~/.asoundrc}} does not exist, as it would override the {{ic|/etc/asound.conf}} file.<br />
<br />
Please also install {{Pkg|lib32-libpulse}} and {{Pkg|lib32-alsa-plugins}} if you run a x86_64 system and want to have sound for 32-bit [[multilib]] programs like [[Wine]] and [[Steam]].<br />
<br />
To prevent applications from using ALSA's OSS emulation and bypassing PulseAudio (thereby preventing other applications from playing sound), make sure the module {{ic|snd_pcm_oss}} is not being loaded at boot. If it is currently loaded ({{ic|<nowiki>lsmod | grep oss</nowiki>}}), disable it by executing:<br />
# rmmod snd_pcm_oss<br />
<br />
==== Expose PulseAudio sources, sinks and mixers to ALSA ====<br />
Although {{Pkg|pulseaudio-alsa}} contains the necessary configuration file to allow ALSA applications to use PulseAudio's default device, ALSA's {{ic|pulse}} plugin is more versatile than that:<br />
<br />
{{hc|~/.asoundrc (or /etc/asound.conf)|2=<br />
# Create an alsa input/output using specific PulseAudio sources/sinks<br />
pcm.pulse-example1 {<br />
type pulse<br />
device "my-combined-sink" # name of a source or sink<br />
fallback "pulse-example2" # if combined not available<br />
}<br />
<br />
pcm.pulse-example2 {<br />
type pulse<br />
device "other-sound-card" # name of a source or sink<br />
# example: device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# Create an alsa mixer using specific PulseAudio sources/sinks<br />
# these can be tested with "alsamixer -D pulse-example3"<br />
ctl.pulse-example3 {<br />
type pulse<br />
device "my-output" # name of source or sink to control<br />
<br />
# example: always control the laptop speakers:<br />
# device "alsa_output.pci-0000_00_1b.0.analog-stereo"<br />
fallback "pulse-example4" # supports fallback too<br />
}<br />
<br />
# Mixers also can control a specific source and sink, separately:<br />
ctl.pulse-example4 {<br />
type pulse<br />
sink "my-usb-headphones"<br />
source "my-internal-mic"<br />
<br />
# example: output to HDMI, record using internal<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
<br />
# These can override the default mixer (example: for pnmixer integration)<br />
ctl.!default {<br />
type pulse<br />
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"<br />
source "alsa_input.pci-0000_00_1b.0.analog-stereo"<br />
}<br />
}}<br />
<br />
The [http://git.alsa-project.org/?p=alsa-plugins.git;a=tree;f=pulse;hb=HEAD source code] can be read to know all available options.<br />
<br />
==== ALSA/dmix without grabbing hardware device ====<br />
<br />
{{Note|This section describes alternative configuration, which is generally '''not''' recommended.}}<br />
<br />
You may want to use ALSA directly in most of your applications while still being able to use applications which require PulseAudio at the same time. The following steps allow you to make PulseAudio use dmix instead of grabbing ALSA hardware device.<br />
<br />
* Remove package {{Pkg|pulseaudio-alsa}}, which provides compatibility layer between ALSA applications and PulseAudio. After this your ALSA apps will use ALSA directly without being hooked by Pulse.<br />
<br />
* Edit {{ic|/etc/pulse/default.pa}}.<br />
:Find and uncomment lines which load back-end drivers. Add '''device''' parameters as follows. Then find and comment lines which load autodetect modules.<br />
load-module module-alsa-sink '''device=dmix'''<br />
load-module module-alsa-source '''device=dsnoop'''<br />
# load-module module-udev-detect<br />
# load-module module-detect<br />
<br />
* ''Optional:'' If you use {{Pkg|kdemultimedia-kmix}} you may want to control ALSA volume instead of PulseAudio volume:<br />
$ echo export KMIX_PULSEAUDIO_DISABLE=1 > ~/.kde4/env/kmix_disable_pulse.sh<br />
$ chmod +x ~/.kde4/env/kmix_disable_pulse.sh<br />
<br />
* Now, reboot your computer and try running ALSA and PulseAudio applications at the same time. They both should produce sound simultaneously.<br />
:Use {{Pkg|pavucontrol}} to control PulseAudio volume if needed.<br />
<br />
=== OSS ===<br />
<br />
There are multiple ways of making OSS-only programs output to PulseAudio:<br />
<br />
==== ossp ====<br />
<br />
Install {{Pkg|ossp}} package and start {{ic|osspd.service}}.<br />
<br />
==== padsp wrapper ====<br />
<br />
Programs using OSS can work with PulseAudio by starting it with padsp (included with PulseAudio):<br />
<br />
$ padsp OSSprogram<br />
<br />
A few examples:<br />
<br />
$ padsp aumix<br />
$ padsp sox foo.wav -t ossdsp /dev/dsp<br />
<br />
You can also add a custom wrapper script like this: <br />
<br />
{{hc|/usr/local/bin/OSSProgram|<nowiki><br />
#!/bin/sh<br />
exec padsp /usr/bin/OSSprogram "$@"<br />
</nowiki>}}<br />
<br />
Make sure {{ic|/usr/local/bin}} comes before {{ic|/usr/bin}} in your '''PATH'''.<br />
<br />
=== GStreamer ===<br />
<br />
Install {{Pkg|gst-plugins-good}}, or {{AUR|gstreamer0.10-good-plugins}} if your intended program has a legacy [[GStreamer]] implementation.<br />
<br />
=== OpenAL ===<br />
<br />
OpenAL Soft should use PulseAudio by default, but can be explicitly configured to do so: {{hc|/etc/openal/alsoft.conf|2=drivers=pulse,alsa}}<br />
<br />
=== libao ===<br />
<br />
Edit the libao configuration file:<br />
{{hc|/etc/libao.conf|2=default_driver=pulse}}<br />
Be sure to remove the {{ic|1=dev=default}} option of the alsa driver or adjust it to specify a specific Pulse sink name or number. <br />
<br />
{{Note|You could possibly also keep the libao standard of outputting to the ''alsa'' driver and its default device if you install {{pkg|pulseaudio-alsa}} since the ALSA default device then '''is''' PulseAudio.}}<br />
<br />
== Equalizer ==<br />
<br />
{{Warning|The equalizer module is considered unstable and might be removed from PulseAudio. For more, see the [https://lists.freedesktop.org/archives/pulseaudio-discuss/2014-March/020174.html mailing list].}}<br />
<br />
PulseAudio has an integrated 10-band equalizer system. In order to use the equalizer do the following:<br />
<br />
Install {{Pkg|pulseaudio-equalizer}}:<br />
<br />
=== Load equalizer sink and dbus-protocol module ===<br />
<br />
$ pactl load-module module-equalizer-sink<br />
$ pactl load-module module-dbus-protocol<br />
<br />
=== GUI front-end ===<br />
<br />
run:<br />
<br />
$ qpaeq<br />
<br />
{{Note|If qpaeq has no effect, install {{pkg|pavucontrol}} and change "ALSA Playback on" to "FFT based equalizer on ..." while the media player is running.}}<br />
<br />
=== Load equalizer and dbus module on every boot ===<br />
<br />
Edit the {{ic|/etc/pulse/default.pa}} or {{ic|~/.config/pulse/default.pa}} file with your favorite editor and append the following lines:<br />
<br />
### Load the integrated PulseAudio equalizer and D-Bus module<br />
load-module module-equalizer-sink<br />
load-module module-dbus-protocol<br />
<br />
{{Note|The equalizer sink needs to be loaded after the master sink is already available.}}<br />
<br />
=== Alternative equalizers ===<br />
<br />
{{AUR|pulseaudio-equalizer-ladspa}} (based on {{Pkg|swh-plugins}}) can be used as an alternative to {{Pkg|pulseaudio-equalizer}}.<br />
<br />
{{AUR|pulseeffects}} applies peak limiting, compression, reverberation, auto volume and 15 bands equalization to Pulseaudio applications output.<br />
<br />
== Applications ==<br />
<br />
=== QEMU ===<br />
<br />
Refer to [[QEMU#Host]] for a detailed guide on how to configure pulseaudio within [[QEMU]].<br />
<br />
=== AlsaMixer.app ===<br />
<br />
Make {{AUR|alsamixer.app}} dockapp for the {{Pkg|windowmaker}} use pulseaudio, e.g.<br />
$ AlsaMixer.app --device pulse<br />
<br />
Here is a two examples where the first one is for ALSA and the other one is for pulseaudio. You can run multiple instances of it. Use the {{ic|-w}} option to choose which of the control buttons to bind to the mouse wheel.<br />
# AlsaMixer.app -3 Mic -1 Master -2 PCM --card 0 -w 1<br />
# AlsaMixer.app --device pulse -1 Capture -2 Master -w 2<br />
<br />
{{Note|It can use only those output sinks that set as default.}}<br />
<br />
=== XMMS2 ===<br />
<br />
Make it switch to pulseaudio output<br />
$ nyxmms2 server config output.plugin pulse<br />
and to alsa<br />
$ nyxmms2 server config output.plugin alsa<br />
To make xmms2 use a different output sink, e.g.<br />
$ nyxmms2 server config pulse.sink alsa_output.pci-0000_04_01.0.analog-stereo.monitor<br />
<br />
See also the official guide [https://xmms2.org/wiki/Using_the_application].<br />
<br />
=== KDE Plasma Workspaces and Qt4 ===<br />
<br />
PulseAudio will automatically be used by KDE/Qt4 applications. It is supported by default in the KDE sound mixer. For more information see the [https://www.freedesktop.org/wiki/Software/PulseAudio/Desktops/KDE/ KDE page in the PulseAudio wiki].<br />
<br />
One useful tidbit from that page is that {{ic|load-module module-device-manager}} should be loaded. This usually happens automatically at login through the script {{ic|/usr/bin/start-pulseaudio-x11}}; if you find that the module is not loaded automatically you can consider adding it manually to {{ic|/etc/pulse/default.pa}}. See [[#Switch on connect]] for possible conflicts with the {{ic|module-switch-on-connect}}.<br />
<br />
If the phonon-gstreamer backend is used for Phonon, GStreamer should also be configured as described in [[#GStreamer]].<br />
<br />
=== Audacious ===<br />
<br />
[[Audacious]] natively supports PulseAudio. In order to use it, set Audacious Preferences -> Audio -> Current output plugin to 'PulseAudio Output Plugin'.<br />
<br />
=== Music Player Daemon (MPD) ===<br />
<br />
[http://mpd.wikia.com/wiki/PulseAudio configure] [[MPD]] to use PulseAudio. See also [[MPD/Tips and Tricks#PulseAudio]].<br />
<br />
=== MPlayer ===<br />
<br />
[[MPlayer]] natively supports PulseAudio output with the {{ic|-ao pulse}} option. It can also be configured to default to PulseAudio output, in {{ic|~/.mplayer/config}} for per-user, or {{ic|/etc/mplayer/mplayer.conf}} for system-wide:<br />
{{hc|/etc/mplayer/mplayer.conf|2=ao=pulse}}<br />
<br />
=== guvcview ===<br />
<br />
{{Pkg|guvcview}} when using the PulseAudio input from a [[Webcam]] may have the audio input suspended resulting in no audio being recorded. You can check this by executing:<br />
<br />
$ pactl list sources<br />
<br />
If the audio source is "suspended" then modifying the following line in {{ic|/etc/pulse/default.pa}} and changing:<br />
<br />
load-module module-suspend-on-idle<br />
to<br />
#load-module module-suspend-on-idle<br />
<br />
And then either restarting PulseAudio or your computer will only idle the input source instead of suspending it. guvcview will then correctly record audio from the device.<br />
<br />
== Tips and tricks ==<br />
<br />
{{Merge|PulseAudio/Examples|Same topic.}}<br />
<br />
=== Keyboard volume control ===<br />
<br />
Map the following commands to your volume keys: {{ic|XF86AudioRaiseVolume}}, {{ic|XF86AudioLowerVolume}}, {{ic|XF86AudioMute}}. See [[Extra keyboard keys in Xorg]] for details.<br />
<br />
First find out which sink corresponds to the audio output you'd like to control.<br />
To list available sinks:<br />
pactl list sinks short<br />
<br />
Suppose sink 0 is to be used, to raise the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"<br />
<br />
To lower the volume:<br />
sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 -5%"<br />
<br />
To mute/unmute the volume:<br />
pactl set-sink-mute 0 toggle<br />
<br />
To mute/unmute the microphone:<br />
pactl set-source-mute 1 toggle<br />
<br />
{{Tip|To have keyboard shortcuts operate always on the default sink, specify {{ic|@DEFAULT_SINK@}} as the sink number, for example {{ic|pactl set-sink-mute @DEFAULT_SINK@ toggle}}.}}<br />
<br />
=== Play sound from a non-interactive shell (systemd service, cron) === <br />
<br />
Set {{ic|XDG_RUNTIME_DIR}} before the command (replace {{ic|''user_id''}} with the ID of the user running PulseAudio):<br />
<br />
XDG_RUNTIME_DIR=/run/user/''user_id'' paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
Or use {{ic|machinectl}}:<br />
<br />
# machinectl shell .host --uid=''user_id'' /usr/bin/paplay /usr/share/sounds/freedesktop/stereo/complete.oga<br />
<br />
=== X11 Bell Events ===<br />
<br />
To get pulseaudio to handle X11 bell events, run the following commands after the X11 session has been started:<br />
<br />
pactl upload-sample /usr/share/sounds/freedesktop/stereo/bell.oga x11-bell<br />
pactl load-module module-x11-bell sample=x11-bell display=$DISPLAY<br />
<br />
To adjust the volume of the X11 bell, run the following command:<br />
<br />
xset b 100<br />
<br />
100 is a percentage. This requires the {{Pkg|xorg-xset}} package. See [[Autostarting]] for a way to run these commands automatically when the X11 session is started.<br />
<br />
=== Switch on connect ===<br />
This is a module used to switch the output sound to the newly connected device. For example, if you plug in a USB headset, the output will be switched to that. If you unplug it, the output will be set back to the last device. This used to be quite buggy but got a lot of attention in PulseAudio 8.0 and should work quite well now.<br />
<br />
If you just want to test the module then you can load it at runtime by calling:<br />
$ pactl load-module module-switch-on-connect<br />
<br />
If you want to make the change persistent you will have to add it to your local pulseaudio settings or to /etc/pulse/default.pa (system wide effect). In either case, add this line:<br />
load-module module-switch-on-connect<br />
<br />
{{Accuracy|Editing {{ic|/usr/bin/start-pulseaudio-x11}} will not survive package upgrade. The offending module can be unloaded in the config before loading {{ic|module-switch-on-connect}}, see [[Talk:Bluetooth_headset#GDMs_pulseaudio_instance_captures_bluetooth_headset]].}}<br />
<br />
On KDE/Plasma5 you should furthermore disable module-device-manager. As soon as Plasma5 is started it loads (via start-pulseaudio-x11) the module module-device-manager for pulseaudio to manage the devices. But that module apparently conflicts with module-switch-on-connect. Therefore you should disable that module by editing /bin/start-pulseaudio-x11 and commenting the lines for KDE. Simply logout and login again and in order to renew your pulseaudio session. On connect switching should now work properly.<br />
<br />
===Script for switching analogic outputs===<br />
<br />
Some sound cards present the option of multiple analog outputs, being switchable through using Pulseaudio profiles. But switching manually can become a chore, so you can use the following commands to switch it:<br />
$ pactl set-sink-port 'number of the card' 'port'<br />
<br />
This will set the default output to whatever port you chose.<br />
Example:<br />
$ pactl set-sink-port 0 "analog-output;output-speaker" <br />
<br />
The values can be easily obtained using:<br />
$ pactl list<br />
<br />
Current output can be obtained through:<br />
$ pactl list sinks | grep "active profile"| cut -d ' ' -f 3-<br />
<br />
This process can be automated through a simple script. This script then can be given a shortcut by the user:<br />
<br />
{{hc|~/pa.sh (or anything the user wants)|<nowiki><br />
#!/bin/bash<br />
# This script uses kdialog notification to warn the user of the currently swapped to profile. User could adapt it to their needs or change it.<br />
<br />
CURRENT_PROFILE=$(pactl list sinks | grep "active profile"| cut -d ' ' -f 3-)<br />
<br />
if [ "$CURRENT_PROFILE" = "analog-output;output-speaker" ] ; then<br />
pactl set-sink-port 0 "analog-output;output-headphones-1"<br />
kdialog --title "Pulseaudio" --passivepopup "Headphone" 2 & <br />
else <br />
pactl set-sink-port 0 "analog-output;output-speaker" <br />
kdialog --title "Pulseaudio" --passivepopup "Speaker" 2 &<br />
fi<br />
</nowiki>}}<br />
<br />
This script is intended to swap between two profiles. First checking the current profile then swapping it. Users are required to change the field 'active profile' according to the language pactl reports. Users might need to change the number of the card and the output to fit their machine.<br />
<br />
== Troubleshooting ==<br />
<br />
See [[PulseAudio/Troubleshooting]].<br />
<br />
== See also ==<br />
<br />
* [http://www.alsa-project.org/main/index.php/Asoundrc .asoundrc on ALSA wiki]<br />
* [http://www.pulseaudio.org/ PulseAudio official site]<br />
* [http://www.freedesktop.org/wiki/Software/PulseAudio/FAQ/ PulseAudio FAQ]</div>Nodiscc