https://wiki.archlinux.org/api.php?action=feedcontributions&user=Scrumplex&feedformat=atomArchWiki - User contributions [en]2024-03-28T19:08:50ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=764602User:Scrumplex2023-01-20T19:04:34Z<p>Scrumplex: Update PGP</p>
<hr />
<div>===Arch Linux Involvement===<br />
* [https://wiki.archlinux.org/index.php/Special:Contributions/Scrumplex Wiki contributions]<br />
* [https://aur.archlinux.org/packages/?SeB=m&K=Scrumplex AUR packages]<br />
<br />
===Contact===<br />
* '''E-Mail:''' contact@scrumplex.net<br />
* '''IRC:''' irc://libera.chat:scrumplex<br />
* '''Matrix:''' [https://matrix.to/#/@scrumplex:duckhub.io @scrumplex:duckhub.io]<br />
* '''Website:''' [https://scrumplex.net scrumplex.net] <br />
<br />
===PGP Key===<br />
* '''Key ID:''' [https://scrumplex.rocks/cloud/scrumplex.asc E13DFD4B47127951]<br />
* '''Fingerprint:''' [https://scrumplex.rocks/cloud/scrumplex.asc E173 237A C782 296D 98F5 ADAC E13D FD4B 4712 7951]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Minecraft&diff=754216Minecraft2022-10-21T18:27:32Z<p>Scrumplex: Add Prism Launcher</p>
<hr />
<div>[[Category:Gaming]]<br />
[[de:Minecraft]]<br />
[[ja:Minecraft]]<br />
[[zh-hans:Minecraft]]<br />
[https://minecraft.net/en-us/ Minecraft] is a game about breaking and placing blocks. At first, people built structures to protect against nocturnal monsters, but as the game grew players worked together to create wonderful, imaginative things.<br />
<br />
There are two separate editions of this game, Minecraft Java Edition, and Bedrock Edition. Java Edition is the original version of the game, starting development back in 2009. This edition can be played on Mac, Windows and Linux. Bedrock Edition was originally Pocket Edition, but has since been ported to different platforms. It is currently supported on Windows 10, 11 and Mobile, Amazon FireOS and FireTV, Android and iOS, Xbox One, Playstation 4, Nintendo Switch and Samsung Gear VR devices. The Bedrock Edition client is not supported on Linux officially, but Bedrock server software is available.<br />
<br />
== Java Edition Client ==<br />
<br />
=== Installation ===<br />
<br />
The Minecraft client can be installed via the {{AUR|minecraft-launcher}} package. It provides the official game launcher, a script to launch it and a ''.desktop'' file. The package is officially recommended by Mojang on their website.<br />
<br />
=== Firewall configuration for Client/LAN worlds ===<br />
<br />
Most shared Minecraft worlds are hosted using dedicated Minecraft server. If this is how you want to host, see Server section below.<br />
<br />
A simpler way is to allow others to join your current Minecraft game. When playing, your Minecraft client also allows others to join the game in progress. Your client automatically broadcasts the info about your game on port 4445. It will also listen for TCP connections on which other players join. This TCP listening port is picked at random every time you start Minecraft. This works well if you do not have a firewall. But if your firewall blocks incoming TCP connections, then it is very tricky to allow this random port in. <br />
<br />
In conclusion, to allow your client to host a local LAN game, your [[firewall]] need to allow:<br />
* UDP port {{ic|4445}} to broadcast your game<br />
* random incoming TCP port<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_LAN_world] for more information.<br />
<br />
== Bedrock Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Bedrock Minecraft server can be installed via the {{aur|minecraft-bedrock-server}} package. It provides a [[systemd]] unit file. This package creates a separate {{ic|minecraft-bedrock}} account.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Using systemd you may [[start]] and [[enable]] the included {{ic|minecraft-bedrock-server.service}}. Alternatively run the following as the minecraft-bedrock user inside the {{ic|/opt/minecraft-bedrock-server}} directory:<br />
<br />
$ LD_LIBRARY_PATH=. ./bedrock_server<br />
<br />
==== Server Configuration ====<br />
<br />
The configuration file {{ic|server.properties}} contains the server settings and additional documentation. Most importantly, {{ic|server-port}} determines the {{ic|UDP}} port at which the server will listen for incoming connections. The default port is {{ic|19132}} for IPv4, and {{ic|19133}} for IPv6. UDP ports {{ic|43351}} for IPv4 and {{ic|51885}} for IPv6 are required for authentication.<br />
<br />
== Java Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Java Edition Minecraft server can be installed via the {{aur|minecraft-server}} package. It provides additional [[systemd]] unit files and includes a small control script.<br />
<br />
Also see [[#Alternative servers]] for an overview of alternative programs allowing to host Minecraft.<br />
<br />
=== Setup ===<br />
<br />
==== Introduction ====<br />
<br />
In the installation process the {{ic|minecraft}} user and group is introduced. Establishing a Minecraft-specific user is recommended for security reasons. By running Minecraft under an unprivileged user account, anyone who successfully exploits your Minecraft server will only get access to that user account, and not yours.<br />
However you may safely add your user to the {{ic|minecraft}} group and add group write permission to the directory {{ic|/srv/minecraft}} (default) to modify Minecraft server settings. Make sure that all files in the {{ic|/srv/minecraft}} directory are either owned by the {{ic|minecraft}} user, or that the user has by other means read and write permissions. The server will error out if it is unable to access certain files and might even have insufficient rights to write an according error message to the log.<br />
<br />
The package provides a systemd service and timer to take automatic backups. By default the backups are located in the {{ic|backup}} folder under the server root directory. Though to keep the disk footprint small only the 10 most recent backups are preserved (configurable via {{ic|KEEP_BACKUPS}}). The related systemd files are {{ic|minecraftd-backup.timer}}<br />
and {{ic|minecraftd-backup.service}}. They may easily be [[edit|adapted]] to your liking, e.g. to follow a custom backup interval.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Either way the server is encapsulated in a [[tmux]] session which is owned by the {{ic|minecraft}} user. Using systemd you may [[start/enable]] the included {{ic|minecraftd.service}}. Alternatively run<br />
<br />
# minecraftd start<br />
<br />
==== Accepting EULA ====<br />
In order to run the Minecraft server you must accept the [[Wikipedia:EULA|EULA]]. This only needs to happen once after installation. The [[Wikipedia:EULA|EULA]] file resides under {{ic|/srv/minecraft/eula.txt}} after being created by the package. You will need to edit this file to state that you have agreed to the contract in order to run the server. All you need to do is change:<br />
<br />
eula=false<br />
<br />
to the value true. Here is an example of accepted EULA in {{ic|/srv/minecraft/eula.txt}}:<br />
<br />
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).<br />
#Sat Sep 11 11:11:11 PDT 2011<br />
eula=true<br />
<br />
==== Firewall Configuration for Server Worlds ====<br />
<br />
There are three settings in the {{ic|server.properties}} which determine ports that your server will use.<br />
<br />
{{ic|server-port}} determines the {{ic|TCP}} port at which the server will listen for incoming connections. Default port is {{ic|25565}}.<br />
<br />
{{ic|query.port}} determines the {{ic|UDP}} port at which the server will share game info/advertising information. Default port is {{ic|25565}}. Note that since server and query ports are TCP and UDP, they can share the same port. To enable query, you also have to specify {{ic|1=enable-query=true}}.<br />
<br />
{{ic|rcon.port}} determines the {{ic|TCP}} port if you choose to allow remote access to admin console. Default port is {{ic|25575}}. To enable rcon, you also have to specify {{ic|1=enable-rcon=true}} and {{ic|1=rcon.password=...}}.<br />
<br />
You will need to allow incoming connections at least on the {{ic|server-port}}. It is advisable to allow query and its {{ic|query.port}}. On the other hand, enabling remote console access is a security risk, and you should be careful of allowing it.<br />
<br />
Above information is for the official Minecraft server. If you are using alternate server, please see its documentation for details about its configuration.<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server] and [https://minecraft.gamepedia.com/Server.properties] for more information.<br />
<br />
==== Server management script ====<br />
<br />
To easily control the server you may use the provided {{ic|minecraftd}} script. It is capable of doing basic commands like {{ic|start}}, {{ic|stop}}, {{ic|restart}} or attaching to the session with {{ic|console}}. Moreover it may be used to display status information with {{ic|status}}, backup the server world directory with {{ic|backup}}, restore world data from backups with {{ic|restore}} or run single commands in the server console with {{ic|command ''do-something''}}.<br />
<br />
{{Note|Regarding the server console (reachable via {{ic|minecraftd console}}), remember that you can exit any [[tmux]] session with {{ic|ctrl+b}} {{ic|d}}.}}<br />
<br />
==== Tweaking ====<br />
<br />
To tweak the default settings (e.g. the maximum RAM, number of threads etc.) edit the file {{ic|/etc/conf.d/minecraft}}.<br />
<br />
For example, more advanced users may wish to enable {{ic|IDLE_SERVER}} by setting it to {{ic|true}}. This will enable the management script to suspend the server if no player was online for at least {{ic|IDLE_IF_TIME}} (defaults to 20 minutes). When the server is suspended an {{ic|idle_server}} will listen on the Minecraft port using {{man|1|ncat}} (also called netcat or simply nc for short; see [[Network tools#Netcat]]) and will immediately start the server at the first incoming connection. Though this obviously delays joining for the first time after suspension, it significantly decreases the CPU and memory usage leading to more reasonable resource and power consumption levels.<br />
{{Note|If running for the first time with this option enabled, the {{ic|/srv/minecraft/eula.txt}} file will not get created. You need to disable it to initially start.}}<br />
<br />
=== Alternative servers ===<br />
<br />
==== Spigot (respectively Craftbukkit) ====<br />
<br />
[https://www.spigotmc.org/ Spigot] is the most widely-used '''modded''' Minecraft server in the world. It can be installed as {{AUR|spigot}} via the [[AUR]]. The spigot PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the spigot server provides its own systemd unit files, spigot script and corresponding script configuration file. The binary is called {{ic|spigot}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/spigot}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|spigot}} wherever you encounter it.<br />
<br />
It is somewhat affiliated with [https://bukkit.org/ Bukkit] and has grown in popularity since Bukkit's demise.<br />
<br />
==== Cuberite ====<br />
<br />
[https://cuberite.org/ Cuberite] is a highly efficient and extensively moddable Minecraft server, written in C++ and Lua. It achieves much better performances than the vanilla Minecraft server, but is not fully compatible with the latest Minecraft client (some game aspects might be missing or not working).<br />
<br />
The Cuberite Minecraft server can be installed as a {{AUR|cuberite}} package, which provides a simple web interface by default at port {{ic|8080}} with which most server operations can easily be done through the browser. The cuberite PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the cuberite server provides its own systemd unit files, cuberite script and corresponding script configuration file. The binary is called {{ic|cuberite}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/cuberite}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|cuberite}} wherever you encounter it.<br />
<br />
==== PaperMC ====<br />
<br />
[https://papermc.io PaperMC] is a Minecraft server, compatible with Spigot plugins which aims to offer better performance. It can be installed via {{AUR|papermc}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|papermc}} wherever you encounter it.<br />
<br />
==== Forge ====<br />
<br />
[https://minecraftforge.net Forge] is a widely used Minecraft modding API. The following server packages are available:<br />
* {{AUR|forge-server}} for the latest Minecraft version (1.16.5)<br />
* {{AUR|forge-server-1.15.2}} for Minecraft 1.15.2<br />
* {{AUR|forge-server-1.14.4}} for Minecraft 1.14.4<br />
* {{AUR|forge-server-1.12.2}} for Minecraft 1.12.2<br />
* {{AUR|forge-server-1.11.2}} for Minecraft 1.11.2<br />
* {{AUR|forge-server-1.10.2}} for Minecraft 1.10.2<br />
* {{AUR|forge-server-1.9.4}} for Minecraft 1.9.4<br />
* {{AUR|forge-server-1.8.9}} for Minecraft 1.8.9<br />
* {{AUR|forge-server-1.7.10}} for Minecraft 1.7.10<br />
* {{AUR|forge-server-1.6.4}} for Minecraft 1.6.4<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|forged}} ({{ic|forge-x.x.xd}} for legacy versions) wherever you encounter it.<br />
<br />
==== Fabric ====<br />
<br />
[https://fabricmc.net/ Fabric] is a lightweight, experimental modding toolchain for Minecraft. The server package can be installed via {{AUR|fabric-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|fabricd}} wherever you encounter it.<br />
<br />
==== Quilt ====<br />
<br />
[https://quiltmc.org/ Quilt] is an open-source, community-driven modding toolchain designed primarily for Minecraft. The server package can be installed via {{AUR|quilt-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|quiltd}} wherever you encounter it.<br />
<br />
=== Additional notes ===<br />
<br />
* There are several server wrappers available providing everything from automatic backup to managing dozens of servers in parallel, refer to [https://minecraftservers.gamepedia.com/Server_wrappers Server Wrappers] for more information. However the management script provided by the [[AUR]] packages should suffice most needs.<br />
* You might want to set up a [[systemd timer]] with e.g. [http://www.minecraftwiki.net/wiki/Programs_and_editors#Mappers mapper] to generate periodic maps of your world.<br />
* Be sure to take periodic backups e.g. using the provided management script (see [[#Introduction]]) or plain [[rsync]].<br />
<br />
== Minecraft mod launchers ==<br />
<br />
You can launch Minecraft from different so called ''launchers'' that often include an array of mod packs to enhance one's gameplay and add [https://minecraft.gamepedia.com/Mods mods].<br />
<br />
* {{App|ATLauncher|Minecraft ModPack launcher consisting of multiple different ModPacks made by the community.|https://atlauncher.com/|{{AUR|atlauncher}}}}<br />
* {{App|Badlion Client|PvP modpack for all modern versions of Minecraft.|https://client.badlion.net|{{AUR|badlion-client}}}}<br />
* {{App|GDLauncher|Open-source Minecraft launcher written in electron/react.|https://gdevs.io|{{AUR|gdlauncher}}}}<br />
* {{App|Feed The Beast|Originated as a custom challenge map in Minecraft that made heavy use of multiple tech mods and evolved into a mod package launcher.|https://www.feed-the-beast.com/|{{AUR|ftba}}, {{AUR|ftba-electron}}, {{AUR|feedthebeast-classic}}}}<br />
* {{App|Lunar Client|PvP modpack for all modern versions of Minecraft.|https://lunarclient.com|{{AUR|lunar-client}}}}<br />
* {{App|MultiMC|Sandbox environment manager for separable pack association.|https://multimc.org/|{{AUR|multimc-bin}}}}<br />
* {{App|PolyMC|Power user launcher with features like mod management, originally forked from MultiMC.|https://polymc.org/|{{AUR|polymc}}, {{AUR|polymc-qt5}}}}<br />
* {{App|Prism Launcher|Power user launcher with features like mod management, originally forked from MultiMC.|https://prismlauncher.org/|{{AUR|prismlauncher}}, {{AUR|prismlauncher-qt5}}}}<br />
* {{App|Technic Launcher|Modpack installer with a focus on mod discovery via popularity rankings.|https://www.technicpack.net/|{{AUR|minecraft-technic-launcher}}}}<br />
<br />
== Other programs and editors ==<br />
<br />
There are several [https://minecraft.gamepedia.com/Programs_and_editors programs and editors] which can make your Minecraft experience a little easier to navigate. The most common of these programs are map generators. Using one of these programs will allow you to load up a Minecraft world file and render it as a 2D image, providing you with a top-down map of the world.<br />
<br />
* {{App|AMIDST|Standing for Advanced Minecraft Interface and Data/Structure Tracking, it is a program that aids in the process of finding structures, biomes, and players in Minecraft worlds. It can draw the biomes of a world out and show where points of interest are likely to be by either giving it a seed, telling it to make a random seed, or having it read the seed from an existing world (in which case it can also show where players in that world are). The project has been forked in the past, of which the most notable one is "Amidst Exporter" ({{AUR|amidstexporter}}) which includes a patch for calculating Ocean Monument locations in 1.8+ worlds.|https://github.com/toolbox4minecraft/amidst|{{AUR|amidst}}}}<br />
<br />
* {{App|Mapcrafter|A high performance Minecraft map renderer written in C++ which renders worlds to maps with an 3D-isometric perspective. You can view these maps in any webbrowser hence they are easily deployed on one's server. Mapcrafter has a simple configuration file format to specify worlds to render, different rendermodes such as day/night/cave and can also render worlds from different rotations.|http://mapcrafter.org/{{Dead link|2022|09|22|status=SSL error}}|{{AUR|mapcrafter-git}}}}<br />
<br />
* {{App|Minutor|A minimalistic map generator for Minecraft. You are provided with a simple GTK based interface for viewing your world. Several rendering modes are available, as well as custom coloring modes and the ability to slice through z-levels.|http://seancode.com/minutor/|{{AUR|minutor-git}}}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Logs ===<br />
<br />
Screen logs are in {{ic|/tmp/spigot_spigot_command_dump.txt}} file. If ''systemctl'' fails to start the service, inspect the ''screen'' logs.<br />
<br />
[[Journal]] logs are under {{ic|spigot.service}}.<br />
<br />
=== Client or server does not start ===<br />
<br />
It might be a problem with the [[Java]] version. Different Minecraft version numbers have different JRE requirements.<br />
<br />
{| class="wikitable"<br />
! Minecraft Version !! Minimum Compatible JRE Version<br />
|-<br />
| < 1.17 || 8<br />
|-<br />
| 1.17 || 16<br />
|-<br />
| 1.18 || 17<br />
|}<br />
<br />
Note that the client/server work with newer versions of [[Java]], such as {{Pkg|jre-openjdk}}, but the Minecraft game launcher (and possibly mods) might only work with [[Java]] version 8.<br />
<br />
=== Broken fonts with MinecraftForge ===<br />
<br />
Force Unicode fonts from the language menu.<br />
<br />
Since you cannot read any of the menu options: in the main menu, choose the bottom-left most button is Options, second-from-the-bottom on the left side is the Language Button. From there, the Force Unicode Font button is on the bottom, on the left side.<br />
<br />
=== MultiMC unable to build ===<br />
<br />
If you are trying to install {{AUR|multimc5}} and get an error similar to:<br />
{{bc|<br />
No CMAKE_Java_COMPILER could be found.<br />
Tell CMake where to find the compiler by setting either the environment<br />
variable "JAVA_COMPILER" or the CMake cache entry CMAKE_Java_COMPILER to<br />
the full path to the compiler, or to the compiler name if it is in the<br />
PATH.<br />
}}<br />
The error could be caused by Java missing, which can be fixed by installing {{Pkg|jdk8-openjdk}}.<br />
If the error is not fixed by that or Java was properly installed in the first place, the wrong version could still be the default environment:<br />
{{hc|$ archlinux-java status|<br />
Available Java environments:<br />
java-13-openjdk (default)<br />
java-8-openjdk<br />
}}<br />
<br />
You can set the default java version using {{ic|archlinux-java set <version>}}.<br />
<br />
=== Cannot change pulseaudio sink ===<br />
<br />
If you are unable to switch audio output device (indicated by {{ic|DONT_MOVE}} flag in the output of {{ic|pacmd list-sink-inputs}}) then the following openalsoft config may help<br />
<br />
{{hc|1=~/.alsoftrc|2=<br />
[pulse]<br />
allow-moves=yes<br />
}}<br />
<br />
=== Audio stutters on PipeWire ===<br />
<br />
OpenAL defaults to using JACK over PipeWire's PulseAudio backend. If that causes issues for you, you can tell OpenAL to use Pulse instead:<br />
<br />
{{hc|1=~/.alsoftrc|2=<br />
drivers=pulse<br />
}}<br />
<br />
Alternatively you can set the following environment variable {{ic|1=ALSOFT_DRIVERS=pulse}} if you do not want to set it for all applications.<br />
<br />
== See also ==<br />
<br />
* [https://www.minecraft.net/ Official Minecraft site]<br />
* [https://www.minecraft.net/community Minecraft community links]<br />
* [https://minecraft.gamepedia.com/ Minecraft Wiki]<br />
* [https://minecraft.net/download Minecraft Client and Server download link]<br />
* [http://www.minecraftwiki.net/wiki/Crafting Crafting Recipes]<br />
* [http://www.minecraftwiki.net/wiki/Data_values Block and item data values]<br />
* [https://www.reddit.com/r/minecraft Reddit Minecraft community]<br />
* [https://www.minecraftskins.net Minecraft Skins]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Minecraft&diff=745969Minecraft2022-09-12T09:12:27Z<p>Scrumplex: Add information about fixing audio stutters on PipeWire.</p>
<hr />
<div>[[Category:Gaming]]<br />
[[de:Minecraft]]<br />
[[ja:Minecraft]]<br />
[[zh-hans:Minecraft]]<br />
[https://minecraft.net/en-us/ Minecraft] is a game about breaking and placing blocks. At first, people built structures to protect against nocturnal monsters, but as the game grew players worked together to create wonderful, imaginative things.<br />
<br />
There are two separate editions of this game, Minecraft Java Edition, and Bedrock Edition. Java Edition is the original version of the game, starting development back in 2009. This edition can be played on Mac, Windows and Linux. Bedrock Edition was originally Pocket Edition, but has since been ported to different platforms. It is currently supported on Windows 10, 11 and Mobile, Amazon FireOS and FireTV, Android and iOS, Xbox One, Playstation 4, Nintendo Switch and Samsung Gear VR devices. The Bedrock Edition client is not supported on Linux officially, but Bedrock server software is available.<br />
<br />
== Java Edition Client ==<br />
<br />
=== Installation ===<br />
<br />
The Minecraft client can be installed via the {{AUR|minecraft-launcher}} package. It provides the official game launcher, a script to launch it and a ''.desktop'' file. The package is officially recommended by Mojang on their website.<br />
<br />
=== Firewall configuration for Client/LAN worlds ===<br />
<br />
Most shared Minecraft worlds are hosted using dedicated Minecraft server. If this is how you want to host, see Server section below.<br />
<br />
A simpler way is to allow others to join your current Minecraft game. When playing, your Minecraft client also allows others to join the game in progress. Your client automatically broadcasts the info about your game on port 4445. It will also listen for TCP connections on which other players join. This TCP listening port is picked at random every time you start Minecraft. This works well if you do not have a firewall. But if your firewall blocks incoming TCP connections, then it is very tricky to allow this random port in. <br />
<br />
In conclusion, to allow your client to host a local LAN game, your [[firewall]] need to allow:<br />
* UDP port {{ic|4445}} to broadcast your game<br />
* random incoming TCP port<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_LAN_world] for more information.<br />
<br />
== Bedrock Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Bedrock Minecraft server can be installed via the {{aur|minecraft-bedrock-server}} package. It provides a [[systemd]] unit file. This package creates a separate {{ic|minecraft-bedrock}} account.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Using systemd you may [[start]] and [[enable]] the included {{ic|minecraft-bedrock-server.service}}. Alternatively run the following as the minecraft-bedrock user inside the {{ic|/opt/minecraft-bedrock-server}} directory:<br />
<br />
$ LD_LIBRARY_PATH=. ./bedrock_server<br />
<br />
==== Server Configuration ====<br />
<br />
The configuration file {{ic|server.properties}} contains the server settings and additional documentation. Most importantly, {{ic|server-port}} determines the {{ic|UDP}} port at which the server will listen for incoming connections. The default port is {{ic|19132}} for IPv4, and {{ic|19133}} for IPv6. UDP ports {{ic|43351}} for IPv4 and {{ic|51885}} for IPv6 are required for authentication.<br />
<br />
== Java Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Java Edition Minecraft server can be installed via the {{aur|minecraft-server}} package. It provides additional [[systemd]] unit files and includes a small control script.<br />
<br />
Also see [[#Alternative servers]] for an overview of alternative programs allowing to host Minecraft.<br />
<br />
=== Setup ===<br />
<br />
==== Introduction ====<br />
<br />
In the installation process the {{ic|minecraft}} user and group is introduced. Establishing a Minecraft-specific user is recommended for security reasons. By running Minecraft under an unprivileged user account, anyone who successfully exploits your Minecraft server will only get access to that user account, and not yours.<br />
However you may safely add your user to the {{ic|minecraft}} group and add group write permission to the directory {{ic|/srv/minecraft}} (default) to modify Minecraft server settings. Make sure that all files in the {{ic|/srv/minecraft}} directory are either owned by the {{ic|minecraft}} user, or that the user has by other means read and write permissions. The server will error out if it is unable to access certain files and might even have insufficient rights to write an according error message to the log.<br />
<br />
The package provides a systemd service and timer to take automatic backups. By default the backups are located in the {{ic|backup}} folder under the server root directory. Though to keep the disk footprint small only the 10 most recent backups are preserved (configurable via {{ic|KEEP_BACKUPS}}). The related systemd files are {{ic|minecraftd-backup.timer}}<br />
and {{ic|minecraftd-backup.service}}. They may easily be [[edit|adapted]] to your liking, e.g. to follow a custom backup interval.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Either way the server is encapsulated in a [[tmux]] session which is owned by the {{ic|minecraft}} user. Using systemd you may [[start/enable]] the included {{ic|minecraftd.service}}. Alternatively run<br />
<br />
# minecraftd start<br />
<br />
==== Accepting EULA ====<br />
In order to run the Minecraft server you must accept the [[Wikipedia:EULA|EULA]]. This only needs to happen once after installation. The [[Wikipedia:EULA|EULA]] file resides under {{ic|/srv/minecraft/eula.txt}} after being created by the package. You will need to edit this file to state that you have agreed to the contract in order to run the server. All you need to do is change:<br />
<br />
eula=false<br />
<br />
to the value true. Here is an example of accepted EULA in {{ic|/srv/minecraft/eula.txt}}:<br />
<br />
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).<br />
#Sat Sep 11 11:11:11 PDT 2011<br />
eula=true<br />
<br />
==== Firewall Configuration for Server Worlds ====<br />
<br />
There are three settings in the {{ic|server.properties}} which determine ports that your server will use.<br />
<br />
{{ic|server-port}} determines the {{ic|TCP}} port at which the server will listen for incoming connections. Default port is {{ic|25565}}.<br />
<br />
{{ic|query.port}} determines the {{ic|UDP}} port at which the server will share game info/advertising information. Default port is {{ic|25565}}. Note that since server and query ports are TCP and UDP, they can share the same port. To enable query, you also have to specify {{ic|1=enable-query=true}}.<br />
<br />
{{ic|rcon.port}} determines the {{ic|TCP}} port if you choose to allow remote access to admin console. Default port is {{ic|25575}}. To enable rcon, you also have to specify {{ic|1=enable-rcon=true}} and {{ic|1=rcon.password=...}}.<br />
<br />
You will need to allow incoming connections at least on the {{ic|server-port}}. It is advisable to allow query and its {{ic|query.port}}. On the other hand, enabling remote console access is a security risk, and you should be careful of allowing it.<br />
<br />
Above information is for the official Minecraft server. If you are using alternate server, please see its documentation for details about its configuration.<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server] and [https://minecraft.gamepedia.com/Server.properties] for more information.<br />
<br />
==== Server management script ====<br />
<br />
To easily control the server you may use the provided {{ic|minecraftd}} script. It is capable of doing basic commands like {{ic|start}}, {{ic|stop}}, {{ic|restart}} or attaching to the session with {{ic|console}}. Moreover it may be used to display status information with {{ic|status}}, backup the server world directory with {{ic|backup}}, restore world data from backups with {{ic|restore}} or run single commands in the server console with {{ic|command ''do-something''}}.<br />
<br />
{{Note|Regarding the server console (reachable via {{ic|minecraftd console}}), remember that you can exit any [[tmux]] session with {{ic|ctrl+b}} {{ic|d}}.}}<br />
<br />
==== Tweaking ====<br />
<br />
To tweak the default settings (e.g. the maximum RAM, number of threads etc.) edit the file {{ic|/etc/conf.d/minecraft}}.<br />
<br />
For example, more advanced users may wish to enable {{ic|IDLE_SERVER}} by setting it to {{ic|true}}. This will enable the management script to suspend the server if no player was online for at least {{ic|IDLE_IF_TIME}} (defaults to 20 minutes). When the server is suspended an {{ic|idle_server}} will listen on the Minecraft port using {{man|1|ncat}} (also called netcat or simply nc for short; see [[Network tools#Netcat]]) and will immediately start the server at the first incoming connection. Though this obviously delays joining for the first time after suspension, it significantly decreases the CPU and memory usage leading to more reasonable resource and power consumption levels.<br />
{{Note|If running for the first time with this option enabled, the {{ic|/srv/minecraft/eula.txt}} file will not get created. You need to disable it to initially start.}}<br />
<br />
=== Alternative servers ===<br />
<br />
==== Spigot (respectively Craftbukkit) ====<br />
<br />
[https://www.spigotmc.org/ Spigot] is the most widely-used '''modded''' Minecraft server in the world. It can be installed as {{AUR|spigot}} via the [[AUR]]. The spigot PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the spigot server provides its own systemd unit files, spigot script and corresponding script configuration file. The binary is called {{ic|spigot}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/spigot}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|spigot}} wherever you encounter it.<br />
<br />
It is somewhat affiliated with [https://bukkit.org/ Bukkit] and has grown in popularity since Bukkit's demise.<br />
<br />
==== Cuberite ====<br />
<br />
[https://cuberite.org/ Cuberite] is a highly efficient and extensively moddable Minecraft server, written in C++ and Lua. It achieves much better performances than the vanilla Minecraft server, but is not fully compatible with the latest Minecraft client (some game aspects might be missing or not working).<br />
<br />
The Cuberite Minecraft server can be installed as a {{AUR|cuberite}} package, which provides a simple web interface by default at port {{ic|8080}} with which most server operations can easily be done through the browser. The cuberite PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the cuberite server provides its own systemd unit files, cuberite script and corresponding script configuration file. The binary is called {{ic|cuberite}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/cuberite}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|cuberite}} wherever you encounter it.<br />
<br />
==== PaperMC ====<br />
<br />
[https://papermc.io PaperMC] is a Minecraft server, compatible with Spigot plugins which aims to offer better performance. It can be installed via {{AUR|papermc}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|papermc}} wherever you encounter it.<br />
<br />
==== Forge ====<br />
<br />
[https://minecraftforge.net Forge] is a widely used Minecraft modding API. The following server packages are available:<br />
* {{AUR|forge-server}} for the latest Minecraft version (1.16.5)<br />
* {{AUR|forge-server-1.15.2}} for Minecraft 1.15.2<br />
* {{AUR|forge-server-1.14.4}} for Minecraft 1.14.4<br />
* {{AUR|forge-server-1.12.2}} for Minecraft 1.12.2<br />
* {{AUR|forge-server-1.11.2}} for Minecraft 1.11.2<br />
* {{AUR|forge-server-1.10.2}} for Minecraft 1.10.2<br />
* {{AUR|forge-server-1.9.4}} for Minecraft 1.9.4<br />
* {{AUR|forge-server-1.8.9}} for Minecraft 1.8.9<br />
* {{AUR|forge-server-1.7.10}} for Minecraft 1.7.10<br />
* {{AUR|forge-server-1.6.4}} for Minecraft 1.6.4<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|forged}} ({{ic|forge-x.x.xd}} for legacy versions) wherever you encounter it.<br />
<br />
==== Fabric ====<br />
<br />
[https://fabricmc.net/ Fabric] is a lightweight, experimental modding toolchain for Minecraft. The server package can be installed via {{AUR|fabric-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|fabricd}} wherever you encounter it.<br />
<br />
==== Quilt ====<br />
<br />
[https://quiltmc.org/ Quilt] is an open-source, community-driven modding toolchain designed primarily for Minecraft. The server package can be installed via {{AUR|quilt-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|quiltd}} wherever you encounter it.<br />
<br />
=== Additional notes ===<br />
<br />
* There are several server wrappers available providing everything from automatic backup to managing dozens of servers in parallel, refer to [https://minecraftservers.gamepedia.com/Server_wrappers Server Wrappers] for more information. However the management script provided by the [[AUR]] packages should suffice most needs.<br />
* You might want to set up a [[systemd timer]] with e.g. [http://www.minecraftwiki.net/wiki/Programs_and_editors#Mappers mapper] to generate periodic maps of your world.<br />
* Be sure to take periodic backups e.g. using the provided management script (see [[#Introduction]]) or plain [[rsync]].<br />
<br />
== Minecraft mod launchers ==<br />
<br />
You can launch Minecraft from different so called ''launchers'' that often include an array of mod packs to enhance one's gameplay and add [https://minecraft.gamepedia.com/Mods mods].<br />
<br />
* {{App|ATLauncher|Minecraft ModPack launcher consisting of multiple different ModPacks made by the community.|https://atlauncher.com/|{{AUR|atlauncher}}}}<br />
* {{App|Badlion Client|PvP modpack for all modern versions of Minecraft.|https://client.badlion.net|{{AUR|badlion-client}}}}<br />
* {{App|GDLauncher|Open-source Minecraft launcher written in electron/react.|https://gdevs.io|{{AUR|gdlauncher}}}}<br />
* {{App|Feed The Beast|Originated as a custom challenge map in Minecraft that made heavy use of multiple tech mods and evolved into a mod package launcher.|https://www.feed-the-beast.com/|{{AUR|ftba}}, {{AUR|ftba-electron}}, {{AUR|feedthebeast-classic}}}}<br />
* {{App|Lunar Client|PvP modpack for all modern versions of Minecraft.|https://lunarclient.com|{{AUR|lunar-client}}}}<br />
* {{App|MultiMC|Sandbox environment manager for separable pack association.|https://multimc.org/|{{AUR|multimc-bin}}}}<br />
* {{App|PolyMC|Power user launcher with features like mod management, originally forked from MultiMC.|https://polymc.org/|{{AUR|polymc}}, {{AUR|polymc-qt5}}}}<br />
* {{App|Technic Launcher|Modpack installer with a focus on mod discovery via popularity rankings.|https://www.technicpack.net/|{{AUR|minecraft-technic-launcher}}}}<br />
<br />
== Other programs and editors ==<br />
<br />
There are several [https://minecraft.gamepedia.com/Programs_and_editors programs and editors] which can make your Minecraft experience a little easier to navigate. The most common of these programs are map generators. Using one of these programs will allow you to load up a Minecraft world file and render it as a 2D image, providing you with a top-down map of the world.<br />
<br />
* {{App|AMIDST|Standing for Advanced Minecraft Interface and Data/Structure Tracking, it is a program that aids in the process of finding structures, biomes, and players in Minecraft worlds. It can draw the biomes of a world out and show where points of interest are likely to be by either giving it a seed, telling it to make a random seed, or having it read the seed from an existing world (in which case it can also show where players in that world are). The project has been forked in the past, of which the most notable one is "Amidst Exporter" ({{AUR|amidstexporter}}) which includes a patch for calculating Ocean Monument locations in 1.8+ worlds.|https://github.com/toolbox4minecraft/amidst|{{AUR|amidst}}}}<br />
<br />
* {{App|Mapcrafter|A high performance Minecraft map renderer written in C++ which renders worlds to maps with an 3D-isometric perspective. You can view these maps in any webbrowser hence they are easily deployed on one's server. Mapcrafter has a simple configuration file format to specify worlds to render, different rendermodes such as day/night/cave and can also render worlds from different rotations.|http://mapcrafter.org/|{{AUR|mapcrafter-git}}}}<br />
<br />
* {{App|Minutor|A minimalistic map generator for Minecraft. You are provided with a simple GTK based interface for viewing your world. Several rendering modes are available, as well as custom coloring modes and the ability to slice through z-levels.|http://seancode.com/minutor/|{{AUR|minutor-git}}}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Logs ===<br />
<br />
Screen logs are in {{ic|/tmp/spigot_spigot_command_dump.txt}} file. If ''systemctl'' fails to start the service, inspect the ''screen'' logs.<br />
<br />
[[Journal]] logs are under {{ic|spigot.service}}.<br />
<br />
=== Client or server does not start ===<br />
<br />
It might be the problem with [[Java]] version. Java version 8 is guaranteed to work well in all cases.<br />
<br />
Both Minecraft server and the actual game work perfectly fine with the latest version of [[Java]], such as {{Pkg|jre-openjdk}}, but the Minecraft game launcher (and possibly all other mods) might only work with the [[Java]] version 8.<br />
<br />
=== Broken fonts with MinecraftForge ===<br />
<br />
Force Unicode fonts from the language menu.<br />
<br />
Since you cannot read any of the menu options: in the main menu, choose the bottom-left most button is Options, second-from-the-bottom on the left side is the Language Button. From there, the Force Unicode Font button is on the bottom, on the left side.<br />
<br />
=== MultiMC unable to build ===<br />
<br />
If you are trying to install {{AUR|multimc5}} and get an error similar to:<br />
{{bc|<br />
No CMAKE_Java_COMPILER could be found.<br />
Tell CMake where to find the compiler by setting either the environment<br />
variable "JAVA_COMPILER" or the CMake cache entry CMAKE_Java_COMPILER to<br />
the full path to the compiler, or to the compiler name if it is in the<br />
PATH.<br />
}}<br />
The error could be caused by Java missing, which can be fixed by installing {{Pkg|jdk8-openjdk}}.<br />
If the error is not fixed by that or Java was properly installed in the first place, the wrong version could still be the default environment:<br />
{{hc|$ archlinux-java status|<br />
Available Java environments:<br />
java-13-openjdk (default)<br />
java-8-openjdk<br />
}}<br />
<br />
You can set the default java version using {{ic|archlinux-java set <version>}}.<br />
<br />
=== Cannot change pulseaudio sink ===<br />
<br />
If you are unable to switch audio output device (indicated by {{ic|DONT_MOVE}} flag in the output of {{ic|pacmd list-sink-inputs}}) then the following openalsoft config may help<br />
<br />
{{hc|1=~/.alsoftrc|2=<br />
[pulse]<br />
allow-moves=yes<br />
}}<br />
<br />
=== Audio stutters on PipeWire ===<br />
<br />
OpenAL defaults to using JACK over PipeWire's PulseAudio backend. If that causes issues for you, you can tell OpenAL to use Pulse instead:<br />
<br />
{{hc|1=~/.alsoftrc|2=<br />
drivers=pulse<br />
}}<br />
<br />
Alternatively you can set the following environment variable {{ic|1=ALSOFT_DRIVERS=pulse}} if you don't want to set it for all applications.<br />
<br />
== See also ==<br />
<br />
* [https://www.minecraft.net/ Official Minecraft site]<br />
* [https://www.minecraft.net/community Minecraft community links]<br />
* [https://minecraft.gamepedia.com/ Minecraft Wiki]<br />
* [https://minecraft.net/download Minecraft Client and Server download link]<br />
* [http://www.minecraftwiki.net/wiki/Crafting Crafting Recipes]<br />
* [http://www.minecraftwiki.net/wiki/Data_values Block and item data values]<br />
* [https://www.reddit.com/r/minecraft Reddit Minecraft community]<br />
* [https://www.minecraftskins.net Minecraft Skins]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Minecraft&diff=745968Minecraft2022-09-12T09:04:56Z<p>Scrumplex: Update description of PolyMC</p>
<hr />
<div>[[Category:Gaming]]<br />
[[de:Minecraft]]<br />
[[ja:Minecraft]]<br />
[[zh-hans:Minecraft]]<br />
[https://minecraft.net/en-us/ Minecraft] is a game about breaking and placing blocks. At first, people built structures to protect against nocturnal monsters, but as the game grew players worked together to create wonderful, imaginative things.<br />
<br />
There are two separate editions of this game, Minecraft Java Edition, and Bedrock Edition. Java Edition is the original version of the game, starting development back in 2009. This edition can be played on Mac, Windows and Linux. Bedrock Edition was originally Pocket Edition, but has since been ported to different platforms. It is currently supported on Windows 10, 11 and Mobile, Amazon FireOS and FireTV, Android and iOS, Xbox One, Playstation 4, Nintendo Switch and Samsung Gear VR devices. The Bedrock Edition client is not supported on Linux officially, but Bedrock server software is available.<br />
<br />
== Java Edition Client ==<br />
<br />
=== Installation ===<br />
<br />
The Minecraft client can be installed via the {{AUR|minecraft-launcher}} package. It provides the official game launcher, a script to launch it and a ''.desktop'' file. The package is officially recommended by Mojang on their website.<br />
<br />
=== Firewall configuration for Client/LAN worlds ===<br />
<br />
Most shared Minecraft worlds are hosted using dedicated Minecraft server. If this is how you want to host, see Server section below.<br />
<br />
A simpler way is to allow others to join your current Minecraft game. When playing, your Minecraft client also allows others to join the game in progress. Your client automatically broadcasts the info about your game on port 4445. It will also listen for TCP connections on which other players join. This TCP listening port is picked at random every time you start Minecraft. This works well if you do not have a firewall. But if your firewall blocks incoming TCP connections, then it is very tricky to allow this random port in. <br />
<br />
In conclusion, to allow your client to host a local LAN game, your [[firewall]] need to allow:<br />
* UDP port {{ic|4445}} to broadcast your game<br />
* random incoming TCP port<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_LAN_world] for more information.<br />
<br />
== Bedrock Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Bedrock Minecraft server can be installed via the {{aur|minecraft-bedrock-server}} package. It provides a [[systemd]] unit file. This package creates a separate {{ic|minecraft-bedrock}} account.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Using systemd you may [[start]] and [[enable]] the included {{ic|minecraft-bedrock-server.service}}. Alternatively run the following as the minecraft-bedrock user inside the {{ic|/opt/minecraft-bedrock-server}} directory:<br />
<br />
$ LD_LIBRARY_PATH=. ./bedrock_server<br />
<br />
==== Server Configuration ====<br />
<br />
The configuration file {{ic|server.properties}} contains the server settings and additional documentation. Most importantly, {{ic|server-port}} determines the {{ic|UDP}} port at which the server will listen for incoming connections. The default port is {{ic|19132}} for IPv4, and {{ic|19133}} for IPv6. UDP ports {{ic|43351}} for IPv4 and {{ic|51885}} for IPv6 are required for authentication.<br />
<br />
== Java Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Java Edition Minecraft server can be installed via the {{aur|minecraft-server}} package. It provides additional [[systemd]] unit files and includes a small control script.<br />
<br />
Also see [[#Alternative servers]] for an overview of alternative programs allowing to host Minecraft.<br />
<br />
=== Setup ===<br />
<br />
==== Introduction ====<br />
<br />
In the installation process the {{ic|minecraft}} user and group is introduced. Establishing a Minecraft-specific user is recommended for security reasons. By running Minecraft under an unprivileged user account, anyone who successfully exploits your Minecraft server will only get access to that user account, and not yours.<br />
However you may safely add your user to the {{ic|minecraft}} group and add group write permission to the directory {{ic|/srv/minecraft}} (default) to modify Minecraft server settings. Make sure that all files in the {{ic|/srv/minecraft}} directory are either owned by the {{ic|minecraft}} user, or that the user has by other means read and write permissions. The server will error out if it is unable to access certain files and might even have insufficient rights to write an according error message to the log.<br />
<br />
The package provides a systemd service and timer to take automatic backups. By default the backups are located in the {{ic|backup}} folder under the server root directory. Though to keep the disk footprint small only the 10 most recent backups are preserved (configurable via {{ic|KEEP_BACKUPS}}). The related systemd files are {{ic|minecraftd-backup.timer}}<br />
and {{ic|minecraftd-backup.service}}. They may easily be [[edit|adapted]] to your liking, e.g. to follow a custom backup interval.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Either way the server is encapsulated in a [[tmux]] session which is owned by the {{ic|minecraft}} user. Using systemd you may [[start/enable]] the included {{ic|minecraftd.service}}. Alternatively run<br />
<br />
# minecraftd start<br />
<br />
==== Accepting EULA ====<br />
In order to run the Minecraft server you must accept the [[Wikipedia:EULA|EULA]]. This only needs to happen once after installation. The [[Wikipedia:EULA|EULA]] file resides under {{ic|/srv/minecraft/eula.txt}} after being created by the package. You will need to edit this file to state that you have agreed to the contract in order to run the server. All you need to do is change:<br />
<br />
eula=false<br />
<br />
to the value true. Here is an example of accepted EULA in {{ic|/srv/minecraft/eula.txt}}:<br />
<br />
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).<br />
#Sat Sep 11 11:11:11 PDT 2011<br />
eula=true<br />
<br />
==== Firewall Configuration for Server Worlds ====<br />
<br />
There are three settings in the {{ic|server.properties}} which determine ports that your server will use.<br />
<br />
{{ic|server-port}} determines the {{ic|TCP}} port at which the server will listen for incoming connections. Default port is {{ic|25565}}.<br />
<br />
{{ic|query.port}} determines the {{ic|UDP}} port at which the server will share game info/advertising information. Default port is {{ic|25565}}. Note that since server and query ports are TCP and UDP, they can share the same port. To enable query, you also have to specify {{ic|1=enable-query=true}}.<br />
<br />
{{ic|rcon.port}} determines the {{ic|TCP}} port if you choose to allow remote access to admin console. Default port is {{ic|25575}}. To enable rcon, you also have to specify {{ic|1=enable-rcon=true}} and {{ic|1=rcon.password=...}}.<br />
<br />
You will need to allow incoming connections at least on the {{ic|server-port}}. It is advisable to allow query and its {{ic|query.port}}. On the other hand, enabling remote console access is a security risk, and you should be careful of allowing it.<br />
<br />
Above information is for the official Minecraft server. If you are using alternate server, please see its documentation for details about its configuration.<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server] and [https://minecraft.gamepedia.com/Server.properties] for more information.<br />
<br />
==== Server management script ====<br />
<br />
To easily control the server you may use the provided {{ic|minecraftd}} script. It is capable of doing basic commands like {{ic|start}}, {{ic|stop}}, {{ic|restart}} or attaching to the session with {{ic|console}}. Moreover it may be used to display status information with {{ic|status}}, backup the server world directory with {{ic|backup}}, restore world data from backups with {{ic|restore}} or run single commands in the server console with {{ic|command ''do-something''}}.<br />
<br />
{{Note|Regarding the server console (reachable via {{ic|minecraftd console}}), remember that you can exit any [[tmux]] session with {{ic|ctrl+b}} {{ic|d}}.}}<br />
<br />
==== Tweaking ====<br />
<br />
To tweak the default settings (e.g. the maximum RAM, number of threads etc.) edit the file {{ic|/etc/conf.d/minecraft}}.<br />
<br />
For example, more advanced users may wish to enable {{ic|IDLE_SERVER}} by setting it to {{ic|true}}. This will enable the management script to suspend the server if no player was online for at least {{ic|IDLE_IF_TIME}} (defaults to 20 minutes). When the server is suspended an {{ic|idle_server}} will listen on the Minecraft port using {{man|1|ncat}} (also called netcat or simply nc for short; see [[Network tools#Netcat]]) and will immediately start the server at the first incoming connection. Though this obviously delays joining for the first time after suspension, it significantly decreases the CPU and memory usage leading to more reasonable resource and power consumption levels.<br />
{{Note|If running for the first time with this option enabled, the {{ic|/srv/minecraft/eula.txt}} file will not get created. You need to disable it to initially start.}}<br />
<br />
=== Alternative servers ===<br />
<br />
==== Spigot (respectively Craftbukkit) ====<br />
<br />
[https://www.spigotmc.org/ Spigot] is the most widely-used '''modded''' Minecraft server in the world. It can be installed as {{AUR|spigot}} via the [[AUR]]. The spigot PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the spigot server provides its own systemd unit files, spigot script and corresponding script configuration file. The binary is called {{ic|spigot}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/spigot}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|spigot}} wherever you encounter it.<br />
<br />
It is somewhat affiliated with [https://bukkit.org/ Bukkit] and has grown in popularity since Bukkit's demise.<br />
<br />
==== Cuberite ====<br />
<br />
[https://cuberite.org/ Cuberite] is a highly efficient and extensively moddable Minecraft server, written in C++ and Lua. It achieves much better performances than the vanilla Minecraft server, but is not fully compatible with the latest Minecraft client (some game aspects might be missing or not working).<br />
<br />
The Cuberite Minecraft server can be installed as a {{AUR|cuberite}} package, which provides a simple web interface by default at port {{ic|8080}} with which most server operations can easily be done through the browser. The cuberite PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the cuberite server provides its own systemd unit files, cuberite script and corresponding script configuration file. The binary is called {{ic|cuberite}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/cuberite}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|cuberite}} wherever you encounter it.<br />
<br />
==== PaperMC ====<br />
<br />
[https://papermc.io PaperMC] is a Minecraft server, compatible with Spigot plugins which aims to offer better performance. It can be installed via {{AUR|papermc}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|papermc}} wherever you encounter it.<br />
<br />
==== Forge ====<br />
<br />
[https://minecraftforge.net Forge] is a widely used Minecraft modding API. The following server packages are available:<br />
* {{AUR|forge-server}} for the latest Minecraft version (1.16.5)<br />
* {{AUR|forge-server-1.15.2}} for Minecraft 1.15.2<br />
* {{AUR|forge-server-1.14.4}} for Minecraft 1.14.4<br />
* {{AUR|forge-server-1.12.2}} for Minecraft 1.12.2<br />
* {{AUR|forge-server-1.11.2}} for Minecraft 1.11.2<br />
* {{AUR|forge-server-1.10.2}} for Minecraft 1.10.2<br />
* {{AUR|forge-server-1.9.4}} for Minecraft 1.9.4<br />
* {{AUR|forge-server-1.8.9}} for Minecraft 1.8.9<br />
* {{AUR|forge-server-1.7.10}} for Minecraft 1.7.10<br />
* {{AUR|forge-server-1.6.4}} for Minecraft 1.6.4<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|forged}} ({{ic|forge-x.x.xd}} for legacy versions) wherever you encounter it.<br />
<br />
==== Fabric ====<br />
<br />
[https://fabricmc.net/ Fabric] is a lightweight, experimental modding toolchain for Minecraft. The server package can be installed via {{AUR|fabric-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|fabricd}} wherever you encounter it.<br />
<br />
==== Quilt ====<br />
<br />
[https://quiltmc.org/ Quilt] is an open-source, community-driven modding toolchain designed primarily for Minecraft. The server package can be installed via {{AUR|quilt-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|quiltd}} wherever you encounter it.<br />
<br />
=== Additional notes ===<br />
<br />
* There are several server wrappers available providing everything from automatic backup to managing dozens of servers in parallel, refer to [https://minecraftservers.gamepedia.com/Server_wrappers Server Wrappers] for more information. However the management script provided by the [[AUR]] packages should suffice most needs.<br />
* You might want to set up a [[systemd timer]] with e.g. [http://www.minecraftwiki.net/wiki/Programs_and_editors#Mappers mapper] to generate periodic maps of your world.<br />
* Be sure to take periodic backups e.g. using the provided management script (see [[#Introduction]]) or plain [[rsync]].<br />
<br />
== Minecraft mod launchers ==<br />
<br />
You can launch Minecraft from different so called ''launchers'' that often include an array of mod packs to enhance one's gameplay and add [https://minecraft.gamepedia.com/Mods mods].<br />
<br />
* {{App|ATLauncher|Minecraft ModPack launcher consisting of multiple different ModPacks made by the community.|https://atlauncher.com/|{{AUR|atlauncher}}}}<br />
* {{App|Badlion Client|PvP modpack for all modern versions of Minecraft.|https://client.badlion.net|{{AUR|badlion-client}}}}<br />
* {{App|GDLauncher|Open-source Minecraft launcher written in electron/react.|https://gdevs.io|{{AUR|gdlauncher}}}}<br />
* {{App|Feed The Beast|Originated as a custom challenge map in Minecraft that made heavy use of multiple tech mods and evolved into a mod package launcher.|https://www.feed-the-beast.com/|{{AUR|ftba}}, {{AUR|ftba-electron}}, {{AUR|feedthebeast-classic}}}}<br />
* {{App|Lunar Client|PvP modpack for all modern versions of Minecraft.|https://lunarclient.com|{{AUR|lunar-client}}}}<br />
* {{App|MultiMC|Sandbox environment manager for separable pack association.|https://multimc.org/|{{AUR|multimc-bin}}}}<br />
* {{App|PolyMC|Power user launcher with features like mod management, originally forked from MultiMC.|https://polymc.org/|{{AUR|polymc}}, {{AUR|polymc-qt5}}}}<br />
* {{App|Technic Launcher|Modpack installer with a focus on mod discovery via popularity rankings.|https://www.technicpack.net/|{{AUR|minecraft-technic-launcher}}}}<br />
<br />
== Other programs and editors ==<br />
<br />
There are several [https://minecraft.gamepedia.com/Programs_and_editors programs and editors] which can make your Minecraft experience a little easier to navigate. The most common of these programs are map generators. Using one of these programs will allow you to load up a Minecraft world file and render it as a 2D image, providing you with a top-down map of the world.<br />
<br />
* {{App|AMIDST|Standing for Advanced Minecraft Interface and Data/Structure Tracking, it is a program that aids in the process of finding structures, biomes, and players in Minecraft worlds. It can draw the biomes of a world out and show where points of interest are likely to be by either giving it a seed, telling it to make a random seed, or having it read the seed from an existing world (in which case it can also show where players in that world are). The project has been forked in the past, of which the most notable one is "Amidst Exporter" ({{AUR|amidstexporter}}) which includes a patch for calculating Ocean Monument locations in 1.8+ worlds.|https://github.com/toolbox4minecraft/amidst|{{AUR|amidst}}}}<br />
<br />
* {{App|Mapcrafter|A high performance Minecraft map renderer written in C++ which renders worlds to maps with an 3D-isometric perspective. You can view these maps in any webbrowser hence they are easily deployed on one's server. Mapcrafter has a simple configuration file format to specify worlds to render, different rendermodes such as day/night/cave and can also render worlds from different rotations.|http://mapcrafter.org/|{{AUR|mapcrafter-git}}}}<br />
<br />
* {{App|Minutor|A minimalistic map generator for Minecraft. You are provided with a simple GTK based interface for viewing your world. Several rendering modes are available, as well as custom coloring modes and the ability to slice through z-levels.|http://seancode.com/minutor/|{{AUR|minutor-git}}}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Logs ===<br />
<br />
Screen logs are in {{ic|/tmp/spigot_spigot_command_dump.txt}} file. If ''systemctl'' fails to start the service, inspect the ''screen'' logs.<br />
<br />
[[Journal]] logs are under {{ic|spigot.service}}.<br />
<br />
=== Client or server does not start ===<br />
<br />
It might be the problem with [[Java]] version. Java version 8 is guaranteed to work well in all cases.<br />
<br />
Both Minecraft server and the actual game work perfectly fine with the latest version of [[Java]], such as {{Pkg|jre-openjdk}}, but the Minecraft game launcher (and possibly all other mods) might only work with the [[Java]] version 8.<br />
<br />
=== Broken fonts with MinecraftForge ===<br />
<br />
Force Unicode fonts from the language menu.<br />
<br />
Since you cannot read any of the menu options: in the main menu, choose the bottom-left most button is Options, second-from-the-bottom on the left side is the Language Button. From there, the Force Unicode Font button is on the bottom, on the left side.<br />
<br />
=== MultiMC unable to build ===<br />
<br />
If you are trying to install {{AUR|multimc5}} and get an error similar to:<br />
{{bc|<br />
No CMAKE_Java_COMPILER could be found.<br />
Tell CMake where to find the compiler by setting either the environment<br />
variable "JAVA_COMPILER" or the CMake cache entry CMAKE_Java_COMPILER to<br />
the full path to the compiler, or to the compiler name if it is in the<br />
PATH.<br />
}}<br />
The error could be caused by Java missing, which can be fixed by installing {{Pkg|jdk8-openjdk}}.<br />
If the error is not fixed by that or Java was properly installed in the first place, the wrong version could still be the default environment:<br />
{{hc|$ archlinux-java status|<br />
Available Java environments:<br />
java-13-openjdk (default)<br />
java-8-openjdk<br />
}}<br />
<br />
You can set the default java version using {{ic|archlinux-java set <version>}}.<br />
<br />
=== Cannot change pulseaudio sink ===<br />
<br />
If you are unable to switch audio output device (indicated by {{ic|DONT_MOVE}} flag in the output of {{ic|pacmd list-sink-inputs}}) then the following openalsoft config may help<br />
<br />
{{hc|1=~/.alsoftrc|2=<br />
[pulse]<br />
allow-moves=yes<br />
}}<br />
<br />
== See also ==<br />
<br />
* [https://www.minecraft.net/ Official Minecraft site]<br />
* [https://www.minecraft.net/community Minecraft community links]<br />
* [https://minecraft.gamepedia.com/ Minecraft Wiki]<br />
* [https://minecraft.net/download Minecraft Client and Server download link]<br />
* [http://www.minecraftwiki.net/wiki/Crafting Crafting Recipes]<br />
* [http://www.minecraftwiki.net/wiki/Data_values Block and item data values]<br />
* [https://www.reddit.com/r/minecraft Reddit Minecraft community]<br />
* [https://www.minecraftskins.net Minecraft Skins]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Arch_is_the_best&diff=728887Arch is the best2022-05-08T14:39:41Z<p>Scrumplex: Add Hare implementation</p>
<hr />
<div>[[Category:About Arch]]<br />
[[ja:Arch は最高]]<br />
[[ru:Arch is the best]]<br />
[[zh-hans:Arch is the best]]<br />
The '''Arch is the best''' project is a very sophisticated and exquisite, ego-boosting and mind-blowing (albeit perhaps a bit over-engineered) project which gives proof of Arch's superiority.<br />
<br />
== History ==<br />
<br />
The visionary project was originally devised in April 2008 by long time Arch community member [https://bbs.archlinux.org/profile.php?id=2529 lucke] as a simple shell script which provided irrefutable proof that "Arch is the best". It was announced to the world with a [https://bbs.archlinux.org/viewtopic.php?id=47306 forum post], thus illuminating other people's minds, who immediately started porting it to multiple different languages, both programming and verbal, so that every human being on the planet could fully appreciate and benefit from this revolutionary discovery.<br />
<br />
== The code ==<br />
<br />
The "Arch is the best" project is ported to many programming languages.<br />
<br />
;1C&#58;Enterprise:A procedural domain-specific compiled dynamically-typed programming language mostly similar to VisualBasic which is used in "1C:Enterprise" products widespread in Russia and other CIS countries.<br />
<br />
Предупреждение("Arch is the best!");<br />
<br />
;ABAP: Advanced Business Application Programming language.<br />
<br />
REPORT zwhat_is_the_best.<br />
WRITE 'Arch is the best'.<br />
<br />
;Ada: A systems critical programming language.<br />
<br />
with Ada.Text_IO;<br />
use Ada.Text_IO;<br />
procedure ArchIsTheBest is<br />
begin<br />
Put_Line("Arch is the best!");<br />
end ArchIsTheBest;<br />
<br />
;APL: A Programming Language.<br />
<br />
'Arch is the best!'<br />
<br />
;AppleScript: A scripting language created by Apple Inc. and built into the Classic Mac OS since System 7 and into all versions of macOS.<br />
<br />
display alert "Arch is the best!"<br />
say "Indeed, Arch is the best."<br />
<br />
;ArnoldC: Programming language based on the one-liners of Arnold Schwarzenegger.<br />
<br />
IT'S SHOWTIME<br />
TALK TO THE HAND "Arch is the best!"<br />
YOU HAVE BEEN TERMINATED<br />
<br />
;ATS: A functional programming language that uses dependent types to improve programs' reliability.<br />
<br />
implement main () = println! "Arch is the best!"<br />
<br />
;Awk: A data-driven programming language designed for processing text-based data.<br />
<br />
BEGIN {<br />
print "Arch is the best!"<br />
}<br />
<br />
;BASIC: A scripting language that one of the most commonly used computer programming languages in the 1960's, considered an easy step for students to learn before more powerful languages such as FORTRAN.<br />
<br />
10 PRINT "Arch is the best!"<br />
<br />
;Batch: A scripting language for Windows that can be used to automate tasks or just have some fun.<br />
<br />
@echo off<br />
echo Arch is the best!<br />
pause<br />
<br />
;Befunge: Believed to be the first two-dimensional, ASCII-based, general-purpose (in the sense of "you could plausibly write Hunt the Wumpus in it") programming language.<br />
<br />
<v"Arch is the best!"0<br />
<,_@#:<br />
<br />
; BIRL: Like ArnoldC, but for Bambam[https://www.youtube.com/watch?v=3_qEE2i6h5Q].<br />
<br />
HORA DO SHOW<br />
CE QUER VER ESSA PORRA? ("Arch is the best!\n");<br />
BORA CUMPADE 0;<br />
BIRL<br />
<br />
;Boo:A stablished object oriented statically typed programming language for .NET and Mono with a python inspired syntax and a special focus on metaprogramming through language and compiler extensibility features such as macros and custom compilation pipelines.<br />
<br />
print "Arch is the best!"<br />
<br />
;Bourne shell: The original program, should be compatible with any shell.<br />
<br />
#!/bin/sh<br />
echo "Arch is the best!"<br />
<br />
;Bourne shell (Alternate):Handy for piping the output to your favourite IRC/email/IM client. Should work with any shell.<br />
<br />
#!/bin/sh<br />
yes Arch is the best!<br />
<br />
;brainfuck: Doesn't the language name explain it?<br />
<br />
++>++++++>+++++<+[>[->+<]<->++++++++++<]>>.<[-]>[-<++>]<br />
<----------------.---------------.+++++.<+++[-<++++++++++>]<.<br />
>>+.++++++++++.<<.>>+.------------.---.<<.>>---.<br />
+++.++++++++++++++.+.<<+.[-]++++++++++.<br />
<br />
;C: Note the three space indenting used in this project, much like that used by other superior beings.<br />
<br />
#include <stdio.h><br />
#include <stdlib.h><br />
int main(void)<br />
{<br />
puts("Arch is the best!");<br />
return EXIT_SUCCESS;<br />
}<br />
<br />
;C#: Intended to be a simple, modern, general-purpose, object-oriented programming language.<br />
<br />
using System;<br />
Console.WriteLine ("Arch is the best!");<br />
<br />
;C++:Arch == Linux++<br />
<br />
#include <iostream><br />
#include <cstdlib><br />
int main ()<br />
{<br />
std::cout << "Arch is the best!" << std::endl;<br />
return EXIT_SUCCESS;<br />
}<br />
<br />
;COBOL:A simple, lightweight programming language.<br />
<br />
IDENTIFICATION DIVISION.<br />
PROGRAM-ID. TheBest.<br />
<br />
PROCEDURE DIVISION.<br />
DISPLAY "Arch is the best!".<br />
STOP RUN.<br />
<br />
;CoffeeScript: A programming language that transcompiles to JavaScript.<br />
<br />
alert 'Arch is the best!'<br />
<br />
;Clojure: A Lisp dialect that runs on the JVM.<br />
<br />
(prn "Arch is the best!")<br />
<br />
;Common Lisp: A Lisp dialect<br />
<br />
(princ "Arch is the best!")<br />
<br />
;Crystal: An object-oriented, Ruby-like language.<br />
<br />
puts "Arch is the best!"<br />
<br />
;Crystal (through web server): For distributing the message to multiple friends at once.<br />
<br />
# For giving the message to your friends<br />
require "http/server"<br />
<br />
server = HTTP::Server.new(80) do |context|<br />
context.response.content_type = "text/plain"<br />
context.response.print "Arch is the best!"<br />
end<br />
<br />
puts "Listening."<br />
server.listen<br />
<br />
;csh: A C-like shell.<br />
<br />
#!/bin/csh<br />
echo "Arch is the best!"<br />
<br />
;CSS: A stylesheet language, heavily used for styling web pages.<br />
<br />
body * {<br />
display: none;<br />
}<br />
<br />
body::before {<br />
content: "Arch is the best!";<br />
font-family: monospace;<br />
font-size: 2.7rem;<br />
position: absolute;<br />
left: 50%;<br />
top: 50%;<br />
transform: translate(-50%, -50%);<br />
}<br />
<br />
;D: A C-style language. The benefits of hindsight, with modern conveniences.<br />
<br />
import std.stdio : writeln;<br />
void main()<br />
{<br />
writeln("Arch is the best");<br />
}<br />
<br />
;Dart: Google's javascript killer<br />
<br />
main(){<br />
print('Arch is the best');<br />
}<br />
<br />
;Dogescript: Doge-friendly JavaScript<br />
<br />
console.loge with ' So Arch'<br />
console.loge with ' Much Good'<br />
console.loge with ' Wow'<br />
<br />
;Ebuild: Gentoo's build script format.<br />
<br />
DESCRIPTION="Arch is the best!"<br />
SRC_URI="<nowiki>https://wiki.archlinux.org/index.php/Arch_is_the_best</nowiki>"<br />
<br />
LICENSE="GFDL_1.3"<br />
SLOT="0"<br />
KEYWORDS=""<br />
IUSE=""<br />
<br />
DEPEND=""<br />
RDEPEND=""<br />
<br />
src_compile() {<br />
einfo "Arch is the best!"<br />
}<br />
<br />
;Emacs Lisp: A dialect of the Lisp programming language used by the GNU Emacs and XEmacs text editors<br />
<br />
(message "Arch is the best!")<br />
<br />
;Emojicode: A delimiter-less, object oriented, imperative, high-level, hybrid language with emojis as fix points and methods.<br />
<br />
🏁 🍇<br />
😀 🔤Arch is the best!🔤❗️<br />
🍉<br />
<br />
;Elixir: A dynamic, functional language designed for building scalable and maintainable applications<br />
<br />
IO.puts "Arch is the best!"<br />
<br />
;Erlang: A concurrent, garbage-collected programming language and runtime system.<br />
<br />
-module(arch).<br />
-export([is_the_best/0]).<br />
is_the_best() -> io:fwrite("Arch is the best!\n").<br />
<br />
;Or using message passing between processes<br />
<br />
-module(arch).<br />
-export([ultimate_question/0,the_answer/0]).<br />
the_answer() -><br />
receive<br />
{Client,who_is_the_best} -><br />
Client ! {self(),"Arch is the best!"};<br />
{Client,_} -><br />
Client ! {self(),"Taco Taco Taco!"}<br />
end,<br />
the_answer().<br />
ultimate_question() -><br />
Pid = spawn(arch,the_answer,[]),<br />
Pid ! {self(),who_is_the_best},<br />
receive<br />
{Pid,Response} -> io:format("~s~n",[Response])<br />
end.<br />
<br />
;F#: A strongly-typed, functional-first programming language for writing simple code to solve complex problems.<br />
<br />
printfn "Arch is the best!"<br />
<br />
;Factor: High-level stack-based language.<br />
<br />
"Arch is the best" print<br />
<br />
;FIM++: A wordy, imperative, dynamically-typed, and interpreted language that can use Java classes.<br />
<br />
Dear Princess Celestia: Letter About Arch Linux.<br />
Today I learned:<br />
I wrote "Arch is the best!".<br />
Your faithful student, Twilight Sparkle<br />
<br />
;Fish: The user-friendly command line shell.<br />
<br />
function arch_is_the_best --on-event fish_prompt<br />
echo -ne "\e[94mArch is the best!\e[0m"<br />
end<br />
<br />
;Forth:Stack-based language.<br />
<br />
." Arch is the best" cr -- kiss way<br />
<br />
;Fortran95<br />
<br />
program arch<br />
print *,"Arch is the best!"<br />
end program arch<br />
<br />
;Genie: A new programming language, that allows for a more modern programming style while being able to effortlessly create and use GObjects natively.<br />
<br />
init<br />
print "Arch is the best"<br />
<br />
;Gjs: A Javascript binding for GNOME. It's mainly based on Spidermonkey javascript engine and the GObject introspection framework.<br />
<br />
#!/usr/bin/env gjs<br />
print ('Arch is the best');<br />
<br />
;Gleam: A fast, friendly, and functional language for building type-safe, scalable systems.<br />
<br />
import gleam/io<br />
<br />
pub fn main() {<br />
io.println("Arch is the best!")<br />
}<br />
<br />
;Go: A language created by Google that's a love child between C, C++ and Python.<br />
<br />
package main<br />
<br />
import "fmt"<br />
<br />
func main() {<br />
fmt.Println("Arch is the best!")<br />
}<br />
<br />
;Groovy: An agile and dynamic language for the Java Virtual Machine.<br />
<br />
println 'Arch is the best!' <br />
<br />
;Hare: A systems programming language designed to be simple, stable, and robust.<br />
<br />
use fmt;<br />
<br />
export fn main() void = {<br />
fmt::println("Arch is the best!")!;<br />
};<br />
<br />
;Haskell: The language where IO is easy and unproblematic.<br />
<br />
main = putStrLn "Arch is the best!"<br />
<br />
;Haxe: An object oriented language based off actionscript that has a flavor of functionality<br />
<br />
package;<br />
<br />
class Main {<br />
public static function main() {<br />
Sys.println("Arch is the best!");<br />
}<br />
}<br />
<br />
;HTML: A markup language used to create and define web pages and their content.<br />
<br />
{{bc|1=<br />
<!DOCTYPE html><br />
<html lang='en'><br />
<head><br />
<title>Arch is the best!</title><br />
</head><br />
<body><br />
<p>Arch is the best!</p><br />
</body><br />
</html><br />
}}<br />
<br />
;Idris: A general purpose pure functional programming language with dependent types. Haskell, but crazier.<br />
<br />
module Main<br />
<br />
main : IO ()<br />
main = putStrLn "Arch is the best!"<br />
<br />
;INTERCAL: "Designed very early one May morning in 1972 by two hackers who are still trying to live it down."<br />
<br />
PLEASE NOTE THAT THIS WAS MADE FOR C-INTERCAL<br />
DO ,10 <- #18<br />
DO ,10SUB#1 <- #126<br />
DO ,10SUB#2 <- #52<br />
DO ,10SUB#3 <- #136<br />
PLEASE DO ,10SUB#4 <- #176<br />
DO ,10SUB#5 <- #18<br />
DO ,10SUB#6 <- #110<br />
DO ,10SUB#7 <- #200<br />
PLEASE DO ,10SUB#8 <- #202<br />
DO ,10SUB#9 <- #214<br />
DO ,10SUB#10 <- #24<br />
DO ,10SUB#11 <- #112<br />
PLEASE DO ,10SUB#12 <- #162<br />
DO ,10SUB#13 <- #190<br />
DO ,10SUB#14 <- #160<br />
PLEASE DO ,10SUB#15 <- #216<br />
DO ,10SUB#16 <- #160<br />
DO ,10SUB#17 <- #170<br />
PLEASE DO ,10SUB#18 <- #52<br />
DO READ OUT ,10<br />
DO GIVE UP<br />
<br />
Also a much larger [https://gist.github.com/ISSOtm/33a486dac52626160131d8daa7f16fc6 ASCII-transcoding version].<br />
<br />
(Non-portable C-INTERCAL I/O had to be used, since INTERCAL-72 does not allow arbitrary characters.)<br />
<br />
;Io: A pure object-oriented programming language inspired by Smalltalk, Self, Lua, Lisp, Act1, and NewtonScript.<br />
<br />
"Arch is the best!" println<br />
<br />
;Java: An extremely portable language, this will run on pretty much anything, it might even run on your toaster!<br />
<br />
public class ArchIsTheBest {<br />
public static void main(String[] args) {<br />
System.out.println("Arch is the best!");<br />
}<br />
}<br />
<br />
;JavaScript: Also known as ECMAScript, a prototype-based object-oriented scripting language.<br />
<br />
console.log('Arch is the best!');<br />
<br />
;JavaScript (in a web browser)<br />
<br />
alert('Arch is the best!');<br />
<br />
;Julia: A fresh approach to numerical computing.<br />
<br />
println("Arch is the best!")<br />
<br />
;Kotlin: JetBrains' attempt to get world domination.<br />
<br />
fun main() {<br />
println("Arch is the best!")<br />
}<br />
<br />
;LaTeX: A typesetting framework and ecosystem implemented on top of TeX (ironically, more famous than TeX). "The" framework for typesetting mathematical equations and diagrams.<br />
<br />
\documentclass{minimal}<br />
<br />
\begin{document}<br />
Arch is the best!<br />
\end{document}<br />
<br />
;LilyPond: A powerful music engraving program with an intuitive LaTeX-like input language.<br />
<br />
\version "2.12.3"<br />
\include "english.ly"<br />
\header { title = "Arch is the best!" }<br />
\score<br />
{<br />
<<<br />
\relative c' { c4 e g c \bar "||" }<br />
\addlyrics { Arch is the best! }<br />
>><br />
}<br />
<br />
;LOLCODE: Why not?<br />
<br />
HAI<br />
CAN HAS STDIO?<br />
VISIBLE "ARCH IS TEH PWNZ LOL!"<br />
KTHXBYE<br />
<br />
;Lua: A lightweight, extensible programming language.<br />
<br />
print "Arch is the best!"<br />
<br />
;Malbolge: A language created to make programming as hard as possible.<br />
<br />
bCBA@?>=<;:9876543210/.-,+*)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]<br />
\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9y16543210/.-,+*)('&}C#"!~}|{zyxwvu<br />
tsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLK-CgGFEDCBA@?>=<;:98x6543210/<br />
.-,+*)('&%$#"!~}|u;yxwpun4rqpRhmf,jihgIe^$ba`_^]\[ZYXQVUTMqQPONMFjJI+A<br />
eEDC%A:^>=<|:981U54t21*/.-&Jk)('&}C#"!aw={z\xwvun4lqpi/mlkjiKaf_%p<br />
<br />
;Matlab: A proprietary programming language developed by MathWorks.<br />
<br />
disp('Arch is the best!');<br />
<br />
;Morpho: Morpho is a multi-paradigm programming language that supports procedural, object-oriented and functional programming.<br />
<br />
writeln("Arch is the best!");<br />
<br />
;Myrddin: A system programming language which aims for control and simplicity, featuring strong type checking, generics, type inference, closures, and traits.<br />
<br />
/* mbld -b aitb aitb.myr */<br />
use std<br />
const main = {<br />
std.put("Arch is the best!\n")<br />
}<br />
<br />
;NASM / Yasm (i686): Notice that the string is in the .text section, which feels superior.<br />
<br />
;nasm -f elf32 arch.asm<br />
;ld -o arch arch.o<br />
;./arch<br />
<br />
section .text<br />
global _start<br />
_start:<br />
mov edx,len<br />
mov ecx,msg<br />
mov ebx,1<br />
mov eax,4<br />
int 0x80<br />
xor ebx,ebx<br />
mov eax,1<br />
int 0x80<br />
msg: db "Arch is the best!",10<br />
len equ $-msg<br />
<br />
;NASM / Yasm (x86_64) :Featuring AMD's sexy new instruction, ''syscall''.<br />
<br />
;nasm -f elf64 arch.asm<br />
;ld -o arch arch.o<br />
;./arch<br />
<br />
section .text<br />
global _start<br />
s:<br />
db 'Arch is the best!',0ah<br />
l equ $-s<br />
_start:<br />
mov rax,1<br />
mov rdi,1<br />
mov rsi,s<br />
mov rdx,l<br />
syscall<br />
mov rax,60<br />
xor rdi,rdi<br />
syscall<br />
<br />
;Nim:Portable lightweight programming language.<br />
<br />
echo "Arch is the best!"<br />
<br />
;node.js: a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications, using an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.<br />
<br />
console.log('Arch is the best!');<br />
<br />
;node.js (http server): A node.js program to beam the info that 'Arch is the best!' using HTTP<br />
<br />
require('http').createServer((req,res) => {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Arch is the best!');}).listen(80);<br />
<br />
;Objective-C: A reflective, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.<br />
<br />
NSLog(@"Arch is the best!");<br />
<br />
;OCaml: The main implementation of the Caml programming language.<br />
<br />
print_endline "Arch is the best!"<br />
<br />
;Octave: High-level interpreted language, primarily intended for numerical computations.<br />
<br />
printf("Arch is the best!\n")<br />
<br />
;Ook!: brainfuck, translated to Orangutan.<br />
<br />
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook? Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.<br />
<br />
;Pascal: An influential imperative and procedural programming language.<br />
<br />
program ArchIsTheBest;<br />
begin<br />
writeln('Arch is the best!');<br />
end.<br />
<br />
;PDF: A language used for talking to printers.<br />
<br />
%PDF-1.1<br />
<br />
1 0 obj<br />
<< /Type /Catalog<br />
/Pages 2 0 R<br />
>><br />
endobj<br />
<br />
2 0 obj<br />
<< /Type /Pages<br />
/Kids [3 0 R]<br />
/Count 1<br />
/MediaBox [0 0 595 842]<br />
>><br />
endobj<br />
<br />
3 0 obj<br />
<< /Type /Page<br />
/Parent 2 0 R<br />
/Resources<br />
<< /Font<br />
<< /F1<br />
<< /Type /Font<br />
/Subtype /Type1<br />
/BaseFont /Times-Roman<br />
>><br />
>><br />
>><br />
/Contents 4 0 R<br />
>><br />
endobj<br />
<br />
4 0 obj<br />
<< /Length 48 >><br />
stream<br />
BT<br />
/F1 72 Tf<br />
55 460 Td<br />
(Arch is the best!) Tj<br />
ET<br />
endstream<br />
endobj<br />
<br />
xref<br />
0 5<br />
0000000000 65535 f <br />
0000000016 00000 n <br />
0000000066 00000 n <br />
0000000148 00000 n <br />
0000000303 00000 n <br />
trailer<br />
<< /Root 1 0 R<br />
/Size 5<br />
>><br />
startxref<br />
402<br />
%%EOF<br />
<br />
;Perl: A high-level, general-purpose, interpreted, dynamic programming language.<br />
<br />
#!/usr/bin/env perl<br />
print "Arch is the best!\n";<br />
<br />
;Perl 6: The latest member of the Perl family.<br />
<br />
#!/usr/bin/env perl6<br />
say 'Arch is the best!';<br />
<br />
;PHP: A general-purpose scripting language.<br />
<br />
<?php<br />
echo "Arch is the best!\n";<br />
<br />
;Pixilang: Make me pixels.<br />
<br />
print("Arch is the best!",0,0,#1897D1)<br />
frame<br />
<br />
;Pony:An object-oriented, actor-model, capabilities-secure, high performance programming language.<br />
<br />
actor Main<br />
new create(env: Env) =><br />
env.out.print("Arch is the best!")<br />
<br />
;Portable GNU assembler: {{ic|as -o arch.o arch.s && ld -o arch -O0 arch.o}}<br />
<br />
.section .data<br />
archIsBest:<br />
.ascii "Arch is the best!\n"<br />
archIsBest_len:<br />
.long . - archIsBest<br />
.section .text<br />
.globl _start<br />
_start:<br />
xorl %ebx, %ebx<br />
movl $4, %eax<br />
xorl %ebx, %ebx<br />
incl %ebx<br />
leal archIsBest, %ecx<br />
movl archIsBest_len, %edx<br />
int $0x80<br />
xorl %eax, %eax<br />
incl %eax<br />
xorl %ebx, %ebx<br />
int $0x80<br />
<br />
;Porth: Stack-based like Forth but in python.<br />
<br />
include "std.porth"<br />
proc main in<br />
"Arch is the best!" puts<br />
end<br />
<br />
;PostScript: An older language used for talking to printers.<br />
<br />
%!PS<br />
/monospace 60 selectfont<br />
10 420 moveto<br />
(Arch is the best!) show<br />
showpage<br />
<br />
;Powershell: A task-based command-line shell and scripting language built on .NET.<br />
<br />
Write-Output "Arch is the best!"<br />
<br />
;Processing: An open source programming language and IDE built for the electronic arts and visual design.<br />
<br />
println("Arch is the best!");<br />
<br />
;Prolog: A general purpose logic programming language associated with artificial intelligence and computational linguistics.<br />
<br />
format('Arch is the best~n',[]).<br />
<br />
;Python: A general-purpose high-level programming language.<br />
<br />
print('Arch is the best!')<br />
<br />
;q (kdb+): A programming language for array processing used as the query language for kdb+.<br />
<br />
show "Arch is the best!"<br />
<br />
;QBASIC: An interpreter for a variant of the BASIC programming language which is based on QuickBASIC.<br />
<br />
PRINT "Arch is the best!"<br />
<br />
;R: A language for statistical computing (and much more!).<br />
<br />
archIsBest <- function() { cat("Arch is the best!\n") }<br />
archIsBest()<br />
<br />
;Racket: A general purpose, multi-paradigm programming language in the Lisp-Scheme family.<br />
<br />
#lang racket<br />
<br />
(let ([str "Arch is the best!\n"])<br />
(write-string str)<br />
(values))<br />
<br />
;Ruby: A dynamic, reflective, general purpose object-oriented programming language.<br />
<br />
#!/usr/bin/ruby -w<br />
puts 'Arch is the best!'<br />
<br />
;Rust: Rust is a systems programming language that runs blazingly fast, prevents almost all crashes, and eliminates data races.<br />
<br />
fn main() {<br />
println!("Arch is the best!");<br />
}<br />
<br />
;Salt: Salt is an automation framework<br />
<br />
salt '*' event.fire '{"data":"Arch Is the best!"}' 'arch/best'<br />
<br />
;Scala: A multi paradigm language that runs on the JVM.<br />
<br />
object ArchIsBest extends App {<br />
println("Arch is the best!")<br />
}<br />
<br />
;Scratch: A block based programming language made by MIT.<br />
<br />
[https://scratchblocks.github.io/#?style=scratch3&script=when%20green%20flag%20clicked%0Asay%20%5BArch%20is%20the%20best!%5D%0A Link to scratchblocks where you can see what it would look like as actual scratch code]<br />
when green flag clicked<br />
say [Arch is the best!]<br />
<br />
;Scheme: A dialect of Lisp.<br />
<br />
(display "Arch is the best!\n")<br />
<br />
;Seed: A library and interpreter, dynamically bridging the WebKit JavaScriptCore engine, with the GNOME platform.<br />
<br />
#!/usr/bin/env seed<br />
print ('Arch is the best');<br />
<br />
;Shakespeare Programming Language: Designed to "''make a language with beautiful source code'' [...]"<br />
<br />
Arch is the Best.<br />
<br />
Arthur, a young man who is the best.<br />
Isabella, a likewise young woman who be.<br />
The Ghost, an undead who is the article.<br />
Beatrice, a young woman who is an adjective.<br />
<br />
<br />
Act I: Setting of the Variables.<br />
<br />
Scene I: Setting of Isabella and Arthur.<br />
<br />
[Enter Arthur and Isabella]<br />
<br />
Arthur:<br />
You are as dirty as the square of the sum of a rotten smelly foul devil<br />
and a vile lie! You are as bold as the sum of yourself and an evil hog!<br />
<br />
Isabella:<br />
Thou art as big as the square of a cute fair sweet flower! You are as proud<br />
as the sum of thyself and a cow.<br />
<br />
[Exit Arthur]<br />
<br />
Scene II: Setting of The Ghost.<br />
<br />
[Enter The Ghost]<br />
<br />
Isabella:<br />
You art as loving as myself. Thou are as huge as the sum of yourself and twice<br />
a red old hair. You are as cowardly as the sum of yourself and a fat goat!<br />
<br />
[Exit Isabella]<br />
<br />
Scene III: Setting of Beatrice.<br />
<br />
[Enter Beatrice]<br />
<br />
The Ghost:<br />
Thou are as good as the sum of Isabella and a mighty fine rich noble King.<br />
<br />
[Exeunt The Ghost and Beatrice]<br />
<br />
Act II: Printing Arch is the Best.<br />
<br />
Scene I: Arch.<br />
<br />
[Enter Arthur and Beatrice]<br />
<br />
Beatrice:<br />
Speak thy mind! You art as peaceful as the quotient between thyself and the<br />
clearest Lord.<br />
<br />
Arthur:<br />
Speak your mind!<br />
<br />
[Exeunt Arthur and Beatrice]<br />
<br />
[Enter Isabella and The Ghost]<br />
<br />
The Ghost:<br />
Thou are as normal as the sum of thyself and a town. Speak thy mind!<br />
<br />
Isabella:<br />
Speak your mind!<br />
<br />
[Exit Isabella]<br />
<br />
[Enter Arthur]<br />
<br />
The Ghost:<br />
Speak thy mind!<br />
<br />
[Exit Arthur]<br />
<br />
Scene II: is.<br />
<br />
[Enter Beatrice]<br />
<br />
Beatrice:<br />
Thou are as old as the sum of yourself and a nose. Speak your mind!<br />
<br />
The Ghost:<br />
You art as pretty as the sum of thyself and a face. Speak your mind.<br />
<br />
[Exit The Ghost]<br />
<br />
[Enter Arthur]<br />
<br />
Beatrice:<br />
Speak thy mind.<br />
<br />
Scene III: the.<br />
<br />
Arthur:<br />
You are as blue as the sum of yourself and a hamster. Speak thy mind!<br />
<br />
[Exit Arthur]<br />
<br />
[Enter The Ghost]<br />
<br />
Beatrice:<br />
You are as prompt as the sum of thyself and a lie! Speak your mind.<br />
<br />
[Exit Beatrice]<br />
<br />
[Enter Isabella]<br />
<br />
The Ghost:<br />
You art as happy as the sum of thyself and a large moon. Speak thy mind!<br />
<br />
[Exit The Ghost]<br />
<br />
[Enter Arthur]<br />
<br />
Isabella:<br />
Speak thy mind.<br />
<br />
[Exit Arthur]<br />
<br />
Scene IV: Best.<br />
<br />
[Enter Beatrice]<br />
<br />
Beatrice:<br />
Thou are as blue as the sum of the sum of a curse and thyself and a bad<br />
codpiece. Speak your mind! You art as lovely as the sum of the sum of the<br />
happiness and yourself and a blossoming flower. Speak thy mind.<br />
<br />
Isabella:<br />
You are as healthy as the sum of yourself and a plague! Speak thy mind.<br />
Thou art as huge as the sum of thyself and a hero. Speak your mind!<br />
<br />
[Exit Beatrice]<br />
<br />
[Enter Arthur]<br />
<br />
Isabella:<br />
You art as green as the sum of thyself and a mother. Speak your mind.<br />
<br />
[Exeunt]<br />
<br />
;Shoes: A Ruby version using Shoes for a GUI.<br />
<br />
Shoes.app :width => 135, :height => 30 do<br />
para "Arch is the Best!"<br />
end<br />
<br />
;Smalltalk: Smalltalk is an object-oriented, dynamically typed, reflective programming language.<br />
<br />
Transcript show: 'Arch is the best!'.<br />
<br />
;Solidity: Object-oriented programming language for Ethereum smart contracts.<br />
<br />
pragma solidity ^0.6.0;<br />
<br />
contract ArchIsTheBest {<br />
function archIsTheBest() external pure returns (string memory) {<br />
return "Arch is the best!";<br />
}<br />
}<br />
<br />
;SQL: Structured Query Language, the query language for relational databases<br />
<br />
SELECT 'Arch is the best!';<br />
SELECT 'Arch is the best!' from dual; -- for Oracle DB<br />
<br />
;Standard ML: A general-purpose, modular, functional programming language with compile-time type checking and type inference.<br />
<br />
print "Arch is the best!\n"<br />
<br />
;Swift: A general-purpose, multi-paradigm, compiled programming language developed by Apple Inc.<br />
<br />
print("Arch is the best!")<br />
<br />
;Tcl/Tk: A scripting language that is commonly used for rapid prototyping, scripted applications, GUIs and testing.<br />
<br />
#!/usr/bin/env tclsh<br />
puts "Arch is the best!"<br />
<br />
;TeX: A typesetting language aimed at scientific publishing. Famous for giving the ability to describe complicated equations in a plain text format. The basis for the more famous LaTeX.<br />
<br />
Arch is the best!<br />
\bye<br />
<br />
;TrumpScript: A scripting language based on President Trump's words.<br />
<br />
say it with me, "Arch is the best!";<br />
america is great.<br />
<br />
;UEFI: An extensible firmware framework<br />
<br />
#include <Uefi.h><br />
EFI_STATUS EFIAPI<br />
ArchIsTheBest (<br />
IN EFI_HANDLE ImageHandle,<br />
IN EFI_SYSTEM_TABLE *SystemTable<br />
)<br />
{<br />
SystemTable -> ConOut-> OutputString(SystemTable->ConOut, L"Arch is the best!\n"); <br />
return EFI_SUCCESS;<br />
}<br />
<br />
; V: Simple, fast, safe, compiled language for developing maintainable software.<br />
<br />
fn main() {<br />
println('Arch is the best!')<br />
}<br />
<br />
;Vala: Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.<br />
<br />
void main(string[] args) {<br />
stdout.printf("\nArch is the best!\n\n");<br />
}<br />
<br />
; var'aq: [http://freshmeat.sourceforge.net/projects/varaq A warrior's programming language]<br />
"Arch is the best!" cha'<br />
<br />
; Verilog: A hardware description language, standardized as IEEE 1364<br />
module top;<br />
initial $display("Arch is the best!");<br />
endmodule<br />
<br />
; VHDL: VHSIC Hardware Description Language<br />
<br />
use std.textio.all;<br />
<br />
entity top is<br />
end top;<br />
<br />
architecture behaviour of top is begin<br />
process begin<br />
write (output, String'("Arch is the best!"));<br />
wait;<br />
end process;<br />
end behaviour;<br />
<br />
;VimScript: A scripting language for the Vim text editor.<br />
<br />
echo "Arch is the best!"<br />
<br />
;Visual Basic: A third-generation event-driven programming language and integrated development environment (IDE) from Microsoft for its Component Object Model (COM) programming model.<br />
<br />
Module Arch<br />
Sub Main()<br />
MsgBox("Arch is the best!")<br />
End Sub<br />
End Module<br />
<br />
;wenyan-lang: A programming language for the ancient Chinese.<br />
<br />
吾有一言。曰「「阿祺,盡善矣。」」。書之。<br />
<br />
; Wiring (Arduino):Built on Processing, the open source programming language developed at the Massachusetts Institute of Technology.<br />
<br />
void setup()<br />
{<br />
Serial.begin(9600);<br />
}<br />
void loop()<br />
{<br />
Serial.print("Arch is the best!");<br />
}<br />
<br />
; Wolfram: Proprietary programming language developed by Wolfram Inc which emphasizes symbolic computation, functional programming, and rule-based programming.<br />
<br />
Print["Arch is the best"]<br />
<br />
; X11: X11 is an architecture independent system for display of graphical user interfaces.<br />
{{ic|cc -lX11 arch.c}}<br />
<br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
<br />
#include <X11/Xlib.h><br />
<br />
int main()<br />
{<br />
Display *d;<br />
Window w;<br />
XEvent e;<br />
int s;<br />
<br />
if (!(d = XOpenDisplay(NULL))) {<br />
fprintf(stderr, "Couldn't open display, but Arch is the best!\n");<br />
exit(1);<br />
}<br />
<br />
s = DefaultScreen(d);<br />
w = XCreateSimpleWindow(d, RootWindow(d,s), 0, 0, 110, 20, 0, <br />
0, WhitePixel(d,s));<br />
XSelectInput(d, w, ExposureMask | KeyPressMask);<br />
XMapWindow(d,w);<br />
<br />
while (1) {<br />
XNextEvent(d, &e);<br />
if (e.type == Expose) {<br />
XDrawString(d, w, DefaultGC(d, s), 5, 15, "Arch is the best!", 17);<br />
}<br />
}<br />
<br />
XCloseDisplay(d);<br />
return 0;<br />
}<br />
<br />
;Z3: A theorem prover from Microsoft Research<br />
<br />
(define-const arch String "Arch is the best")<br />
(simplify (str.++ arch))<br />
<br />
;Zig: A general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. Intends to deprecate C.<br />
<br />
const std = @import("std");<br />
<br />
pub fn main() !void {<br />
std.debug.warn("Arch is the best!\n", .{});<br />
}<br />
<br />
;Zimbu: A fast, easy to learn, and JS-like programming language.<br />
<br />
FUNC Main() int<br />
IO.write("Arch is the best!")<br />
RETURN 0<br />
}<br />
<br />
;Zsh: A UNIX command interpreter (shell) closely resembling ksh, but includes many enhancements.<br />
<br />
#!/bin/zsh -f<br />
setopt extendedglob<br />
print -- $(echoti setaf 2) ${$(<<<${${${(@j: :)${(@s:_:)${:-What_Linux_is_the_best?}}}/* (#b)([A-Z]i)/Arch $match[1]}} tr '?' '!')} $terminfo[sgr0]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=726889PipeWire2022-04-18T16:37:55Z<p>Scrumplex: Remove links to progress about xdg-desktop-portal 1.10.0, as most implementations should be up-to-date by now.</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related|WirePlumber}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on the {{ic|audio}} and {{ic|video}} [[user group]]s. Instead, it uses a [[Polkit]]-like security model, asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories. There is also {{Pkg|lib32-pipewire}} for [[multilib]] support.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation.<br />
<br />
Pipewire can work as drop-in replacement for others audio servers. See [[#Audio]] for details.<br />
<br />
{{Expansion|Describe what {{Pkg|gst-plugin-pipewire}} does exactly.}}<br />
<br />
=== Session manager ===<br />
<br />
Like [[JACK]], PipeWire implements no connection logic internally. The burden of watching for new streams and connect them to the appropriate output device or application is left to an external component known as a session manager.<br />
<br />
There are currently two session managers available:<br />
<br />
* {{App|PipeWire Media Session|A very simple session manager that caters to some basic desktop use cases. It was mostly implemented for testing and as an example for building new session managers.|https://gitlab.freedesktop.org/pipewire/media-session|{{Pkg|pipewire-media-session}}}}<br />
* {{App|[[WirePlumber]]|A more powerful manager and the current recommendation. It is based on a modular design, with Lua plugins that implement the actual management functionality.|https://pipewire.pages.freedesktop.org/wireplumber/|{{Pkg|wireplumber}}}}<br />
<br />
When installing PipeWire you will be asked to opt between one of them. You can switch between them later by installing the appropriate package, which will conflict with and replace the other option.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/pipewire/helvum|{{Pkg|helvum}}}}<br />
* {{App|qpwgraph|Qt-based Graph/Patchbay for PipeWire, inspired by the JACK tool QjackCtl.|https://gitlab.freedesktop.org/rncbc/qpwgraph|{{Pkg|qpwgraph}}}}<br />
<br />
== Configuration ==<br />
<br />
The PipeWire package provides an initial set of configuration files in {{ic|/usr/share/pipewire}}. You should not edit these files directly, as package updates will overwrite your changes. To configure PipeWire, you can copy files from {{ic|/usr/share/pipewire}} to the alternate system-wide location {{ic|/etc/pipewire}}, or to the user location {{ic|~/.config/pipewire}}. [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#configuration-file-pipewireconf]<br />
<br />
=== Profiles ===<br />
<br />
Pipewire brings a custom "Pro Audio" profile in addition to the PulseAudio profiles, selectable through pavucontrol. The effect of which is described here: https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/FAQ#what-is-the-pro-audio-profile<br />
<br />
== Usage ==<br />
<br />
=== Audio ===<br />
<br />
{{Expansion|What happens when none of the following is configured/installed and an application sends audio directly to pipewire? The {{Pkg|pipewire}} package contains many audio-related files, e.g. {{ic|/etc/alsa/conf.d/50-pipewire.conf}}.}}<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See the blog post [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] for more information.<br />
<br />
==== ALSA clients ====<br />
<br />
Install {{Pkg|pipewire-alsa}} (and remove {{Pkg|pulseaudio-alsa}} if it was installed) to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or [[start]] the {{ic|pipewire-pulse.service}} [[user unit]] to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} for [[JACK]] support. There is also {{Pkg|lib32-pipewire-jack}} for [[multilib]] support.<br />
<br />
{{man|1|pw-jack}} may be used to start JACK clients, but it is technically not required, as it only serves as a wrapper around the {{ic|PIPEWIRE_REMOTE}}, {{ic|PIPEWIRE_DEBUG}} and {{ic|PIPEWIRE_LATENCY}} environment variables.<br />
<br />
It is possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" ''application''<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. The package includes the {{ic|/etc/pipewire/media-session.d/with-pulseaudio}} file, whose existence prompts the media session daemon to enable the {{ic|bluez5}} module.<br />
<br />
===== Automatic profile selection =====<br />
<br />
Both {{Pkg|pipewire-media-session}} and [[WirePlumber]] can automatically switch between HSP/HFP and A2DP profiles whenever an input stream is detected.<br />
<br />
{{Pkg|pipewire-media-session}} has it disabled by default. You can set {{ic|bluez5.autoswitch-profile}} property to {{ic|true}} to enable it:<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf (or ~/.config/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
[[WirePlumber]] has profile auto-switching enabled by default. You can disable it with:<br />
{{hc|/etc/wireplumber/policy.lua.d/11-bluetooth-policy.lua (or ~/.config/wireplumber/policy.lua.d/11-bluetooth-policy.lua|output=<br />
bluetooth_policy.policy["media-role.use-headset-profile"] = false<br />
}}<br />
<br />
==== PipeWire native patch sets ====<br />
<br />
We have Helvum for graphical visualization and creation of connections, but the rest is not in yet. The following are bash scripts which save wiresets, load wiresets, and dewire all connections. For saving and loading, use a command-line parameter for the filename.<br />
<br />
{{hc|pw-savewires|<nowiki><br />
#!/bin/bash<br />
<br />
if [[ "$#" -ne 1 ]]; then<br />
echo<br />
echo 'usage: pw-savewires filename'<br />
echo<br />
exit 0<br />
fi<br />
<br />
rm $1 &> /dev/null<br />
while IFS= read -r line; do<br />
link_on=`echo $line | cut -f 4 -d '"'`<br />
link_op=`echo $line | cut -f 6 -d '"'`<br />
link_in=`echo $line | cut -f 8 -d '"'`<br />
link_ip=`echo $line | cut -f 10 -d '"'`<br />
echo "Saving: " "'"$link_on:$link_op"','"$link_in:$link_ip"'"<br />
echo "'"$link_on:$link_op"','"$link_in:$link_ip"'" >> $1<br />
done < <(pw-cli dump short link)<br />
</nowiki>}}<br />
<br />
{{hc|pw-loadwires|<nowiki><br />
#!/bin/python<br />
<br />
import sys<br />
import csv<br />
import os<br />
<br />
if len(sys.argv) < 2:<br />
print('\n usage: pw-loadwires filename\n')<br />
quit()<br />
<br />
with open(sys.argv[1], newline='') as csvfile:<br />
pwwreader = csv.reader(csvfile, delimiter=',', quotechar='"')<br />
for row in pwwreader:<br />
print('Loading: ' + row[0] + ' --> ' + row[1])<br />
process = os.popen('pw-link ' + row[0] + ' ' + row[1])<br />
</nowiki>}}<br />
<br />
{{hc|pw-dewire|<nowiki><br />
#!/bin/bash<br />
while read -r line; do<br />
echo 'Dewiring: ' $line '...'<br />
pw-link -d $line<br />
done < <(pw-cli dump short link {{!}} grep -Eo '^[0-9]+')<br />
</nowiki>}}<br />
<br />
==== Sharing audio devices with computers on the network ====<br />
<br />
While PipeWire itself is not network transparent, its pulse implementation supports [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio#network-support network streaming]. An easy way to share audio between computers on the network is to use the [[Avahi]] daemon for discovery. <br />
Make sure that the {{ic|avahi-daemon.service}} is running on all computers that will be sharing audio.<br />
<br />
To share the local audio devices load the appropriate modules on the host:<br />
<br />
pactl load-module module-native-protocol-tcp listen=''192.168.1.10'' # Use the local IP address<br />
pactl load-module module-zeroconf-publish<br />
<br />
Then load the discovery module on the clients:<br />
<br />
pactl load-module module-zeroconf-discover<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed]. The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gnome}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based Wayland compositors (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
{{Note|1={{Pkg|xdg-desktop-portal}} 1.10.0 fixed a mismatch between specification and implementation of its D-Bus interface. [https://github.com/flatpak/xdg-desktop-portal/pull/609] Hence, some clients may not work with xdg-desktop-portal 1.10.0 or newer.}}<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the URL {{ic|chrome://flags/#enable-webrtc-pipewire-capturer}}.<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
==== xdg-desktop-portal-wlr ====<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work, the {{ic|1=XDG_CURRENT_DESKTOP}} and {{ic|1=WAYLAND_DISPLAY}} environment variables have to be set in the [[Systemd/User#Environment_variables|systemd user session]]. {{ic|1=XDG_CURRENT_DESKTOP}} has to be set to the name of your compositor, e.g. {{ic|1=XDG_CURRENT_DESKTOP=sway}}. {{ic|1=WAYLAND_DISPLAY}} is set automatically by the compositor. The recommended way to bring these environment variables over to the systemd user session is to run {{ic|1=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP}} after launching the compositor, e.g. with the compositors configuration file. See [https://github.com/emersion/xdg-desktop-portal-wlr#running] and [https://github.com/emersion/xdg-desktop-portal-wlr/wiki] for more details.<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
=== Video ===<br />
<br />
{{Expansion|{{Pkg|pipewire-v4l2}}}}<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and use one of the following options:<br />
<br />
* Add the following line in the {{ic|context.exec}} section:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)|output=<br />
...<br />
context.exec = [<br />
...<br />
{ path = "/usr/bin/pipewire" args = "-c /usr/share/pipewire/filter-chain/source-rnnoise.conf" }<br />
...<br />
}}<br />
<br />
* Follow https://github.com/werman/noise-suppression-for-voice#pipewire. <br />
<br />
Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
=== JamesDSP ===<br />
<br />
[https://github.com/Audio4Linux/JDSP4Linux#readme JamesDSP for Linux] (available as {{AUR|jamesdsp}}) provides open-source sound effects for PipeWire and PulseAudio. It uses its own effects engine and without depending on LADSPA, Calf, etc. JamesDSP was initially published as an audio effects processor for Android devices.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
[Service]<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, [[enable]] the {{ic|pulseaudio-null-sink@default_null_sink.service}} and {{ic|jack-carla-rack.service}} [[user unit]]s. <br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
== Troubleshooting ==<br />
<br />
=== Audio ===<br />
<br />
==== Microphone is not detected by PipeWire ====<br />
<br />
PipeWire's {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}}. <br />
<br />
If using {{Pkg|pipewire-media-session}}:<br />
{{hc|/etc/pipewire/media-session.d/alsa-monitor.conf (or ~/.config/pipewire/media-session.d/alsa-monitor.conf)|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
api.alsa.use-acp = false<br />
...<br />
}}<br />
<br />
Otherwise, if using {{Pkg|wireplumber}}:<br />
{{hc|/etc/wireplumber/main.lua.d/50-alsa-config.lua (or ~/.config/wireplumber/main.lua.d/50-alsa-config.lua)|output=<br />
...<br />
alsa_monitor.rules = {<br />
{<br />
...<br />
apply_properties = {<br />
-- Use ALSA-Card-Profile devices. They use UCM or the profile<br />
-- configuration to configure the device and mixer settings.<br />
-- ["api.alsa.use-acp"] = true,<br />
<br />
-- Use UCM instead of profile when available. Can be<br />
-- disabled to skip trying to use the UCM profile.<br />
["api.alsa.use-ucm"] = true,<br />
...<br />
}}<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
==== Sound does not automatically switch to Bluetooth headphones ====<br />
<br />
{{Accuracy|The linked upstream issue is specific to the xfce pulseaudio panel plugin.}}<br />
<br />
Run {{ic|pactl load-module module-switch-on-connect}} and configure your desktop environment to automatically run that command on login. You might need to execute {{ic|wpctl set-default <id>}}. The {{ic|<id>}} may be found using output of {{ic|wpctl status}}. See [https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/89 wireplumber issue #89] for more details.<br />
<br />
==== No sound after connecting to Bluetooth device ====<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
==== Low volume ====<br />
<br />
After replacing PulseAudio with Pipewire, sound may work fine, but after a reboot, the volume becomes intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
==== Increasing RLIMIT_MEMLOCK ====<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
==== Changing the default sample rate ====<br />
<br />
By default PipeWire sets a fixed global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value), you can set a new default:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)|output=<br />
...<br />
context.properties = {<br />
...<br />
default.clock.rate = ''sample_rate''<br />
...<br />
}}<br />
<br />
==== Changing the allowed sample rate(s) ====<br />
<br />
PipeWire can also change dynamically the output sample rates supported by your DAC. The sample rate follows the sample rate of the audio stream being played. <br />
<br />
{{hc|/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)|output=<br />
...<br />
context.properties = {<br />
...<br />
default.clock.allowed-rates = [ sample_rate_1 sample_rate_2 sample_rate_3 ... ]<br />
...<br />
}}<br />
for example, {{ic|[ 44100 48000 88200 96000 ]}}. Consult your hardware manual for supported values of your DAC.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm0p}} to {{ic|pcm0c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
==== Sound quality (resampling quality) ====<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to [[restart]] the {{ic|pipewire.service}} and {{ic|pipewire-pulse.socket}} [[user unit]]s (never forget {{ic|pipewire-pulse.socket}} if you want your configuration changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
It is probably somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
==== External sound card not activated after reconnect ====<br />
<br />
Check {{ic|~/.config/pipewire/media-session.d/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire/media-session.d/}} and [[restart]] the {{ic|pipewire.service}} [[user unit]].<br />
<br />
==== No Sound or pactl info shows Failure: Connection refused ====<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and [[restart]] the {{ic|pipewire-pulse.service}} [[user unit]].<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
==== Low audio quality on Bluetooth ====<br />
<br />
In case Bluetooth playback stutters, check the [[unit status]] of the {{ic|pipewire.service}} user unit for errors similar as below:<br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
If they appear, check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}}. You can also try mSBC support (fixes mic on Sony 1000XM3, i.e. Headphones WH-1000XM3 and Earbuds WF-1000XM3), and the SBC-XQ codec.<br />
<br />
With {{pkg|pipewire-media-session}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf (or ~/.config/pipewire/media-session.d/bluez-monitor.conf)|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.enable-msbc = true<br />
bluez5.enable-sbc-xq = true<br />
bluez5.codecs = [sbc sbc_xq]<br />
...<br />
}}<br />
<br />
With {{pkg|wireplumber}}:<br />
<br />
{{hc|/etc/wireplumber/bluetooth.lua.d/51-bluez-config.lua (or ~/.config/wireplumber/bluetooth.lua.d/51-bluez-config.lua)|output=<br />
bluez_monitor.properties = {<br />
["bluez5.enable-sbc-xq"] = true,<br />
["bluez5.enable-msbc"] = true,<br />
["bluez5.codecs"] = "[sbc sbc_xq]",<br />
}<br />
}}<br />
<br />
Restart PipeWire by [[restart]]ing the {{ic|pipewire.service}} user unit for the changes to take effect.<br />
<br />
==== No devices detected after PipeWire update and reboot (git / >=0.3.23) ====<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)|output=<br />
...<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}}<br />
<br />
==== Noticeable audio delay or audible pop/crack when starting playback ====<br />
<br />
This is caused by node suspension when inactive. If you are using {{ic|pipewire-media-session}}, you can disable this by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
If you are using {{ic|wireplumber}} instead of {{ic|pipewire-media-session}}, then you can copy the example configuration file located at {{ic|/usr/share/wireplumber/main.lua.d/50-alsa-config.lua}} to {{ic|/etc/wireplumber/main.lua.d/50-alsa-config.lua}} or {{ic|~/.config/wireplumber/main.lua.d/50-alsa-config.lua}} and add the line {{ic|1=["session.suspend-timeout-seconds"] = 0}} to section {{ic|apply_properties}} at the end of the file. Instead of disabling suspension entirely, you can change the timeout value by copying the file {{ic|/usr/share/wireplumber/scripts/suspend-node.lua}} to {{ic|/etc/wireplumber/scripts/suspend-node.lua}} or {{ic|~/.config/wireplumber/scripts/suspend-node.lua}} and changing the {{ic|5}} in {{ic| tonumber(node.properties["session.suspend-timeout-seconds"]) or 5}} to the desired number of seconds to delay before source suspension.<br />
<br />
==== Audio cutting out when multiple streams start playing ====<br />
<br />
This problem can typically be diagnosed by reading the [[journal]] of the {{ic|pipewire-pulse.service}} [[user unit]] and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
If you are using {{ic|wireplumber}} instead of {{ic|pipewire-media-session}}, then you can copy the example configuration file located at {{ic|/usr/share/wireplumber/main.lua.d/50-alsa-config.lua}} to {{ic|/etc/wireplumber/main.lua.d/50-alsa-config.lua}} and at the end of the file, under section {{ic|apply_properties}}, change {{ic|1=--["api.alsa.headroom"] = 0}} to {{ic|1=["api.alsa.headroom"] = 1024}}<br />
<br />
==== Audio is distorted ====<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Follow [[#Changing the sample rate]], reducing the sample rate to to {{ic|44100}} (44.1 kHz).<br />
<br />
==== Audio problems after standby ====<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
==== High latency with USB DACs (e.g. Schiit DACs) ====<br />
<br />
Changing sample rates or formats might help reduce latency with some DACs such as Schiit Hel 2.[https://www.reddit.com/r/osugame/comments/msifdd/usb_dacamp_and_audio_lag/]<br />
Using matching rules in ''pipewire-media-session'' we can set properties for devices.[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-pipewire-media-session#matching-rules]<br />
<br />
Copy the default configuration of {{ic|alsa-monitor.conf}} for ''pipewire-media-session'' into either {{ic|/etc/pipewire/media-session.d}} or {{ic|~/.config/pipewire/media-session.d}}.<br />
Then append a new rule-block similar to the following one:<br />
<br />
{{hc|/etc/pipewire/media-session.d/alsa-monitor.conf (or ~/.config/pipewire/media-session.d/alsa-monitor.conf)|output=<br />
...<br />
rules = {<br />
...<br />
{<br />
matches = [<br />
{<br />
node.name = "alsa_output.<name of node>"<br />
}<br />
]<br />
actions = {<br />
update-props = {<br />
audio.format = "S24_3LE"<br />
audio.rate = 96000<br />
# Following value should be doubled until audio doesn't cut out or other issues stop occurring<br />
api.alsa.period-size = 128<br />
...<br />
}}<br />
<br />
{{ic|alsa_output.<name of node>}} node can be obtained using {{ic|pw-top}}.<br />
<br />
Your DAC might support a different format or sample rate. You can check what your DAC supports by querying [[ALSA]]:<br />
<br />
First get the card number of your DAC:<br />
<br />
{{hc|$ aplay -l|<br />
...<br />
card 3: S2 [Schiit Hel 2], device 0: USB Audio [USB Audio]<br />
Subdevices: 0/1<br />
Subdevice #0: subdevice #0<br />
...<br />
}}<br />
<br />
So in this example it would be card 3.<br />
Get all supported sample rates and formats:<br />
<br />
{{hc|$ cat /proc/asound/cardX/streamX|<br />
...<br />
Playback:<br />
...<br />
Interface 1<br />
Altset 1<br />
Format: S16_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 16<br />
...<br />
Interface 1<br />
Altset 2<br />
Format: S24_3LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 24<br />
...<br />
Interface 1<br />
Altset 3<br />
Format: S32_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 32<br />
...<br />
...<br />
}}<br />
<br />
In this case {{ic|S16_LE, S24_3LE, S32_LE}} are the supported formats and {{ic|44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000}} are the supported sample rates across all formats.<br />
<br />
==== Realtime audio does not work ====<br />
<br />
If {{ic|RTKit error: org.freedesktop.DBus.Error.AccessDenied}} shows up in the [[unit status|status]] of the {{ic|pipewire.service}} [[user unit]], then the priority of the pipewire daemon was not changed to realtime. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1069] for this issue.<br />
<br />
==== Simultaneous output to multiple sinks on the same sound card ====<br />
<br />
Create a copy of {{ic|/usr/share/alsa-card-profile/mixer/profile-sets/default.conf}} so that changes persist across updates. Here we define a profile joining the two default mappings for Analog and HDMI.<br />
<br />
{{hc|/usr/share/alsa-card-profile/mixer/profile-sets/multiple.conf|2=<br />
[General]<br />
auto-profiles = no<br />
<br />
[Mapping analog-stereo]<br />
device-strings = front:%f<br />
channel-map = left,right<br />
paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2<br />
paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic<br />
priority = 15<br />
<br />
[Mapping hdmi-stereo]<br />
description = Digital Stereo (HDMI)<br />
device-strings = hdmi:%f<br />
paths-output = hdmi-output-0<br />
channel-map = left,right<br />
priority = 9<br />
direction = output<br />
<br />
[Profile multiple]<br />
description = Analog Stereo Duplex + Digital Stereo (HDMI) Output<br />
output-mappings = analog-stereo hdmi-stereo<br />
input-mappings = analog-stereo<br />
}}<br />
<br />
Now we configure PipeWire's media-session to use the new card-profile for matching devices. Identifying information can be found using {{ic|$ pw-cli dump device}}.<br />
<br />
{{hc|/etc/pipewire/media-session.d/alsa-monitor.conf|2=<br />
rules = [<br />
{<br />
matches = [ { alsa.card_name = "HDA Intel PCH" } ]<br />
actions = {<br />
update-props = {<br />
api.alsa.use-acp = true<br />
device.profile-set = "multiple.conf"<br />
device.profile = "multiple"<br />
api.acp.auto-profile = false<br />
api.acp.auto-port = false<br />
}<br />
}<br />
}<br />
]<br />
}}<br />
<br />
=== Video ===<br />
<br />
==== OBS (etc.) display nothing, even if they ask for a window/screen ====<br />
<br />
If you are sure that you have {{Pkg|xdg-desktop-portal}} installed as well as either {{Pkg|xdg-desktop-portal-gtk}} or {{Pkg|xdg-desktop-portal-kde}}, check the running state of the daemons.<br />
<br />
In OBS, if everything is working, you should see this in {{ic|stdout}}:<br />
<br />
...<br />
info: [pipewire] desktop selected, setting up screencast<br />
info: [pipewire] created stream 0x5632d7456850<br />
info: [pipewire] playing stream…<br />
<br />
For multi-monitor setups the {{Pkg|slurp}} package will allow to capture of all the screens.<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Minecraft&diff=726147Minecraft2022-04-10T19:42:54Z<p>Scrumplex: Promote polymc instead of polymc-git package</p>
<hr />
<div>[[Category:Gaming]]<br />
[[de:Minecraft]]<br />
[[ja:Minecraft]]<br />
[[zh-hans:Minecraft]]<br />
[https://minecraft.net/en-us/ Minecraft] is a game about breaking and placing blocks. At first, people built structures to protect against nocturnal monsters, but as the game grew players worked together to create wonderful, imaginative things.<br />
<br />
== Client ==<br />
<br />
=== Installation ===<br />
<br />
The minecraft client can be installed via the {{AUR|minecraft-launcher}} package. It provides the official game launcher, a script to launch it and a ''.desktop'' file. The package is officially recommended by Mojang on their website.<br />
<br />
=== Firewall configuration for Client/LAN worlds ===<br />
<br />
Most shared Minecraft worlds are hosted using dedicated Minecraft server. If this is how you want to host, see Server section below.<br />
<br />
A simpler way is to allow others to join your current Minecraft game. When playing, your Minecraft client also allows others to join the game in progress. Your client automatically broadcasts the info about your game on port 4445. It will also listen for TCP connections on which other players join. This TCP listening port is picked at random every time you start Minecraft. This works well if you do not have a firewall. But if your firewall blocks incoming TCP connections, then it is very tricky to allow this random port in. <br />
<br />
In conclusion, to allow your client to host a local LAN game, your [[firewall]] need to allow:<br />
* UDP port {{ic|4445}} to broadcast your game<br />
* random incoming TCP port<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_LAN_world] for more information.<br />
<br />
== Bedrock Edition Server ==<br />
<br />
This version allows the hosting of Bedrock Edition Minecraft, which is currently supported on Windows 10 and Mobile, Amazon FireOS and FireTV, Android and iOS, Xbox One, Playstation 4, Nintendo Switch and Samsung Gear VR devices.<br />
<br />
=== Installation ===<br />
<br />
The Bedrock Minecraft server can be installed via the {{aur|minecraft-bedrock-server}} package. It provides a [[systemd]] unit file. This package creates a separate {{ic|minecraft-bedrock}} account.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Using systemd you may [[start]] and [[enable]] the included {{ic|minecraft-bedrock-server.service}}. Alternatively run the following as the minecraft-bedrock user inside the {{ic|/opt/minecraft-bedrock-server}} directory:<br />
<br />
$ LD_LIBRARY_PATH=. ./bedrock_server<br />
<br />
==== Server Configuration ====<br />
<br />
The configuration file {{ic|server.properties}} contains the server settings and additional documentation. Most importantly, {{ic|server-port}} determines the {{ic|UDP}} port at which the server will listen for incoming connections. The default port is {{ic|19132}} for IPv4, and {{ic|19133}} for IPv6. UDP ports {{ic|43351}} for IPv4 and {{ic|51885}} for IPv6 are required for authentication.<br />
<br />
== Java Edition Server ==<br />
<br />
=== Installation ===<br />
<br />
The Java Edition Minecraft server can be installed via the {{aur|minecraft-server}} package. It provides additional [[systemd]] unit files and includes a small control script.<br />
<br />
Also see [[#Alternative servers]] for an overview of alternative programs allowing to host Minecraft.<br />
<br />
=== Setup ===<br />
<br />
==== Introduction ====<br />
<br />
In the installation process the {{ic|minecraft}} user and group is introduced. Establishing a Minecraft-specific user is recommended for security reasons. By running Minecraft under an unprivileged user account, anyone who successfully exploits your Minecraft server will only get access to that user account, and not yours.<br />
However you may safely add your user to the {{ic|minecraft}} group and add group write permission to the directory {{ic|/srv/minecraft}} (default) to modify Minecraft server settings. Make sure that all files in the {{ic|/srv/minecraft}} directory are either owned by the {{ic|minecraft}} user, or that the user has by other means read and write permissions. The server will error out if it is unable to access certain files and might even have insufficient rights to write an according error message to the log.<br />
<br />
The package provides a systemd service and timer to take automatic backups. By default the backups are located in the {{ic|backup}} folder under the server root directory. Though to keep the disk footprint small only the 10 most recent backups are preserved (configurable via {{ic|KEEP_BACKUPS}}). The related systemd files are {{ic|minecraftd-backup.timer}}<br />
and {{ic|minecraftd-backup.service}}. They may easily be [[edit|adapted]] to your liking, e.g. to follow a custom backup interval.<br />
<br />
==== Starting the server ====<br />
<br />
To start the server you may either use systemd or run it directly from the command line. Either way the server is encapsulated in a [[tmux]] session which is owned by the {{ic|minecraft}} user. Using systemd you may [[start/enable]] the included {{ic|minecraftd.service}}. Alternatively run<br />
<br />
# minecraftd start<br />
<br />
==== Accepting EULA ====<br />
In order to run the minecraft server you must accept the [[Wikipedia:EULA|EULA]]. This only needs to happen once after installation. The [[Wikipedia:EULA|EULA]] file resides under {{ic|/srv/minecraft/eula.txt}} after being created by the package. You will need to edit this file to state that you have agreed to the contract in order to run the server. All you need to do is change:<br />
<br />
eula=false<br />
<br />
to the value true. Here is an example of accepted EULA in {{ic|/srv/minecraft/eula.txt}}:<br />
<br />
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).<br />
#Sat Sep 11 11:11:11 PDT 2011<br />
eula=true<br />
<br />
==== Firewall Configuration for Server Worlds ====<br />
<br />
There are three settings in the {{ic|server.properties}} which determine ports that your server will use.<br />
<br />
{{ic|server-port}} determines the {{ic|TCP}} port at which the server will listen for incoming connections. Default port is {{ic|25565}}.<br />
<br />
{{ic|query.port}} determines the {{ic|UDP}} port at which the server will share game info/advertising information. Default port is {{ic|25565}}. Note that since server and query ports are TCP and UDP, they can share the same port. To enable query, you also have to specify {{ic|1=enable-query=true}}.<br />
<br />
{{ic|rcon.port}} determines the {{ic|TCP}} port if you choose to allow remote access to admin console. Default port is {{ic|25575}}. To enable rcon, you also have to specify {{ic|1=enable-rcon=true}} and {{ic|1=rcon.password=...}}.<br />
<br />
You will need to allow incoming connections at least on the {{ic|server-port}}. It is advisable to allow query and its {{ic|query.port}}. On the other hand, enabling remote console access is a security risk, and you should be careful of allowing it.<br />
<br />
Above information is for the official Minecraft server. If you are using alternate server, please see its documentation for details about its configuration.<br />
<br />
See [https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server] and [https://minecraft.gamepedia.com/Server.properties] for more information.<br />
<br />
==== Server management script ====<br />
<br />
To easily control the server you may use the provided {{ic|minecraftd}} script. It is capable of doing basic commands like {{ic|start}}, {{ic|stop}}, {{ic|restart}} or attaching to the session with {{ic|console}}. Moreover it may be used to display status information with {{ic|status}}, backup the server world directory with {{ic|backup}}, restore world data from backups with {{ic|restore}} or run single commands in the server console with {{ic|command ''do-something''}}.<br />
<br />
{{Note|Regarding the server console (reachable via {{ic|minecraftd console}}), remember that you can exit any [[tmux]] session with {{ic|ctrl+a}} {{ic|d}}.}}<br />
<br />
==== Tweaking ====<br />
<br />
To tweak the default settings (e.g. the maximum RAM, number of threads etc.) edit the file {{ic|/etc/conf.d/minecraft}}.<br />
<br />
For example, more advanced users may wish to enable {{ic|IDLE_SERVER}} by setting it to {{ic|true}}. This will enable the management script to suspend the server if no player was online for at least {{ic|IDLE_IF_TIME}} (defaults to 20 minutes). When the server is suspended an {{ic|idle_server}} will listen on the Minecraft port using {{man|1|ncat}} (also called netcat or simply nc for short; see [[Network tools#Netcat]]) and will immediately start the server at the first incoming connection. Though this obviously delays joining for the first time after suspension, it significantly decreases the CPU and memory usage leading to more reasonable resource and power consumption levels.<br />
{{Note|If running for the first time with this option enabled, the {{ic|/srv/minecraft/eula.txt}} file will not get created. You need to disable it to initially start.}}<br />
<br />
=== Alternative servers ===<br />
<br />
==== Spigot (respectively Craftbukkit) ====<br />
<br />
[https://www.spigotmc.org/ Spigot] is the most widely-used '''modded''' Minecraft server in the world. It can be installed as {{AUR|spigot}} via the [[AUR]]. The spigot PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the spigot server provides its own systemd unit files, spigot script and corresponding script configuration file. The binary is called {{ic|spigot}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/spigot}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|spigot}} wherever you encounter it.<br />
<br />
It is somewhat affiliated with [https://bukkit.org/ Bukkit] and has grown in popularity since Bukkit's demise.<br />
<br />
==== Cuberite ====<br />
<br />
[https://cuberite.org/ Cuberite] is a highly efficient and extensively moddable Minecraft server, written in C++ and Lua. It achieves much better performances than the vanilla Minecraft server, but is not fully compatible with the latest Minecraft client (some game aspects might be missing or not working).<br />
<br />
Cuberite minecraft server can be installed as a {{AUR|cuberite}} package, which provides a simple web interface by default at port {{ic|8080}} with which most server operations can easily be done through the browser. The cuberite PKGBUILD builds on top of the files from the {{AUR|minecraft-server}} package. This means that the cuberite server provides its own systemd unit files, cuberite script and corresponding script configuration file. The binary is called {{ic|cuberite}} and is capable of fulfilling the same commands as {{ic|minecraftd}}. The configuration file resides under {{ic|/etc/conf.d/cuberite}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|cuberite}} wherever you encounter it.<br />
<br />
==== PaperMC ====<br />
<br />
[https://papermc.io PaperMC] is a Minecraft server, compatible with Spigot plugins which aims to offer better performance. It can be installed via {{AUR|papermc}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|papermc}} wherever you encounter it.<br />
<br />
==== Forge ====<br />
<br />
[https://minecraftforge.net Forge] is a widely used Minecraft modding API. The following server packages are available:<br />
* {{AUR|forge-server}} for the latest Minecraft version (1.16.5)<br />
* {{AUR|forge-server-1.15.2}} for Minecraft 1.15.2<br />
* {{AUR|forge-server-1.14.4}} for Minecraft 1.14.4<br />
* {{AUR|forge-server-1.12.2}} for Minecraft 1.12.2<br />
* {{AUR|forge-server-1.11.2}} for Minecraft 1.11.2<br />
* {{AUR|forge-server-1.10.2}} for Minecraft 1.10.2<br />
* {{AUR|forge-server-1.9.4}} for Minecraft 1.9.4<br />
* {{AUR|forge-server-1.8.9}} for Minecraft 1.8.9<br />
* {{AUR|forge-server-1.7.10}} for Minecraft 1.7.10<br />
* {{AUR|forge-server-1.6.4}} for Minecraft 1.6.4<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|forged}} ({{ic|forge-x.x.xd}} for legacy versions) wherever you encounter it.<br />
<br />
==== Fabric ====<br />
<br />
[https://fabricmc.net/ Fabric] is a lightweight, experimental modding toolchain for Minecraft. The server package can be installed via {{AUR|fabric-server}}.<br />
<br />
Be sure to read [[#Setup]] and replace {{ic|minecraftd}} with {{ic|fabricd}} wherever you encounter it.<br />
<br />
=== Additional notes ===<br />
<br />
* There are several server wrappers available providing everything from automatic backup to managing dozens of servers in parallel, refer to [https://minecraftservers.gamepedia.com/Server_wrappers Server Wrappers] for more information. However the management script provided by the [[AUR]] packages should suffice most needs.<br />
* You might want to set up a [[systemd timer]] with e.g. [http://www.minecraftwiki.net/wiki/Programs_and_editors#Mappers mapper] to generate periodic maps of your world.<br />
* Be sure to take periodic backups e.g. using the provided management script (see [[#Introduction]]) or plain [[rsync]].<br />
<br />
== Minecraft mod launchers ==<br />
<br />
You can launch Minecraft from different so called ''launchers'' that often include an array of mod packs to enhance one's gameplay and add [https://minecraft.gamepedia.com/Mods mods].<br />
<br />
* {{App|Feed The Beast|Originated as a custom challenge map in Minecraft that made heavy use of multiple tech mods and evolved into a mod package launcher.|https://www.feed-the-beast.com/|{{AUR|ftba}}}}<br />
* {{App|MultiMC|Sandbox environment manager for separable pack association.|https://multimc.org/|{{AUR|multimc-bin}}}}<br />
* {{App|PolyMC|Fork of MultiMC designed to be friendly to contribution & downstream packages.|https://github.com/PolyMC/PolyMC/|{{AUR|polymc}}}}<br />
* {{App|Technic Launcher|Modpack installer with a focus on mod discovery via popularity rankings.|https://www.technicpack.net/|{{AUR|minecraft-technic-launcher}}}}<br />
* {{App|Lunar Client|PvP modpack for all modern versions of Minecraft|https://lunarclient.com|{{AUR|lunar-client}}}}<br />
* {{App|Badlion Client|PvP modpack for all modern versions of Minecraft|https://client.badlion.net|{{AUR|badlion-client}}}}<br />
* {{App|GDLauncher|Open-source Minecraft launcher written in electron/react|https://gdevs.io|{{AUR|gdlauncher-bin}}}}<br />
<br />
== Other programs and editors ==<br />
<br />
There are several [https://minecraft.gamepedia.com/Programs_and_editors programs and editors] which can make your Minecraft experience a little easier to navigate. The most common of these programs are map generators. Using one of these programs will allow you to load up a Minecraft world file and render it as a 2D image, providing you with a top-down map of the world.<br />
<br />
* {{App|AMIDST|Standing for Advanced Minecraft Interface and Data/Structure Tracking, it is a program that aids in the process of finding structures, biomes, and players in Minecraft worlds. It can draw the biomes of a world out and show where points of interest are likely to be by either giving it a seed, telling it to make a random seed, or having it read the seed from an existing world (in which case it can also show where players in that world are). The project has been forked in the past, of which the most notable one is "Amidst Exporter" ({{AUR|amidstexporter}}) which includes a patch for calculating Ocean Monument locations in 1.8+ worlds.|https://github.com/toolbox4minecraft/amidst|{{AUR|amidst}}}}<br />
<br />
* {{App|Mapcrafter|A high performance Minecraft map renderer written in C++ which renders worlds to maps with an 3D-isometric perspective. You can view these maps in any webbrowser hence they are easily deployed on one's server. Mapcrafter has a simple configuration file format to specify worlds to render, different rendermodes such as day/night/cave and can also render worlds from different rotations.|http://mapcrafter.org/|{{AUR|mapcrafter-git}}}}<br />
<br />
* {{App|Minutor|A minimalistic map generator for Minecraft. You are provided with a simple GTK based interface for viewing your world. Several rendering modes are available, as well as custom coloring modes and the ability to slice through z-levels.|http://seancode.com/minutor/|{{AUR|minutor-git}}}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Logs ===<br />
<br />
Screen logs are in {{ic|/tmp/spigot_spigot_command_dump.txt}} file. If ''systemctl'' fails to start the service, inspect the ''screen'' logs.<br />
<br />
[[Journal]] logs are under {{ic|spigot.service}}.<br />
<br />
=== Client or server does not start ===<br />
<br />
It might be the problem with [[Java]] version. Java version 8 is guaranteed to work well in all cases.<br />
<br />
Both Minecraft server and the actual game work perfectly fine with the latest version of [[Java]], such as {{Pkg|jre-openjdk}}, but the Minecraft game launcher (and possibly all other mods) might only work with the [[Java]] version 8.<br />
<br />
=== Broken fonts with MinecraftForge ===<br />
<br />
Force Unicode fonts from the language menu.<br />
<br />
Since you cannot read any of the menu options: in the main menu, choose the bottom-left most button is Options, second-from-the-bottom on the left side is the Language Button. From there, the Force Unicode Font button is on the bottom, on the left side.<br />
<br />
=== MultiMC unable to build ===<br />
<br />
If you are trying to install {{AUR|multimc5}} and get an error similar to:<br />
{{bc|<br />
No CMAKE_Java_COMPILER could be found.<br />
Tell CMake where to find the compiler by setting either the environment<br />
variable "JAVA_COMPILER" or the CMake cache entry CMAKE_Java_COMPILER to<br />
the full path to the compiler, or to the compiler name if it is in the<br />
PATH.<br />
}}<br />
The error could be caused by Java missing, which can be fixed by installing {{Pkg|jdk8-openjdk}}.<br />
If the error is not fixed by that or Java was properly installed in the first place, the wrong version could still be the default environment:<br />
{{hc|$ archlinux-java status|<br />
Available Java environments:<br />
java-13-openjdk (default)<br />
java-8-openjdk<br />
}}<br />
<br />
You can set the default java version using {{ic|archlinux-java set <version>}}.<br />
<br />
=== Cannot change pulseaudio sink ===<br />
<br />
If you are unable to switch audio output device (indicated by {{ic|DONT_MOVE}} flag in the output of {{ic|pacmd list-sink-inputs}}) then the following openalsoft config may help<br />
<br />
{{hc|1=~/.alsoftrc|2=<br />
[pulse]<br />
allow-moves=yes<br />
}}<br />
<br />
== See also ==<br />
<br />
* [https://www.minecraft.net/ Official Minecraft site]<br />
* [https://www.minecraft.net/community Minecraft community links]<br />
* [https://minecraft.gamepedia.com/ Minecraft Wiki]<br />
* [https://minecraft.net/download Minecraft Client and Server download link]<br />
* [http://www.minecraftwiki.net/wiki/Crafting Crafting Recipes]<br />
* [http://www.minecraftwiki.net/wiki/Data_values Block and item data values]<br />
* [https://www.reddit.com/r/minecraft Reddit Minecraft community]<br />
* [https://www.minecraftskins.net Minecraft Skins]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Systemd-boot&diff=707787Systemd-boot2021-12-28T09:57:05Z<p>Scrumplex: Update pacman hook to match AUR package</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Boot loaders]]<br />
[[de:Systemd-boot]]<br />
[[es:Systemd-boot]]<br />
[[ja:Systemd-boot]]<br />
[[pt:Systemd-boot]]<br />
[[ru:Systemd-boot]]<br />
[[zh-hans:Systemd-boot]]<br />
{{Related articles start}}<br />
{{Related|Arch boot process}}<br />
{{Related|Secure Boot}}<br />
{{Related|Unified Extensible Firmware Interface}}<br />
{{Related articles end}}<br />
<br />
'''systemd-boot''', previously called '''gummiboot''' (German for: 'rubber dinghy'), is a simple [[UEFI]] [[boot manager]] which executes configured EFI images. The default entry is selected by a configured pattern (glob) or an on-screen menu to be navigated via arrow keys. It is included with {{pkg|systemd}}, which is installed on an Arch system by default.<br />
<br />
It is simple to configure but can only start EFI executables such as the Linux kernel [[EFISTUB]], [[UEFI shell]], [[GRUB]], or the Windows Boot Manager.<br />
<br />
== Installation ==<br />
<br />
=== Installing the EFI boot manager ===<br />
<br />
To install the ''systemd-boot'' EFI boot manager, first make sure the system has booted into UEFI mode and that [[Unified Extensible Firmware Interface#UEFI variables|UEFI variables]] are accessible. This can be checked by running the command {{ic|efivar --list}} or, if {{Pkg|efivar}} is not installed, by running {{ic|ls /sys/firmware/efi/efivars}} (if the directory exists, the system is booted into UEFI mode.)<br />
<br />
Throughout, {{ic|''esp''}} will be used to denote the [[EFI system partition#Typical mount points|ESP mountpoint]], e.g. {{ic|/efi}} or {{ic|/boot}}. This assumes that you have {{ic|chroot}}ed to your system's mount point.<br />
<br />
With the EFI system partition (ESP) mounted to {{ic|''esp''}}, use {{ic|bootctl}} to install ''systemd-boot'' to the ESP:<br />
<br />
# bootctl install<br />
<br />
This will copy the ''systemd-boot'' boot loader to the ESP: on a x64 architecture system {{ic|/usr/lib/systemd/boot/efi/systemd-bootx64.efi}} will be copied to {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} and {{ic|''esp''/EFI/BOOT/BOOTX64.EFI}}, and ''systemd-boot'' will be set as the default EFI application.<br />
<br />
{{Note|When running {{ic|bootctl install}}, ''systemd-boot'' will try to locate the ESP at {{ic|/efi}}, {{ic|/boot}}, and {{ic|/boot/efi}}. Setting {{ic|''esp''}} to a different location requires passing the {{ic|1=--esp-path=''esp''}} option. (See the [https://man.archlinux.org/man/bootctl.1 man page] for details.)}}<br />
{{Note|Installing ''systemd-boot'' will overwrite any existing {{ic|/EFI/BOOT/BOOTX64.EFI}}, for example Microsoft's version of this file.}}<br />
<br />
To conclude the installation, [[#Configuration|configure]] ''systemd-boot''.<br />
<br />
=== Installation using XBOOTLDR ===<br />
<br />
A separate [[Partitioning#/boot|/boot partition]] of type "Linux extended boot" (XBOOTLDR) can be created to keep the kernel and initramfs separate from the ESP. This is particularly helpful to [[dual boot with Windows]] with an existing ESP that is too small.<br />
<br />
Prepare an ESP as usual and create another partition for XBOOTLDR on the same physical drive. The XBOOTLDR partition must have a partition type GUID of {{ic|bc13c2ff-59e6-4262-a352-b275fd6f7172}} [https://systemd.io/BOOT_LOADER_SPECIFICATION]. The size of the XBOOTLDR partition should be large enough to accommodate all of the kernels you are going to install.<br />
<br />
{{Note|<br />
* ''systemd-boot'' does not do a file system check like it does for the ESP. Hence, it is possible to use any file system that your UEFI implementation can read.<br />
* UEFI may skip loading partitions other than the ESP when a "fast boot" mode is enabled. This can lead to ''systemd-boot'' failing to find entries on the XBOOTLDR partition; in that case, disable "fast boot" mode.<br />
* The XBOOTLDR partition must be on the same physical disk as the ESP for ''systemd-boot'' to recognize it.<br />
}}<br />
<br />
During install, mount the ESP to {{ic|/mnt/efi}} and the XBOOTLDR partition to {{ic|/mnt/boot}}.<br />
<br />
Once in chroot, use the command:<br />
<br />
# bootctl --esp-path=/efi --boot-path=/boot install<br />
<br />
To conclude the installation, [[#Configuration|configure]] ''systemd-boot''.<br />
<br />
=== Updating the EFI boot manager ===<br />
<br />
Whenever there is a new version of ''systemd-boot'', the EFI boot manager can be optionally reinstalled by the user. This can be performed manually, or the update can be automatically triggered using pacman hooks. The two approaches are described thereafter.<br />
<br />
{{Note|The EFI boot manager is a standalone EFI executable and any version can be used to boot the system (partial updates do not apply, since pacman only installs the ''systemd-boot'' installer, not ''systemd-boot'' itself.) However, new versions may add new features or fix bugs, so it is probably a good idea to update ''systemd-boot''.}}<br />
<br />
==== Manual update ====<br />
<br />
Use {{ic|bootctl}} to update ''systemd-boot'':<br />
<br />
# bootctl update<br />
<br />
{{Note|As with {{ic|bootctl install}}, ''systemd-boot'' will try to locate the ESP at {{ic|/efi}}, {{ic|/boot}}, and {{ic|/boot/efi}}. Setting {{ic|''esp''}} to a different location requires passing the {{ic|1=--esp-path=''esp''}} option.}}<br />
<br />
==== Automatic update ====<br />
<br />
===== Systemd service =====<br />
<br />
{{Warning|If you have [[Secure Boot]] enabled, you need to sign your bootloader after updating.}}<br />
<br />
As of version 250, {{Pkg|systemd}} ships with {{ic|systemd-boot-update.service}}. [[Systemd#Using_units|Enabling]] this service will update the bootloader upon the next boot.<br />
<br />
If you prefer using a [[Pacman#Hooks|pacman hook]] instead (as that will update the bootloader immediately after the systemd package has been upgraded), see the section below.<br />
<br />
===== Pacman hook =====<br />
<br />
The package {{AUR|systemd-boot-pacman-hook}} provides a pacman hook to automate the process of updating the bootloader. [[Install|Installing]] the package adds a hook which will be executed every time the {{Pkg|systemd}} package is upgraded. Alternatively, to replicate what the ''systemd-boot-pacman-hook'' package does without installing it, place the following pacman hook in the {{ic|/etc/pacman.d/hooks/}} directory:<br />
<br />
{{hc|/etc/pacman.d/hooks/100-systemd-boot.hook|2=<br />
[Trigger]<br />
Type = Package<br />
Operation = Upgrade<br />
Target = systemd<br />
<br />
[Action]<br />
Description = Gracefully upgrading systemd-boot...<br />
When = PostTransaction<br />
Exec = /usr/bin/systemctl restart systemd-boot-update.service<br />
}}<br />
<br />
If you have [[Secure Boot]] enabled, you may want to install a pacman hook to automatically re-sign the kernel and bootloader whenever the former is updated:<br />
<br />
{{hc|/etc/pacman.d/hooks/99-secureboot.hook|2=<br />
[Trigger]<br />
Operation = Install<br />
Operation = Upgrade<br />
Type = Package<br />
Target = linux<br />
Target = systemd<br />
<br />
[Action]<br />
Description = Signing Kernel for SecureBoot<br />
When = PostTransaction<br />
Exec = /usr/bin/find /boot -type f ( -name vmlinuz-* -o -name systemd* ) -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null {{!}} /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key db.key --cert db.crt --output "$1" "$1"; fi' _ {} ;<br />
Depends = sbsigntools<br />
Depends = findutils<br />
Depends = grep<br />
}}<br />
<br />
The {{ic|Target}} needs to be duplicated each time you add a new package upgrade trigger. With respect to the {{ic|find}} statement, since we had a condition with the filenames and ALPM hooks being being split on spaces, we had to surround the whole statement by quotes in order for the hook to be parsed properly. Since systemd-boot is located in sub-directories, the depth needed to be adjusted as well - we removed the {{ic|-maxdepth}} argument. In order to avoid trouble if you are unsure, try reinstalling the package you want to test to see if the hook (and the signing) is processed successfully. See [[Pacman#Hooks]] or {{man|5|alpm-hooks}} for more information.<br />
<br />
== Configuration ==<br />
<br />
=== Loader configuration ===<br />
<br />
The loader configuration is stored in the file {{ic|''esp''/loader/loader.conf}}. See {{man|5|loader.conf|OPTIONS}} for details.<br />
<br />
A loader configuration example is provided below:<br />
<br />
{{hc|''esp''/loader/loader.conf|<br />
default arch.conf<br />
timeout 4<br />
console-mode max<br />
editor no<br />
}}<br />
<br />
{{Tip|<br />
* systemd-boot does not accept tabs for indentation, use spaces instead.<br />
* {{ic|default}} and {{ic|timeout}} can be changed in the boot menu itself and changes will be stored as EFI variables {{ic|LoaderEntryDefault}} and {{ic|LoaderConfigTimeout}}, overriding these options. <br />
* {{ic|bootctl set-default ""}} can be used to clear the EFI variable overriding the {{ic|default}} option.<br />
* A basic loader configuration file is located at {{ic|/usr/share/systemd/bootctl/loader.conf}}.<br />
}}<br />
<br />
=== Adding loaders ===<br />
<br />
''systemd-boot'' will search for boot menu items in {{ic|''esp''/loader/entries/*.conf}} and additionally in {{ic|''boot''/loader/entries/*.conf}} if using [[#Installation using XBOOTLDR|XBOOTLDR]]. Note that entries in {{ic|''esp''}} can only use files (e.g. kernels, initramfs, images, etc.) in {{ic|''esp''}}. Similarly, entries in {{ic|''boot''}} can only use files in {{ic|''boot''}}.<br />
<br />
{{Remove|Duplicates https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-1-boot-loader-specification-entries.|section=Potential removal of "Loader configuration" section}}<br />
<br />
The possible options are:<br />
<br />
* {{ic|title}} – operating system name. '''Required.'''<br />
* {{ic|version}} – kernel version, shown only when multiple entries with same title exist. Optional.<br />
* {{ic|machine-id}} – machine identifier from {{ic|/etc/machine-id}}, shown only when multiple entries with same title and version exist. Optional.<br />
* {{ic|efi}} – EFI program to start, relative to your ESP ({{ic|''esp''}}); e.g. {{ic|/vmlinuz-linux}}. '''Either''' this parameter '''or''' {{ic|linux}} (see below) '''is required'''.<br />
* {{ic|options}} – space-separated command line options to pass to the EFI program or [[kernel parameters]]. Optional, but you will need at least {{ic|1=root=''dev''}} if booting Linux. This parameter can be omitted if the root partition is assigned the correct Root Partition Type GUID as defined in [https://systemd.io/DISCOVERABLE_PARTITIONS/ Discoverable Partitions Specification] and if the {{ic|systemd}} [[mkinitcpio]] hook is present.<br />
<br />
For Linux boot, you can also use {{ic|linux}} instead of {{ic|efi}}. Or {{ic|initrd}} in addition to {{ic|options}}. The syntax is:<br />
<br />
* {{ic|linux}} or {{ic|initrd}} followed by the relative path of the corresponding files in the ESP; e.g. {{ic|/vmlinuz-linux}}; this will be automatically translated into {{ic|efi ''path''}} and {{ic|1=options initrd=''path''}} – this syntax is only supported for convenience and has no differences in function.<br />
<br />
{{Note|If {{ic|options}} is present in a boot entry and [[Secure Boot]] is disabled, the value of {{ic|options}} will override any {{ic|.cmdline}} string embedded in the EFI image that is specified by {{ic|efi}} or {{ic|linux}} (see [[#Preparing a unified kernel image]]). With Secure Boot, however, {{ic|options}} (and any edits made to the kernel command line in the bootloader UI) will be ignored, and only the embedded {{ic|.cmdline}} will be used. }}<br />
<br />
An example of loader files launching Arch from a volume [[Persistent block device naming#by-label|labeled]] {{ic|''arch_os''}} and loading Intel CPU [[microcode]] is:<br />
<br />
{{hc|''esp''/loader/entries/arch.conf|2=<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
initrd /intel-ucode.img<br />
initrd /initramfs-linux.img<br />
options root="LABEL=''arch_os''" rw<br />
}}<br />
<br />
{{hc|''esp''/loader/entries/arch-fallback.conf|2=<br />
title Arch Linux (fallback initramfs)<br />
linux /vmlinuz-linux<br />
initrd /intel-ucode.img<br />
initrd /initramfs-linux-fallback.img<br />
options root="LABEL=''arch_os''" rw<br />
}}<br />
<br />
''systemd-boot'' will automatically check at boot time for '''Windows Boot Manager''' at the location {{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}, [[UEFI shell]] {{ic|/shellx64.efi}} and '''EFI Default Loader''' {{ic|/EFI/BOOT/bootx64.efi}}, as well as specially prepared kernel files found in {{ic|/EFI/Linux/}}. When detected, corresponding entries with titles {{ic|auto-windows}}, {{ic|auto-efi-shell}} and {{ic|auto-efi-default}}, respectively, will be generated. These entries do not require manual loader configuration. However, it does not auto-detect other EFI applications (unlike [[rEFInd]]), so for booting the Linux kernel, manual configuration entries must be created.<br />
<br />
{{Tip|<br />
* The available boot entries which have been configured can be listed with the command {{ic|bootctl list}}.<br />
* An example entry file is located at {{ic|/usr/share/systemd/bootctl/arch.conf}}.<br />
* The [[kernel parameters]] for scenarios such as [[LVM]], [[LUKS]] or [[dm-crypt]] can be found on the relevant pages.<br />
}}<br />
<br />
==== EFI Shells or other EFI applications ====<br />
<br />
In case you installed an [[UEFI shell|EFI shell]] or an [[rEFInd#Tools|other EFI application]] into the ESP, you can use the following snippets.<br />
<br />
{{Note|The file path parameter for the {{ic|efi}} line is relative to your ''esp'' mount point. If you are mounted on {{ic|/boot}} and your EFI binaries reside at {{ic|/boot/EFI/xx.efi}} and {{ic|/boot/yy.efi}}, then you would specify the parameters as {{ic|efi /EFI/xx.efi}} and {{ic|efi /yy.efi}} respectively.}}<br />
<br />
{{hc|''esp''/loader/entries/fwupd.conf|<br />
title Firmware updator<br />
efi /EFI/fwupx64.efi<br />
}}<br />
<br />
{{hc|''esp''/loader/entries/gdisk.conf|<br />
title GPT fdisk (gdisk)<br />
efi /EFI/tools/gdisk_x64.efi<br />
}}<br />
<br />
=== Booting into EFI Firmware Setup ===<br />
<br />
Most system firmware configured for EFI booting will add its own [[efibootmgr]] entries to boot into UEFI Firmware Setup.<br />
<br />
=== Support hibernation ===<br />
<br />
See [[Suspend and hibernate]].<br />
<br />
=== Kernel parameters editor with password protection ===<br />
<br />
Alternatively you can install {{AUR|systemd-boot-password}} which supports {{ic|password}} basic configuration option. Use {{ic|sbpctl generate}} to generate a value for this option.<br />
<br />
Install ''systemd-boot-password'' with the following command:<br />
<br />
# sbpctl install ''esp''<br />
<br />
With enabled editor you will be prompted for your password before you can edit kernel parameters.<br />
<br />
== Tips and tricks ==<br />
<br />
=== Keys inside the boot menu ===<br />
<br />
See {{man|7|systemd-boot|KEY BINDINGS}} for the available key bindings inside the boot menu.<br />
<br />
=== Choosing next boot ===<br />
<br />
The boot manager is integrated with the systemctl command, allowing you to choose what option you want to boot after a reboot. For example, suppose you have built a custom kernel and created an entry file {{ic|''esp''/loader/entries/arch-custom.conf}} to boot into it, you can just launch<br />
<br />
$ systemctl reboot --boot-loader-entry=arch-custom.conf<br />
<br />
and your system will reboot into that entry maintaining the default option intact for subsequent boots. To see a list of possible entries pass the {{ic|1=--boot-loader-entry=help}} option.<br />
<br />
If you want to boot into the firmware of your motherboard directly, then you can use this command:<br />
<br />
$ systemctl reboot --firmware-setup<br />
<br />
=== Unified kernel images ===<br />
<br />
[[Unified kernel image]]s in {{ic|''esp''/EFI/Linux/}} are automatically sourced by systemd-boot, and do not need an entry in {{ic|/boot/loader/entries}}.<br />
<br />
{{Tip|Files in {{ic|/boot/loader/entries}} will be booted first if no {{ic|default}} is set in {{ic|/boot/loader/loader.conf}}. Remove those entries, or set the default with the full file name, ie {{ic|1=default=archlinux-linux.efi}}}}<br />
<br />
=== Grml on ESP ===<br />
<br />
{{Note|The following instructions are not exclusive to Grml. With slight adjustments, installing other software (e.g., [https://www.system-rescue-cd.org/ SystemRescueCD]) is possible.}}<br />
<br />
{{Tip|A {{ic|PKGBUILD}} is available: {{AUR|grml-systemd-boot}}.}}<br />
<br />
[https://grml.org/ Grml] is a small live system with a collection of software for system administration and rescue.<br />
<br />
In order to install Grml on the ESP, we only need to copy the kernel {{ic|vmlinuz}}, the initramfs {{ic|initrd.img}}, and the squashed image {{ic|grml64-small.squashfs}} from the iso file to the ESP. To do so, first download [https://grml.org/ grml64-small.iso] and mount the file (the mountpoint is henceforth denoted ''mnt''); the kernel and initramfs are located in {{ic|''mnt''/boot/grml64small/}}, and the squashed image resides in {{ic|''mnt''/live/grml64-small/}}.<br />
<br />
Next, create a directory for Grml in your ESP,<br />
<br />
# mkdir -p ''esp''/grml<br />
<br />
and copy the above-mentioned files in there:<br />
<br />
# cp ''mnt''/boot/grml64small/vmlinuz ''esp''/grml<br />
# cp ''mnt''/boot/grml64small/initrd.img ''esp''/grml<br />
# cp ''mnt''/live/grml64-small/grml64-small.squashfs ''esp''/grml<br />
<br />
In the last step, create an entry for the systemd-boot loader: In {{ic|''esp''/loader/entries}} create a {{ic|grml.conf}} file with the following content:<br />
<br />
{{hc|''esp''/loader/entries/grml.conf|2=<br />
title Grml Live Linux<br />
linux /grml/vmlinuz<br />
initrd /grml/initrd.img<br />
options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0<br />
}}<br />
<br />
For an overview of the available boot options, consult the [https://git.grml.org/?p=grml-live.git;a=blob_plain;f=templates/GRML/grml-cheatcodes.txt;hb=HEAD cheatcode for Grml].<br />
<br />
=== systemd-boot on BIOS systems ===<br />
<br />
If you need a bootloader for BIOS systems that follows [https://systemd.io/BOOT_LOADER_SPECIFICATION/ The Boot Loader Specification], then systemd-boot can be pressed into service on BIOS systems. The [[Clover]] boot loader supports booting from BIOS systems and provides a simulated EFI environment.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Installing after booting in BIOS mode ===<br />
<br />
{{Note|This is not recommended.}}<br />
<br />
If booted in BIOS mode, you can still install ''systemd-boot'', however this process requires you to tell firmware to launch ''systemd-boot'''s EFI file at boot, usually via two ways:<br />
<br />
* you have a working EFI Shell somewhere else.<br />
* your firmware interface provides a way of properly setting the EFI file that needs to be loaded at boot time.<br />
<br />
If you can do it, the installation is easier: go into your EFI Shell or your firmware configuration interface and change your machine's default EFI file to {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}}.<br />
<br />
{{Note|The firmware interface of Dell Latitude series provides everything you need to setup EFI boot but the EFI Shell will not be able to write to the computer's ROM.}}<br />
<br />
=== Manual entry using efibootmgr ===<br />
<br />
If the {{ic|bootctl install}} command failed, you can create a EFI boot entry manually using {{Pkg|efibootmgr}}:<br />
<br />
# efibootmgr --create --disk /dev/sd''X'' --part ''Y'' --loader "\EFI\systemd\systemd-bootx64.efi" --label "Linux Boot Manager" --verbose<br />
<br />
where {{ic|/dev/sd''XY''}} is the [[EFI system partition]].<br />
<br />
{{Note|The path to the EFI image must use the backslash ({{ic|\}}) as the separator}}<br />
<br />
=== Manual entry using bcdedit from Windows ===<br />
<br />
If for any reason you need to create an EFI boot entry from Windows, you can use the following commands from an Administrator prompt:<br />
<br />
> bcdedit /copy {bootmgr} /d "Linux Boot Manager"<br />
> bcdedit /set {''guid''} path \EFI\systemd\systemd-bootx64.efi<br />
<br />
Replace {{ic|''guid''}} with the id returned by the first command. You can also set it as the default entry using<br />
<br />
> bcdedit /default {''guid''}<br />
<br />
=== Menu does not appear after Windows upgrade ===<br />
<br />
See [[UEFI#Windows changes boot order]].<br />
<br />
== See also ==<br />
<br />
* https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/<br />
* https://github.com/systemd/systemd/tree/master/src/boot/efi<br />
* https://bbs.archlinux.org/viewtopic.php?id=254374<br />
* https://systemd.io/BOOT_LOADER_SPECIFICATION/</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=707438User:Scrumplex2021-12-24T17:08:00Z<p>Scrumplex: </p>
<hr />
<div>===Arch Linux Involvement===<br />
* [https://wiki.archlinux.org/index.php/Special:Contributions/Scrumplex Wiki contributions]<br />
* [https://aur.archlinux.org/packages/?SeB=m&K=Scrumplex AUR packages]<br />
<br />
===Contact===<br />
* '''E-Mail:''' contact@scrumplex.net<br />
* '''IRC:''' irc://libera.chat:scrumplex<br />
* '''Matrix:''' [https://matrix.to/#/@scrumplex:duckhub.io @scrumplex:duckhub.io]<br />
* '''Website:''' [https://scrumplex.net scrumplex.net] <br />
<br />
===PGP Key===<br />
* '''Key ID:''' [https://scrumplex.rocks/cloud/scrumplex.asc C10411294912A422]<br />
* '''Fingerprint:''' [https://scrumplex.rocks/cloud/scrumplex.asc AF1F B107 E188 CB97 9A94 FD7F C104 1129 4912 A422]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=707437PipeWire2021-12-24T17:04:37Z<p>Scrumplex: Generalize Latency with Schiit DACs (personally tested with Schiit Hel 2 and Schiit Modi)</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on the {{ic|audio}} and {{ic|video}} [[user group]]s. Instead, it uses a [[Polkit]]-like security model, asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation.<br />
{{Accuracy|Does it mean that without installing further packages, pipewire does not handle audio at all? The {{Pkg|pipewire}} package contains many audio-related files, e.g. {{ic|/etc/alsa/conf.d/50-pipewire.conf}}.}}<br />
Other packages, such as {{Pkg|pipewire-alsa}}, {{Pkg|pipewire-pulse}}, and {{Pkg|pipewire-jack}} are normally not needed unless one wants to [[#Audio|use PipeWire as a PulseAudio/JACK replacement]]. Also available are {{Pkg|lib32-pipewire}} and {{Pkg|lib32-pipewire-jack}} for multilib support.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/ryuukyu/helvum|{{Pkg|helvum}}}}<br />
<br />
=== WirePlumber ===<br />
<br />
PipeWire currently uses the simple example session manager {{ic|pipewire-media-session}}, but [https://pipewire.pages.freedesktop.org/wireplumber/index.html WirePlumber] is more powerful and [https://gitlab.freedesktop.org/pipewire/media-session#pipewire-media-session recommended]. To switch to WirePlumber, [[install]] the {{Pkg|wireplumber}} package. It will replace {{Pkg|pipewire-media-session}}.<br />
<br />
== Usage ==<br />
<br />
=== Audio ===<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See the blog post [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] for more information.<br />
<br />
==== ALSA clients ====<br />
<br />
Install {{Pkg|pipewire-alsa}} (and remove {{Pkg|pulseaudio-alsa}} if it was installed) to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or execute {{ic|systemctl start --user pipewire-pulse.service}} to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} and use {{ic|pw-jack}} to launch JACK clients with the compatible libraries instead of the original {{ic|libjack*}}:<br />
<br />
pw-jack ''application''<br />
<br />
It is also possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" pw-jack ''application''<br />
<br />
Alternatively, install {{AUR|pipewire-jack-dropin}} (see [https://aur.archlinux.org/packages/pipewire-jack-dropin/#comment-838978 comments] for manual steps if it does not work) or uninstall {{AUR|jack}}/{{Pkg|jack2}} to let JACK clients load the compatible libraries automatically. Use {{ic|ldd}} to verify that the JACK application links to the correct library:<br />
<br />
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2=<br />
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)<br />
}}<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. More specifically, the media session daemon checks for {{ic|/etc/pipewire/media-session.d/with-pulseaudio}}, and enables its {{ic|bluez5}} module automatically if the file exists.<br />
<br />
The configuration is located in the {{ic|bluez-monitor}} configuration file, either {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} (for system-wide configuration) or {{ic|~/.config/pipewire/media-session.d/bluez-monitor.conf}} (for user-specific configuration). A template for the configuration file can be copied from {{ic|/usr/share/pipewire/media-session.d/bluez-monitor.conf}}.<br />
<br />
===== Automatic profile selection =====<br />
<br />
To automatically switch between HSP/HFP and A2DP profiles when an input stream is detected, set the {{ic|bluez5.autoswitch-profile}} property to {{ic|true}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
==== PipeWire native patch sets ====<br />
<br />
We have Helvum for graphical visualization and creation of connections, but the rest is not in yet. The following are bash scripts which save wiresets, load wiresets, and dewire all connections. For saving and loading, use a command-line parameter for the filename.<br />
<br />
{{hc|pw-savewires|<nowiki><br />
#!/bin/bash<br />
<br />
if [[ "$#" -ne 1 ]]; then<br />
echo<br />
echo 'usage: pw-savewires filename'<br />
echo<br />
exit 0<br />
fi<br />
<br />
rm $1 &> /dev/null<br />
while IFS= read -r line; do<br />
link_on=`echo $line | cut -f 4 -d '"'`<br />
link_op=`echo $line | cut -f 6 -d '"'`<br />
link_in=`echo $line | cut -f 8 -d '"'`<br />
link_ip=`echo $line | cut -f 10 -d '"'`<br />
echo "Saving: " "'"$link_on:$link_op"','"$link_in:$link_ip"'"<br />
echo "'"$link_on:$link_op"','"$link_in:$link_ip"'" >> $1<br />
done < <(pw-cli dump short link)<br />
</nowiki>}}<br />
<br />
{{hc|pw-loadwires|2=<br />
#!/bin/python<br />
<br />
import sys<br />
import csv<br />
import os<br />
<br />
if len(sys.argv) < 2:<br />
print('\n usage: pw-loadwires filename\n')<br />
quit()<br />
<br />
with open(sys.argv[1], newline='') as csvfile:<br />
pwwreader = csv.reader(csvfile, delimiter=',', quotechar='"')<br />
for row in pwwreader:<br />
print('Loading: ' + row[0] + ' --> ' + row[1])<br />
process = os.popen('pw-link ' + row[0] + ' ' + row[1])<br />
}}<br />
<br />
{{hc|pw-dewire|2=<br />
#!/bin/bash<br />
while read -r line; do<br />
echo 'Dewiring: ' $line '...'<br />
pw-link -d $line<br />
done < <(pw-cli dump short link {{!}} grep -Eo '^[0-9]+')<br />
}}<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed]. The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gnome}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based Wayland compositors (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
{{Note|1={{Pkg|xdg-desktop-portal}} 1.10.0 fixed a mismatch between specification and implementation of its D-Bus interface. [https://github.com/flatpak/xdg-desktop-portal/pull/609] Hence, some clients may not work with xdg-desktop-portal 1.10.0 or newer. Current progress for [https://github.com/obsproject/obs-studio/pull/5294 OBS Studio], [https://bugs.chromium.org/p/chromium/issues/detail?id=1250940 Chromium] and [https://bugzilla.mozilla.org/show_bug.cgi?id=1731495 Firefox].}}<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the URL {{ic|chrome://flags/#enable-webrtc-pipewire-capturer}}.<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
==== xdg-desktop-portal-wlr ====<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work, the {{ic|1=XDG_CURRENT_DESKTOP}} and {{ic|1=WAYLAND_DISPLAY}} environment variables have to be set in the [[Systemd/User#Environment_variables|systemd user session]]. {{ic|1=XDG_CURRENT_DESKTOP}} has to be set to the name of your compositor, e.g. {{ic|1=XDG_CURRENT_DESKTOP=sway}}. {{ic|1=WAYLAND_DISPLAY}} is set automatically by the compositor. The recommended way to bring these environment variables over to the systemd user session is to run {{ic|1=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP}} after launching the compositor, e.g. with the compositors configuration file. See [https://github.com/emersion/xdg-desktop-portal-wlr#running] and [https://github.com/emersion/xdg-desktop-portal-wlr/wiki] for more details.<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
=== Video ===<br />
<br />
{{Expansion|{{Pkg|pipewire-v4l2}}}}<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and see https://github.com/werman/noise-suppression-for-voice#pipewire. Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
=== JamesDSP ===<br />
<br />
[https://github.com/Audio4Linux/JDSP4Linux#readme JamesDSP for Linux] (available as {{AUR|jamesdsp}}) provides open-source sound effects for PipeWire and PulseAudio. It uses its own effects engine and without depending on LADSPA, Calf, etc. JamesDSP was initially published as an audio effects processor for Android devices.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, enable these two services specifying {{ic|default_null_sink}} as argument for ''pulseaudio-null-sink'' service:<br />
<br />
systemctl --user enable pulseaudio-null-sink@default_null_sink.service<br />
systemctl --user enable jack-carla-rack.service<br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
== Troubleshooting ==<br />
<br />
=== Audio ===<br />
<br />
{{Out of date|Factory config files were moved from /etc/pipewire/ to /usr/share/pipewire/. System wide config can still be done in /etc/pipewire/ and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire/. https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44}}<br />
<br />
==== Microphone is not detected by PipeWire ====<br />
<br />
PipeWires {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}} in {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, under {{ic|rules}} -> the first rule -> {{ic|actions}} -> {{ic|update-props}}:<br />
<br />
...<br />
update-props = {<br />
api.alsa.use-acp = false<br />
...<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
==== No sound after connecting to Bluetooth device ====<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
==== Low volume ====<br />
<br />
After replacing PulseAudio with Pipewire, sound may work fine, but after a reboot, the volume becomes intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
==== Increasing RLIMIT_MEMLOCK ====<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
==== Changing the sample rate ====<br />
<br />
By default PipeWire sets a global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value) you can do it by editing the line {{ic|1=default.clock.rate = 48000}} in the configuration file {{ic|/etc/pipewire/pipewire.conf}}. For example, if you want 192kHz, uncomment and change value {{ic|48000}} to {{ic|1=default.clock.rate = 192000}}.<br />
<br />
PipeWire can also change output sample rates supported by your DAC. To configure, uncomment and set the line {{ic|1=default.clock.allowed-rates = [ 48000 ]}}, for example, {{ic|[ 44100 48000 88200 96000 ]}}. The sample rate follows the sample rate of the audio stream being played when the card is idle.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm0p}} to {{ic|pcm0c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
==== Sound quality (resampling quality) ====<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to restart PipeWire (without sudo): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (never forget {{ic|pipewire-pulse.socket}} if you want your config changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
It is probably somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
==== External sound card not activated after reconnect ====<br />
<br />
Check {{ic|~/.config/pipewire-media-session/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire-media-session/}} and restart PipeWire using {{ic|systemctl --user restart pipewire.service}}.<br />
<br />
==== No Sound or pactl info shows Failure: Connection refused ====<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and restart PipeWire-Pulse using {{ic|systemctl --user restart pipewire-pulse.service}}.<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
==== Low audio quality on Bluetooth ====<br />
<br />
In case Bluetooth playback stutters, check the [[unit status]] of the {{ic|pipewire.service}} user unit for errors similar as below:<br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
If they appear, check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.codecs = [sbc]<br />
...<br />
}}<br />
<br />
Try enabling mSBC support (fixes mic on Sony 1000XM3, i.e. Headphones WH-1000XM3 and Earbuds WF-1000XM3):<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.enable-msbc = true<br />
...<br />
}}<br />
<br />
Restart PipeWire by [[restart]]ing the {{ic|pipewire.service}} user unit for the changes to take effect.<br />
<br />
==== No devices detected after PipeWire update and reboot (git / >=0.3.23) ====<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf<br />
~/.config/pipewire/pipewire.conf|output=<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}<br />
}}<br />
<br />
==== Noticeable audio delay when starting playback ====<br />
<br />
This is caused by node suspension when inactive. It can be disabled by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
==== Audio cutting out when multiple streams start playing ====<br />
<br />
This problem can typically be diagnosed by running {{ic|journalctl --user -b -u pipewire-pulse}} and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
==== Audio is distorted ====<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Uncomment the {{ic|1=default.clock.rate = 48000}} setting in {{ic|/etc/pipewire/pipewire.conf}} and reduce the value to {{ic|44100}}<br />
<br />
==== Audio problems after standby ====<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
==== High latency with USB DACs (e.g. Schiit DACs) ====<br />
<br />
Changing sample rates or formats might help reduce latency with some DACs such as Schiit Hel 2.[https://www.reddit.com/r/osugame/comments/msifdd/usb_dacamp_and_audio_lag/]<br />
Using matching rules in ''pipewire-media-session'' we can set properties for devices.[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-pipewire-media-session#matching-rules]<br />
<br />
Copy the default configuration of {{ic|alsa-monitor.conf}} for ''pipewire-media-session'' into either {{ic|/etc/pipewire/media-session.d}} or {{ic|~/.config/pipewire/media-session.d}}.<br />
Then append a new rule-block similar to the following one:<br />
<br />
{{hc|/etc/pipewire/media-session.d/alsa-monitor.conf<br />
~/.config/pipewire/media-session.d/alsa-monitor.conf|output=<br />
rules = {<br />
...<br />
{<br />
matches = [<br />
{<br />
node.name = "alsa_output.<name of node>"<br />
}<br />
]<br />
actions = {<br />
update-props = {<br />
audio.format = "S24_3LE"<br />
audio.rate = 96000<br />
# Following value should be doubled until audio doesn't cut out or other issues stop occurring<br />
api.alsa.period-size = 128<br />
}<br />
}<br />
}<br />
...<br />
}<br />
}}<br />
<br />
{{ic|alsa_output.<name of node>}} node can be obtained using {{ic|pw-top}}.<br />
<br />
Your DAC might support a different format or sample rate. You can check what your DAC supports by querying [[ALSA]]:<br />
<br />
First get the card number of your DAC:<br />
<br />
{{hc|$ aplay -l|<br />
...<br />
card 3: S2 [Schiit Hel 2], device 0: USB Audio [USB Audio]<br />
Subdevices: 0/1<br />
Subdevice #0: subdevice #0<br />
...<br />
}}<br />
<br />
So in this example it would be card 3.<br />
Get all supported sample rates and formats:<br />
<br />
{{hc|$ cat /proc/asound/cardX/streamX|<br />
...<br />
Playback:<br />
...<br />
Interface 1<br />
Altset 1<br />
Format: S16_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 16<br />
...<br />
Interface 1<br />
Altset 2<br />
Format: S24_3LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 24<br />
...<br />
Interface 1<br />
Altset 3<br />
Format: S32_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 32<br />
...<br />
...<br />
}}<br />
<br />
In this case {{ic|S16_LE, S24_3LE, S32_LE}} are the supported formats and {{ic|44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000}} are the supported sample rates across all formats.<br />
<br />
=== Video ===<br />
<br />
==== OBS (etc.) display nothing, even if they ask for a window/screen ====<br />
<br />
If you are sure that you have {{Pkg|xdg-desktop-portal}} installed as well as either {{Pkg|xdg-desktop-portal-gtk}} or {{Pkg|xdg-desktop-portal-kde}}, check the running state of the daemons.<br />
<br />
In OBS, if everything is working, you should see this in {{ic|stdout}}:<br />
<br />
...<br />
info: [pipewire] desktop selected, setting up screencast<br />
info: [pipewire] created stream 0x5632d7456850<br />
info: [pipewire] playing stream…<br />
<br />
For multi-monitor setups the {{Pkg|slurp}} package will allow to capture of all the screens.<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Systemd-boot&diff=707391Systemd-boot2021-12-24T10:06:23Z<p>Scrumplex: Add warning about Secure boot and systemd-boot-update.service</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Boot loaders]]<br />
[[de:Systemd-boot]]<br />
[[es:Systemd-boot]]<br />
[[ja:Systemd-boot]]<br />
[[pt:Systemd-boot]]<br />
[[ru:Systemd-boot]]<br />
[[zh-hans:Systemd-boot]]<br />
{{Related articles start}}<br />
{{Related|Arch boot process}}<br />
{{Related|Secure Boot}}<br />
{{Related|Unified Extensible Firmware Interface}}<br />
{{Related articles end}}<br />
<br />
'''systemd-boot''', previously called '''gummiboot''' (German for: 'rubber dinghy'), is a simple UEFI [[boot manager]] which executes configured EFI images. The default entry is selected by a configured pattern (glob) or an on-screen menu to be navigated via arrow-keys. It is included with {{pkg|systemd}}, which is installed on an Arch system by default.<br />
<br />
It is simple to configure but it can only start EFI executables such as the Linux kernel [[EFISTUB]], [[UEFI shell]], GRUB, or the Windows Boot Manager.<br />
<br />
== Installation ==<br />
<br />
=== Installing the EFI boot manager ===<br />
<br />
To install the ''systemd-boot'' EFI boot manager, first make sure the system has booted in UEFI mode and that [[Unified Extensible Firmware Interface#UEFI variables|UEFI variables]] are accessible. This can be checked by running the command {{ic|efivar --list}} or, if {{Pkg|efivar}} is not installed, by doing {{ic|ls /sys/firmware/efi/efivars}} (if the directory exists, the system is booted in UEFI mode).<br />
<br />
{{ic|''esp''}} will be used throughout this page to denote the [[EFI system partition#Typical mount points|ESP mountpoint]], e.g. {{ic|/boot}} or {{ic|/efi}}. This assumes that you have {{ic|chroot}}ed to your system's mount point.<br />
<br />
With the ESP mounted to {{ic|''esp''}}, use bootctl to install ''systemd-boot'' into the EFI system partition by running: <br />
<br />
# bootctl install<br />
<br />
This will copy the ''systemd-boot'' boot loader to the EFI partition: on a x64 architecture system {{ic|/usr/lib/systemd/boot/efi/systemd-bootx64.efi}} will be copied to {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} and {{ic|''esp''/EFI/BOOT/BOOTX64.EFI}}. It will then set ''systemd-boot'' as the default EFI application (default boot entry) loaded by the EFI Boot Manager.<br />
<br />
{{Note|Installing systemd-boot will overwrite any existing {{ic|/EFI/BOOT/BOOTX64.EFI}}, for example Microsoft's version of this file.}}<br />
<br />
Show information about the system firmware, current boot loader, boot loaders listed in EFI variables, etc:<br />
$ bootctl status<br />
To conclude the installation, [[#Configuration|configure]] ''systemd-boot''.<br />
<br />
=== Installation using XBOOTLDR ===<br />
<br />
A separate [[Partitioning#/boot|/boot partition]] of type "Linux extended boot" (XBOOTLDR) can be created to keep the kernel and initramfs separate from the EFI system partition. This is particularly helpful to [[dual boot with Windows]] with an existing EFI system partition that is too small. <br />
<br />
Create an EFI system partition as usual plus a another partition for XBOOTLDR on the same physical drive. The XBOOTLDR partition must have a partition type GUID of {{ic|bc13c2ff-59e6-4262-a352-b275fd6f7172}}.[https://systemd.io/BOOT_LOADER_SPECIFICATION] The size of the XBOOTLDR partition should be enough to accommodate all of the kernels you are going to install.<br />
<br />
{{Note|<br />
* systemd-boot does not do a file system check like it does for the ESP. Hence, it is possible to use other file systems but only if your UEFI implementation can read it during boot.<br />
* UEFI may skip loading partitions other than the ESP when a "fast boot" mode is enabled. This can lead to systemd-boot failing to find entries on the XBOOTLDR partition. You may have to disable "fast boot" for it to work.<br />
* The XBOOTLDR partition needs to be on the same physical disk as the ESP for systemd-boot to recognize it.<br />
}}<br />
<br />
During install mount the ESP to {{ic|/mnt/efi}} and the XBOOTLDR partition to {{ic|/mnt/boot}}.<br />
<br />
Once in chroot use the command:<br />
<br />
# bootctl --esp-path=/efi --boot-path=/boot install<br />
<br />
To conclude the installation, [[#Configuration|configure]] ''systemd-boot''.<br />
<br />
=== Updating the EFI boot manager ===<br />
<br />
Whenever there is a new version of ''systemd-boot'', the boot manager can be optionally reinstalled by the user. This can be performed manually, or the update can be automatically triggered using pacman hooks. The two approaches are described thereafter.<br />
<br />
{{Note|The boot manager is a standalone EFI executable and any version can be used to boot the system (partial updates do not apply, since pacman only installs the systemd-boot installer, not systemd-boot itself). However, new versions may add new features or fix bugs, so it is probably a good idea to update it anyway.}}<br />
<br />
==== Manual update ====<br />
<br />
Use ''bootctl'' to update ''systemd-boot'':<br />
<br />
# bootctl update<br />
<br />
If the location of the ESP is non-standard (i.e., it is not {{ic|/efi}}, {{ic|/boot}}, or {{ic|/boot/efi}}), you need to explicitly provide it using the {{ic|1=--esp-path}} parameter.<br />
<br />
==== Automatic update ====<br />
<br />
===== Included systemd service =====<br />
{{Warning|If you have [[Secure Boot]] enabled you need to ensure that your bootloader is signed after it was updated, as it will happen on your next boot and not after package installation.}}<br />
systemd version 250 ships with the {{ic|systemd-boot-update.service}}, which will update the bootloader the next time the system boots. To enable this feature, [[enable]] the {{ic|systemd-boot-update.service}} service.<br />
<br />
You might still prefer using a [[#Pacman hook|Pacman hook]] instead, as that will update the bootloader immediately after the {{Pkg|systemd}} package has been upgraded.<br />
<br />
===== Pacman hook =====<br />
<br />
The package {{AUR|systemd-boot-pacman-hook}} provides a [[Pacman hook]] to automate the update process. [[Install|Installing]] the package will add a hook which will be executed every time the {{Pkg|systemd}} package is upgraded. Alternatively, to replicate what the ''systemd-boot-pacman-hook'' package does without installing it, place the following pacman hook in the {{ic|/etc/pacman.d/hooks/}} directory:<br />
<br />
{{hc|/etc/pacman.d/hooks/100-systemd-boot.hook|2=<br />
[Trigger]<br />
Type = Package<br />
Operation = Upgrade<br />
Target = systemd<br />
<br />
[Action]<br />
Description = Updating systemd-boot<br />
When = PostTransaction<br />
Exec = /usr/bin/bootctl update<br />
}}<br />
<br />
If you have [[Secure Boot]] enabled, you may want to install a pacman hook to automatically re-sign the kernel and systemd-boot when the former is updated.<br />
<br />
{{hc|/etc/pacman.d/hooks/99-secureboot.hook|2=<br />
[Trigger]<br />
Operation = Install<br />
Operation = Upgrade<br />
Type = Package<br />
Target = linux<br />
Target = systemd<br />
<br />
[Action]<br />
Description = Signing Kernel for SecureBoot<br />
When = PostTransaction<br />
Exec = /usr/bin/find /boot -type f ( -name vmlinuz-* -o -name systemd* ) -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null {{!}} /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key db.key --cert db.crt --output "$1" "$1"; fi' _ {} ;<br />
Depends = sbsigntools<br />
Depends = findutils<br />
Depends = grep<br />
}}<br />
<br />
The {{ic|Target}} needs to be duplicated each time you want to add a new package. With respect to the {{ic|find}} statement, since we had a condition with the filenames and ALPM hooks are being split on spaces, we had to surround the whole statement by quotes in order for the hook to be parsed properly. Since systemd-boot is located in sub-directories, the depth needed to be adjusted as well so that we removed the {{ic|-maxdepth}} argument. In order to avoid hassle, if you are unsure, try to reinstall the package you want to test to see if the hook and signing part are processed successfully. See [[Pacman#Hooks]] or {{man|5|alpm-hooks}} for more information.<br />
<br />
== Configuration ==<br />
<br />
=== Loader configuration ===<br />
<br />
The loader configuration is stored in the file {{ic|''esp''/loader/loader.conf}}. See {{man|5|loader.conf|OPTIONS}} for details.<br />
<br />
A loader configuration example is provided below:<br />
<br />
{{hc|''esp''/loader/loader.conf|<br />
default arch.conf<br />
timeout 4<br />
console-mode max<br />
editor no<br />
}}<br />
<br />
{{Tip|<br />
* systemd-boot does not accept tabs for indentation, use spaces instead.<br />
* {{ic|default}} and {{ic|timeout}} can be changed in the boot menu itself and changes will be stored as EFI variables {{ic|LoaderEntryDefault}} and {{ic|LoaderConfigTimeout}}, overriding these options. <br />
* {{ic|bootctl set-default ""}} can be used to clear the EFI variable overriding the {{ic|default}} option.<br />
* A basic loader configuration file is located at {{ic|/usr/share/systemd/bootctl/loader.conf}}.<br />
}}<br />
<br />
=== Adding loaders ===<br />
<br />
''systemd-boot'' will search for boot menu items in {{ic|''esp''/loader/entries/*.conf}} and additionally in {{ic|''boot''/loader/entries/*.conf}} if using [[#Installation using XBOOTLDR|XBOOTLDR]]. Note that entries in {{ic|''esp''}} can only use files (e.g. kernels, initramfs, images, etc.) in {{ic|''esp''}}. Similarly, entries in {{ic|''boot''}} can only use files in {{ic|''boot''}}.<br />
<br />
{{Remove|Duplicates https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-1-boot-loader-specification-entries.|section=Potential removal of "Loader configuration" section}}<br />
<br />
The possible options are:<br />
<br />
* {{ic|title}} – operating system name. '''Required.'''<br />
* {{ic|version}} – kernel version, shown only when multiple entries with same title exist. Optional.<br />
* {{ic|machine-id}} – machine identifier from {{ic|/etc/machine-id}}, shown only when multiple entries with same title and version exist. Optional.<br />
* {{ic|efi}} – EFI program to start, relative to your ESP ({{ic|''esp''}}); e.g. {{ic|/vmlinuz-linux}}. '''Either''' this parameter '''or''' {{ic|linux}} (see below) '''is required'''.<br />
* {{ic|options}} – space-separated command line options to pass to the EFI program or [[kernel parameters]]. Optional, but you will need at least {{ic|1=root=''dev''}} if booting Linux. This parameter can be omitted if the root partition is assigned the correct Root Partition Type GUID as defined in [https://systemd.io/DISCOVERABLE_PARTITIONS/ Discoverable Partitions Specification] and if the {{ic|systemd}} [[mkinitcpio]] hook is present.<br />
<br />
For Linux boot, you can also use {{ic|linux}} instead of {{ic|efi}}. Or {{ic|initrd}} in addition to {{ic|options}}. The syntax is:<br />
<br />
* {{ic|linux}} and {{ic|initrd}} followed by the relative path of the corresponding files in the ESP; e.g. {{ic|/vmlinuz-linux}}; this will be automatically translated into {{ic|efi ''path''}} and {{ic|1=options initrd=''path''}} – this syntax is only supported for convenience and has no differences in function.<br />
<br />
{{Note|If {{ic|options}} is present in a boot entry and [[Secure Boot]] is disabled, the value of {{ic|options}} will override any {{ic|.cmdline}} string embedded in the EFI image that is specified by {{ic|efi}} or {{ic|linux}} (see [[#Preparing a unified kernel image]]). With Secure Boot, however, {{ic|options}} (and any edits made to the kernel command line in the bootloader UI) will be ignored, and only the embedded {{ic|.cmdline}} will be used. }}<br />
<br />
An example of loader files launching Arch from a volume [[Persistent block device naming#by-label|labeled]] {{ic|''arch_os''}} and loading Intel CPU [[microcode]] is:<br />
<br />
{{hc|''esp''/loader/entries/arch.conf|2=<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
initrd /intel-ucode.img<br />
initrd /initramfs-linux.img<br />
options root="LABEL=''arch_os''" rw<br />
}}<br />
<br />
{{hc|''esp''/loader/entries/arch-fallback.conf|2=<br />
title Arch Linux (fallback initramfs)<br />
linux /vmlinuz-linux<br />
initrd /intel-ucode.img<br />
initrd /initramfs-linux-fallback.img<br />
options root="LABEL=''arch_os''" rw<br />
}}<br />
<br />
''systemd-boot'' will automatically check at boot time for '''Windows Boot Manager''' at the location {{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}, [[UEFI shell]] {{ic|/shellx64.efi}} and '''EFI Default Loader''' {{ic|/EFI/BOOT/bootx64.efi}}, as well as specially prepared kernel files found in {{ic|/EFI/Linux/}}. When detected, corresponding entries with titles {{ic|auto-windows}}, {{ic|auto-efi-shell}} and {{ic|auto-efi-default}}, respectively, will be generated. These entries do not require manual loader configuration. However, it does not auto-detect other EFI applications (unlike [[rEFInd]]), so for booting the Linux kernel, manual configuration entries must be created.<br />
<br />
{{Tip|<br />
* The available boot entries which have been configured can be listed with the command {{ic|bootctl list}}.<br />
* An example entry file is located at {{ic|/usr/share/systemd/bootctl/arch.conf}}.<br />
* The [[kernel parameters]] for scenarios such as [[LVM]], [[LUKS]] or [[dm-crypt]] can be found on the relevant pages.<br />
}}<br />
<br />
==== EFI Shells or other EFI applications ====<br />
<br />
In case you installed [[UEFI shell|EFI shells]] and [[rEFInd#Tools|other EFI application]] into the ESP, you can use the following snippets.<br />
<br />
{{Note|The file path parameter for the {{ic|efi}} line is relative to your ''esp'' mount point. If you are mounted on {{ic|/boot}} and your EFI binaries reside at {{ic|/boot/EFI/xx.efi}} and {{ic|/boot/yy.efi}}, then you would specify the parameters as {{ic|efi /EFI/xx.efi}} and {{ic|efi /yy.efi}} respectively.}}<br />
<br />
{{hc|''esp''/loader/entries/fwupd.conf|<br />
title Firmware updator<br />
efi /EFI/fwupx64.efi<br />
}}<br />
<br />
{{hc|''esp''/loader/entries/gdisk.conf|<br />
title GPT fdisk (gdisk)<br />
efi /EFI/tools/gdisk_x64.efi<br />
}}<br />
<br />
=== Booting into EFI Firmware Setup ===<br />
<br />
Most system firmware configured for EFI booting will add its own [[efibootmgr]] entries to boot into UEFI Firmware Setup.<br />
<br />
=== Support hibernation ===<br />
<br />
See [[Suspend and hibernate]].<br />
<br />
=== Kernel parameters editor with password protection ===<br />
<br />
Alternatively you can install {{AUR|systemd-boot-password}} which supports {{ic|password}} basic configuration option. Use {{ic|sbpctl generate}} to generate a value for this option.<br />
<br />
Install ''systemd-boot-password'' with the following command:<br />
<br />
# sbpctl install ''esp''<br />
<br />
With enabled editor you will be prompted for your password before you can edit kernel parameters.<br />
<br />
== Tips and tricks ==<br />
<br />
=== Keys inside the boot menu ===<br />
<br />
See {{man|7|systemd-boot|KEY BINDINGS}} for the available key bindings inside the boot menu.<br />
<br />
=== Choosing next boot ===<br />
<br />
The boot manager is integrated with the systemctl command, allowing you to choose what option you want to boot after a reboot. For example, suppose you have built a custom kernel and created an entry file {{ic|''esp''/loader/entries/arch-custom.conf}} to boot into it, you can just launch<br />
<br />
$ systemctl reboot --boot-loader-entry=arch-custom.conf<br />
<br />
and your system will reboot into that entry maintaining the default option intact for subsequent boots. To see a list of possible entries pass the {{ic|1=--boot-loader-entry=help}} option.<br />
<br />
If you want to boot into the firmware of your motherboard directly, then you can use this command:<br />
<br />
$ systemctl reboot --firmware-setup<br />
<br />
=== Unified kernel images ===<br />
<br />
[[Unified kernel image]]s in {{ic|''esp''/EFI/Linux/}} are automatically sourced by systemd-boot, and do not need an entry in {{ic|/boot/loader/entries}}.<br />
<br />
{{Tip|Files in {{ic|/boot/loader/entries}} will be booted first if no {{ic|default}} is set in {{ic|/boot/loader/loader.conf}}. Remove those entries, or set the default with the full file name, ie {{ic|1=default=archlinux-linux.efi}}}}<br />
<br />
=== Grml on ESP ===<br />
<br />
{{Note|The following instructions are not exclusive to Grml. With slight adjustments, installing other software (e.g., [https://www.system-rescue-cd.org/ SystemRescueCD]) is possible.}}<br />
<br />
{{Tip|A {{ic|PKGBUILD}} is available: {{AUR|grml-systemd-boot}}.}}<br />
<br />
[https://grml.org/ Grml] is a small live system with a collection of software for system administration and rescue.<br />
<br />
In order to install Grml on the ESP, we only need to copy the kernel {{ic|vmlinuz}}, the initramfs {{ic|initrd.img}}, and the squashed image {{ic|grml64-small.squashfs}} from the iso file to the ESP. To do so, first download [https://grml.org/ grml64-small.iso] and mount the file (the mountpoint is henceforth denoted ''mnt''); the kernel and initramfs are located in {{ic|''mnt''/boot/grml64small/}}, and the squashed image resides in {{ic|''mnt''/live/grml64-small/}}.<br />
<br />
Next, create a directory for Grml in your ESP,<br />
<br />
# mkdir -p ''esp''/grml<br />
<br />
and copy the above-mentioned files in there:<br />
<br />
# cp ''mnt''/boot/grml64small/vmlinuz ''esp''/grml<br />
# cp ''mnt''/boot/grml64small/initrd.img ''esp''/grml<br />
# cp ''mnt''/live/grml64-small/grml64-small.squashfs ''esp''/grml<br />
<br />
In the last step, create an entry for the systemd-boot loader: In {{ic|''esp''/loader/entries}} create a {{ic|grml.conf}} file with the following content:<br />
<br />
{{hc|''esp''/loader/entries/grml.conf|2=<br />
title Grml Live Linux<br />
linux /grml/vmlinuz<br />
initrd /grml/initrd.img<br />
options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0<br />
}}<br />
<br />
For an overview of the available boot options, consult the [https://git.grml.org/?p=grml-live.git;a=blob_plain;f=templates/GRML/grml-cheatcodes.txt;hb=HEAD cheatcode for Grml].<br />
<br />
=== systemd-boot on BIOS systems ===<br />
<br />
If you need a bootloader for BIOS systems that follows [https://systemd.io/BOOT_LOADER_SPECIFICATION/ The Boot Loader Specification], then systemd-boot can be pressed into service on BIOS systems. The [[Clover]] boot loader supports booting from BIOS systems and provides a simulated EFI environment.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Installing after booting in BIOS mode ===<br />
<br />
{{Note|This is not recommended.}}<br />
<br />
If booted in BIOS mode, you can still install ''systemd-boot'', however this process requires you to tell firmware to launch ''systemd-boot'''s EFI file at boot, usually via two ways:<br />
<br />
* you have a working EFI Shell somewhere else.<br />
* your firmware interface provides a way of properly setting the EFI file that needs to be loaded at boot time.<br />
<br />
If you can do it, the installation is easier: go into your EFI Shell or your firmware configuration interface and change your machine's default EFI file to {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}}.<br />
<br />
{{Note|The firmware interface of Dell Latitude series provides everything you need to setup EFI boot but the EFI Shell will not be able to write to the computer's ROM.}}<br />
<br />
=== Manual entry using efibootmgr ===<br />
<br />
If the {{ic|bootctl install}} command failed, you can create a EFI boot entry manually using {{Pkg|efibootmgr}}:<br />
<br />
# efibootmgr --create --disk /dev/sd''X'' --part ''Y'' --loader "\EFI\systemd\systemd-bootx64.efi" --label "Linux Boot Manager" --verbose<br />
<br />
where {{ic|/dev/sd''XY''}} is the [[EFI system partition]].<br />
<br />
{{Note|The path to the EFI image must use the backslash ({{ic|\}}) as the separator}}<br />
<br />
=== Manual entry using bcdedit from Windows ===<br />
<br />
If for any reason you need to create an EFI boot entry from Windows, you can use the following commands from an Administrator prompt:<br />
<br />
> bcdedit /copy {bootmgr} /d "Linux Boot Manager"<br />
> bcdedit /set {''guid''} path \EFI\systemd\systemd-bootx64.efi<br />
<br />
Replace {{ic|''guid''}} with the id returned by the first command. You can also set it as the default entry using<br />
<br />
> bcdedit /default {''guid''}<br />
<br />
=== Menu does not appear after Windows upgrade ===<br />
<br />
See [[UEFI#Windows changes boot order]].<br />
<br />
== See also ==<br />
<br />
* https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/<br />
* https://github.com/systemd/systemd/tree/master/src/boot/efi<br />
* https://bbs.archlinux.org/viewtopic.php?id=254374<br />
* https://systemd.io/BOOT_LOADER_SPECIFICATION/</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Systemd-boot&diff=707390Systemd-boot2021-12-24T10:02:14Z<p>Scrumplex: Add new method for automatic update: systemd-boot-update.service from systemd 250</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Boot loaders]]<br />
[[de:Systemd-boot]]<br />
[[es:Systemd-boot]]<br />
[[ja:Systemd-boot]]<br />
[[pt:Systemd-boot]]<br />
[[ru:Systemd-boot]]<br />
[[zh-hans:Systemd-boot]]<br />
{{Related articles start}}<br />
{{Related|Arch boot process}}<br />
{{Related|Secure Boot}}<br />
{{Related|Unified Extensible Firmware Interface}}<br />
{{Related articles end}}<br />
<br />
'''systemd-boot''', previously called '''gummiboot''' (German for: 'rubber dinghy'), is a simple UEFI [[boot manager]] which executes configured EFI images. The default entry is selected by a configured pattern (glob) or an on-screen menu to be navigated via arrow-keys. It is included with {{pkg|systemd}}, which is installed on an Arch system by default.<br />
<br />
It is simple to configure but it can only start EFI executables such as the Linux kernel [[EFISTUB]], [[UEFI shell]], GRUB, or the Windows Boot Manager.<br />
<br />
== Installation ==<br />
<br />
=== Installing the EFI boot manager ===<br />
<br />
To install the ''systemd-boot'' EFI boot manager, first make sure the system has booted in UEFI mode and that [[Unified Extensible Firmware Interface#UEFI variables|UEFI variables]] are accessible. This can be checked by running the command {{ic|efivar --list}} or, if {{Pkg|efivar}} is not installed, by doing {{ic|ls /sys/firmware/efi/efivars}} (if the directory exists, the system is booted in UEFI mode).<br />
<br />
{{ic|''esp''}} will be used throughout this page to denote the [[EFI system partition#Typical mount points|ESP mountpoint]], e.g. {{ic|/boot}} or {{ic|/efi}}. This assumes that you have {{ic|chroot}}ed to your system's mount point.<br />
<br />
With the ESP mounted to {{ic|''esp''}}, use bootctl to install ''systemd-boot'' into the EFI system partition by running: <br />
<br />
# bootctl install<br />
<br />
This will copy the ''systemd-boot'' boot loader to the EFI partition: on a x64 architecture system {{ic|/usr/lib/systemd/boot/efi/systemd-bootx64.efi}} will be copied to {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} and {{ic|''esp''/EFI/BOOT/BOOTX64.EFI}}. It will then set ''systemd-boot'' as the default EFI application (default boot entry) loaded by the EFI Boot Manager.<br />
<br />
{{Note|Installing systemd-boot will overwrite any existing {{ic|/EFI/BOOT/BOOTX64.EFI}}, for example Microsoft's version of this file.}}<br />
<br />
Show information about the system firmware, current boot loader, boot loaders listed in EFI variables, etc:<br />
$ bootctl status<br />
To conclude the installation, [[#Configuration|configure]] ''systemd-boot''.<br />
<br />
=== Installation using XBOOTLDR ===<br />
<br />
A separate [[Partitioning#/boot|/boot partition]] of type "Linux extended boot" (XBOOTLDR) can be created to keep the kernel and initramfs separate from the EFI system partition. This is particularly helpful to [[dual boot with Windows]] with an existing EFI system partition that is too small. <br />
<br />
Create an EFI system partition as usual plus a another partition for XBOOTLDR on the same physical drive. The XBOOTLDR partition must have a partition type GUID of {{ic|bc13c2ff-59e6-4262-a352-b275fd6f7172}}.[https://systemd.io/BOOT_LOADER_SPECIFICATION] The size of the XBOOTLDR partition should be enough to accommodate all of the kernels you are going to install.<br />
<br />
{{Note|<br />
* systemd-boot does not do a file system check like it does for the ESP. Hence, it is possible to use other file systems but only if your UEFI implementation can read it during boot.<br />
* UEFI may skip loading partitions other than the ESP when a "fast boot" mode is enabled. This can lead to systemd-boot failing to find entries on the XBOOTLDR partition. You may have to disable "fast boot" for it to work.<br />
* The XBOOTLDR partition needs to be on the same physical disk as the ESP for systemd-boot to recognize it.<br />
}}<br />
<br />
During install mount the ESP to {{ic|/mnt/efi}} and the XBOOTLDR partition to {{ic|/mnt/boot}}.<br />
<br />
Once in chroot use the command:<br />
<br />
# bootctl --esp-path=/efi --boot-path=/boot install<br />
<br />
To conclude the installation, [[#Configuration|configure]] ''systemd-boot''.<br />
<br />
=== Updating the EFI boot manager ===<br />
<br />
Whenever there is a new version of ''systemd-boot'', the boot manager can be optionally reinstalled by the user. This can be performed manually, or the update can be automatically triggered using pacman hooks. The two approaches are described thereafter.<br />
<br />
{{Note|The boot manager is a standalone EFI executable and any version can be used to boot the system (partial updates do not apply, since pacman only installs the systemd-boot installer, not systemd-boot itself). However, new versions may add new features or fix bugs, so it is probably a good idea to update it anyway.}}<br />
<br />
==== Manual update ====<br />
<br />
Use ''bootctl'' to update ''systemd-boot'':<br />
<br />
# bootctl update<br />
<br />
If the location of the ESP is non-standard (i.e., it is not {{ic|/efi}}, {{ic|/boot}}, or {{ic|/boot/efi}}), you need to explicitly provide it using the {{ic|1=--esp-path}} parameter.<br />
<br />
==== Automatic update ====<br />
<br />
===== Included systemd service =====<br />
<br />
systemd version 250 ships with the {{ic|systemd-boot-update.service}}, which will update the bootloader the next time the system boots. To enable this feature, [[enable]] the {{ic|systemd-boot-update.service}} service.<br />
<br />
You might still prefer using a [[#Pacman hook|Pacman hook]] instead, as that will update the bootloader immediately after the {{Pkg|systemd}} package has been upgraded.<br />
<br />
===== Pacman hook =====<br />
<br />
The package {{AUR|systemd-boot-pacman-hook}} provides a [[Pacman hook]] to automate the update process. [[Install|Installing]] the package will add a hook which will be executed every time the {{Pkg|systemd}} package is upgraded. Alternatively, to replicate what the ''systemd-boot-pacman-hook'' package does without installing it, place the following pacman hook in the {{ic|/etc/pacman.d/hooks/}} directory:<br />
<br />
{{hc|/etc/pacman.d/hooks/100-systemd-boot.hook|2=<br />
[Trigger]<br />
Type = Package<br />
Operation = Upgrade<br />
Target = systemd<br />
<br />
[Action]<br />
Description = Updating systemd-boot<br />
When = PostTransaction<br />
Exec = /usr/bin/bootctl update<br />
}}<br />
<br />
If you have [[Secure Boot]] enabled, you may want to install a pacman hook to automatically re-sign the kernel and systemd-boot when the former is updated.<br />
<br />
{{hc|/etc/pacman.d/hooks/99-secureboot.hook|2=<br />
[Trigger]<br />
Operation = Install<br />
Operation = Upgrade<br />
Type = Package<br />
Target = linux<br />
Target = systemd<br />
<br />
[Action]<br />
Description = Signing Kernel for SecureBoot<br />
When = PostTransaction<br />
Exec = /usr/bin/find /boot -type f ( -name vmlinuz-* -o -name systemd* ) -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null {{!}} /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key db.key --cert db.crt --output "$1" "$1"; fi' _ {} ;<br />
Depends = sbsigntools<br />
Depends = findutils<br />
Depends = grep<br />
}}<br />
<br />
The {{ic|Target}} needs to be duplicated each time you want to add a new package. With respect to the {{ic|find}} statement, since we had a condition with the filenames and ALPM hooks are being split on spaces, we had to surround the whole statement by quotes in order for the hook to be parsed properly. Since systemd-boot is located in sub-directories, the depth needed to be adjusted as well so that we removed the {{ic|-maxdepth}} argument. In order to avoid hassle, if you are unsure, try to reinstall the package you want to test to see if the hook and signing part are processed successfully. See [[Pacman#Hooks]] or {{man|5|alpm-hooks}} for more information.<br />
<br />
== Configuration ==<br />
<br />
=== Loader configuration ===<br />
<br />
The loader configuration is stored in the file {{ic|''esp''/loader/loader.conf}}. See {{man|5|loader.conf|OPTIONS}} for details.<br />
<br />
A loader configuration example is provided below:<br />
<br />
{{hc|''esp''/loader/loader.conf|<br />
default arch.conf<br />
timeout 4<br />
console-mode max<br />
editor no<br />
}}<br />
<br />
{{Tip|<br />
* systemd-boot does not accept tabs for indentation, use spaces instead.<br />
* {{ic|default}} and {{ic|timeout}} can be changed in the boot menu itself and changes will be stored as EFI variables {{ic|LoaderEntryDefault}} and {{ic|LoaderConfigTimeout}}, overriding these options. <br />
* {{ic|bootctl set-default ""}} can be used to clear the EFI variable overriding the {{ic|default}} option.<br />
* A basic loader configuration file is located at {{ic|/usr/share/systemd/bootctl/loader.conf}}.<br />
}}<br />
<br />
=== Adding loaders ===<br />
<br />
''systemd-boot'' will search for boot menu items in {{ic|''esp''/loader/entries/*.conf}} and additionally in {{ic|''boot''/loader/entries/*.conf}} if using [[#Installation using XBOOTLDR|XBOOTLDR]]. Note that entries in {{ic|''esp''}} can only use files (e.g. kernels, initramfs, images, etc.) in {{ic|''esp''}}. Similarly, entries in {{ic|''boot''}} can only use files in {{ic|''boot''}}.<br />
<br />
{{Remove|Duplicates https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-1-boot-loader-specification-entries.|section=Potential removal of "Loader configuration" section}}<br />
<br />
The possible options are:<br />
<br />
* {{ic|title}} – operating system name. '''Required.'''<br />
* {{ic|version}} – kernel version, shown only when multiple entries with same title exist. Optional.<br />
* {{ic|machine-id}} – machine identifier from {{ic|/etc/machine-id}}, shown only when multiple entries with same title and version exist. Optional.<br />
* {{ic|efi}} – EFI program to start, relative to your ESP ({{ic|''esp''}}); e.g. {{ic|/vmlinuz-linux}}. '''Either''' this parameter '''or''' {{ic|linux}} (see below) '''is required'''.<br />
* {{ic|options}} – space-separated command line options to pass to the EFI program or [[kernel parameters]]. Optional, but you will need at least {{ic|1=root=''dev''}} if booting Linux. This parameter can be omitted if the root partition is assigned the correct Root Partition Type GUID as defined in [https://systemd.io/DISCOVERABLE_PARTITIONS/ Discoverable Partitions Specification] and if the {{ic|systemd}} [[mkinitcpio]] hook is present.<br />
<br />
For Linux boot, you can also use {{ic|linux}} instead of {{ic|efi}}. Or {{ic|initrd}} in addition to {{ic|options}}. The syntax is:<br />
<br />
* {{ic|linux}} and {{ic|initrd}} followed by the relative path of the corresponding files in the ESP; e.g. {{ic|/vmlinuz-linux}}; this will be automatically translated into {{ic|efi ''path''}} and {{ic|1=options initrd=''path''}} – this syntax is only supported for convenience and has no differences in function.<br />
<br />
{{Note|If {{ic|options}} is present in a boot entry and [[Secure Boot]] is disabled, the value of {{ic|options}} will override any {{ic|.cmdline}} string embedded in the EFI image that is specified by {{ic|efi}} or {{ic|linux}} (see [[#Preparing a unified kernel image]]). With Secure Boot, however, {{ic|options}} (and any edits made to the kernel command line in the bootloader UI) will be ignored, and only the embedded {{ic|.cmdline}} will be used. }}<br />
<br />
An example of loader files launching Arch from a volume [[Persistent block device naming#by-label|labeled]] {{ic|''arch_os''}} and loading Intel CPU [[microcode]] is:<br />
<br />
{{hc|''esp''/loader/entries/arch.conf|2=<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
initrd /intel-ucode.img<br />
initrd /initramfs-linux.img<br />
options root="LABEL=''arch_os''" rw<br />
}}<br />
<br />
{{hc|''esp''/loader/entries/arch-fallback.conf|2=<br />
title Arch Linux (fallback initramfs)<br />
linux /vmlinuz-linux<br />
initrd /intel-ucode.img<br />
initrd /initramfs-linux-fallback.img<br />
options root="LABEL=''arch_os''" rw<br />
}}<br />
<br />
''systemd-boot'' will automatically check at boot time for '''Windows Boot Manager''' at the location {{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}, [[UEFI shell]] {{ic|/shellx64.efi}} and '''EFI Default Loader''' {{ic|/EFI/BOOT/bootx64.efi}}, as well as specially prepared kernel files found in {{ic|/EFI/Linux/}}. When detected, corresponding entries with titles {{ic|auto-windows}}, {{ic|auto-efi-shell}} and {{ic|auto-efi-default}}, respectively, will be generated. These entries do not require manual loader configuration. However, it does not auto-detect other EFI applications (unlike [[rEFInd]]), so for booting the Linux kernel, manual configuration entries must be created.<br />
<br />
{{Tip|<br />
* The available boot entries which have been configured can be listed with the command {{ic|bootctl list}}.<br />
* An example entry file is located at {{ic|/usr/share/systemd/bootctl/arch.conf}}.<br />
* The [[kernel parameters]] for scenarios such as [[LVM]], [[LUKS]] or [[dm-crypt]] can be found on the relevant pages.<br />
}}<br />
<br />
==== EFI Shells or other EFI applications ====<br />
<br />
In case you installed [[UEFI shell|EFI shells]] and [[rEFInd#Tools|other EFI application]] into the ESP, you can use the following snippets.<br />
<br />
{{Note|The file path parameter for the {{ic|efi}} line is relative to your ''esp'' mount point. If you are mounted on {{ic|/boot}} and your EFI binaries reside at {{ic|/boot/EFI/xx.efi}} and {{ic|/boot/yy.efi}}, then you would specify the parameters as {{ic|efi /EFI/xx.efi}} and {{ic|efi /yy.efi}} respectively.}}<br />
<br />
{{hc|''esp''/loader/entries/fwupd.conf|<br />
title Firmware updator<br />
efi /EFI/fwupx64.efi<br />
}}<br />
<br />
{{hc|''esp''/loader/entries/gdisk.conf|<br />
title GPT fdisk (gdisk)<br />
efi /EFI/tools/gdisk_x64.efi<br />
}}<br />
<br />
=== Booting into EFI Firmware Setup ===<br />
<br />
Most system firmware configured for EFI booting will add its own [[efibootmgr]] entries to boot into UEFI Firmware Setup.<br />
<br />
=== Support hibernation ===<br />
<br />
See [[Suspend and hibernate]].<br />
<br />
=== Kernel parameters editor with password protection ===<br />
<br />
Alternatively you can install {{AUR|systemd-boot-password}} which supports {{ic|password}} basic configuration option. Use {{ic|sbpctl generate}} to generate a value for this option.<br />
<br />
Install ''systemd-boot-password'' with the following command:<br />
<br />
# sbpctl install ''esp''<br />
<br />
With enabled editor you will be prompted for your password before you can edit kernel parameters.<br />
<br />
== Tips and tricks ==<br />
<br />
=== Keys inside the boot menu ===<br />
<br />
See {{man|7|systemd-boot|KEY BINDINGS}} for the available key bindings inside the boot menu.<br />
<br />
=== Choosing next boot ===<br />
<br />
The boot manager is integrated with the systemctl command, allowing you to choose what option you want to boot after a reboot. For example, suppose you have built a custom kernel and created an entry file {{ic|''esp''/loader/entries/arch-custom.conf}} to boot into it, you can just launch<br />
<br />
$ systemctl reboot --boot-loader-entry=arch-custom.conf<br />
<br />
and your system will reboot into that entry maintaining the default option intact for subsequent boots. To see a list of possible entries pass the {{ic|1=--boot-loader-entry=help}} option.<br />
<br />
If you want to boot into the firmware of your motherboard directly, then you can use this command:<br />
<br />
$ systemctl reboot --firmware-setup<br />
<br />
=== Unified kernel images ===<br />
<br />
[[Unified kernel image]]s in {{ic|''esp''/EFI/Linux/}} are automatically sourced by systemd-boot, and do not need an entry in {{ic|/boot/loader/entries}}.<br />
<br />
{{Tip|Files in {{ic|/boot/loader/entries}} will be booted first if no {{ic|default}} is set in {{ic|/boot/loader/loader.conf}}. Remove those entries, or set the default with the full file name, ie {{ic|1=default=archlinux-linux.efi}}}}<br />
<br />
=== Grml on ESP ===<br />
<br />
{{Note|The following instructions are not exclusive to Grml. With slight adjustments, installing other software (e.g., [https://www.system-rescue-cd.org/ SystemRescueCD]) is possible.}}<br />
<br />
{{Tip|A {{ic|PKGBUILD}} is available: {{AUR|grml-systemd-boot}}.}}<br />
<br />
[https://grml.org/ Grml] is a small live system with a collection of software for system administration and rescue.<br />
<br />
In order to install Grml on the ESP, we only need to copy the kernel {{ic|vmlinuz}}, the initramfs {{ic|initrd.img}}, and the squashed image {{ic|grml64-small.squashfs}} from the iso file to the ESP. To do so, first download [https://grml.org/ grml64-small.iso] and mount the file (the mountpoint is henceforth denoted ''mnt''); the kernel and initramfs are located in {{ic|''mnt''/boot/grml64small/}}, and the squashed image resides in {{ic|''mnt''/live/grml64-small/}}.<br />
<br />
Next, create a directory for Grml in your ESP,<br />
<br />
# mkdir -p ''esp''/grml<br />
<br />
and copy the above-mentioned files in there:<br />
<br />
# cp ''mnt''/boot/grml64small/vmlinuz ''esp''/grml<br />
# cp ''mnt''/boot/grml64small/initrd.img ''esp''/grml<br />
# cp ''mnt''/live/grml64-small/grml64-small.squashfs ''esp''/grml<br />
<br />
In the last step, create an entry for the systemd-boot loader: In {{ic|''esp''/loader/entries}} create a {{ic|grml.conf}} file with the following content:<br />
<br />
{{hc|''esp''/loader/entries/grml.conf|2=<br />
title Grml Live Linux<br />
linux /grml/vmlinuz<br />
initrd /grml/initrd.img<br />
options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0<br />
}}<br />
<br />
For an overview of the available boot options, consult the [https://git.grml.org/?p=grml-live.git;a=blob_plain;f=templates/GRML/grml-cheatcodes.txt;hb=HEAD cheatcode for Grml].<br />
<br />
=== systemd-boot on BIOS systems ===<br />
<br />
If you need a bootloader for BIOS systems that follows [https://systemd.io/BOOT_LOADER_SPECIFICATION/ The Boot Loader Specification], then systemd-boot can be pressed into service on BIOS systems. The [[Clover]] boot loader supports booting from BIOS systems and provides a simulated EFI environment.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Installing after booting in BIOS mode ===<br />
<br />
{{Note|This is not recommended.}}<br />
<br />
If booted in BIOS mode, you can still install ''systemd-boot'', however this process requires you to tell firmware to launch ''systemd-boot'''s EFI file at boot, usually via two ways:<br />
<br />
* you have a working EFI Shell somewhere else.<br />
* your firmware interface provides a way of properly setting the EFI file that needs to be loaded at boot time.<br />
<br />
If you can do it, the installation is easier: go into your EFI Shell or your firmware configuration interface and change your machine's default EFI file to {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}}.<br />
<br />
{{Note|The firmware interface of Dell Latitude series provides everything you need to setup EFI boot but the EFI Shell will not be able to write to the computer's ROM.}}<br />
<br />
=== Manual entry using efibootmgr ===<br />
<br />
If the {{ic|bootctl install}} command failed, you can create a EFI boot entry manually using {{Pkg|efibootmgr}}:<br />
<br />
# efibootmgr --create --disk /dev/sd''X'' --part ''Y'' --loader "\EFI\systemd\systemd-bootx64.efi" --label "Linux Boot Manager" --verbose<br />
<br />
where {{ic|/dev/sd''XY''}} is the [[EFI system partition]].<br />
<br />
{{Note|The path to the EFI image must use the backslash ({{ic|\}}) as the separator}}<br />
<br />
=== Manual entry using bcdedit from Windows ===<br />
<br />
If for any reason you need to create an EFI boot entry from Windows, you can use the following commands from an Administrator prompt:<br />
<br />
> bcdedit /copy {bootmgr} /d "Linux Boot Manager"<br />
> bcdedit /set {''guid''} path \EFI\systemd\systemd-bootx64.efi<br />
<br />
Replace {{ic|''guid''}} with the id returned by the first command. You can also set it as the default entry using<br />
<br />
> bcdedit /default {''guid''}<br />
<br />
=== Menu does not appear after Windows upgrade ===<br />
<br />
See [[UEFI#Windows changes boot order]].<br />
<br />
== See also ==<br />
<br />
* https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/<br />
* https://github.com/systemd/systemd/tree/master/src/boot/efi<br />
* https://bbs.archlinux.org/viewtopic.php?id=254374<br />
* https://systemd.io/BOOT_LOADER_SPECIFICATION/</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Dotfiles&diff=704536Dotfiles2021-12-05T16:29:49Z<p>Scrumplex: Update dotfiles details for Scrumplex (me!)</p>
<hr />
<div>[[Category:Configuration files]]<br />
[[Category:Configuration management]]<br />
[[es:Dotfiles]]<br />
[[ja:ドットファイル]]<br />
[[pt:Dotfiles]]<br />
{{Related articles start}}<br />
{{Related|XDG Base Directory support}}<br />
{{Related|X resources}}<br />
{{Related articles end}}<br />
User-specific application configuration is traditionally stored in so called [[Wikipedia:dotfile|dotfiles]] (files whose filename starts with a dot). It is common practice to track dotfiles with a [[version control system]] such as [[Git]] to keep track of changes and synchronize dotfiles across various hosts. There are various approaches to managing your dotfiles (e.g. directly tracking dotfiles in the home directory v.s. storing them in a subdirectory and symlinking/copying/generating files with a [[shell]] script or [[#Tools|a dedicated tool]]). Apart from explaining how to manage your dotfiles this article also contains [[#User repositories|a list of dotfile repositories]] from Arch Linux users.<br />
<br />
== Tracking dotfiles directly with Git ==<br />
<br />
The benefit of tracking dotfiles directly with Git is that it only requires [[Git]] and does not involve symlinks. The disadvantage is that [[#Host-specific configuration|host-specific configuration]] generally requires merging changes into multiple [[Git#Branching|branches]].<br />
<br />
The simplest way to achieve this approach is to initialize a [[Git]] repository directly in your home directory and ignoring all files by default with a {{man|5|gitignore}} pattern of {{ic|*}}. This method however comes with two drawbacks: it can become confusing when you have other Git repositories in your home directory (e.g. if you forget to initialize a repository you suddenly operate on your dotfile repository) and you can no longer easily see which files in the current directory are untracked (because they are ignored).<br />
<br />
An alternative method without these drawbacks is the "bare repository and alias method" popularized on [https://news.ycombinator.com/item?id=11071754 Ask Hacker News: What do you use to manage your dotfiles?], which just takes three commands to set up:<br />
<br />
$ git init --bare ~/.dotfiles<br />
$ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'<br />
$ config config status.showUntrackedFiles no<br />
<br />
You can then manage your dotfiles with the created [[alias]]. If you are using [[Bash]] and would like bash completion for this alias, simply install {{AUR|bash-complete-alias}}, then add the alias and the following line to your {{ic|~/.bashrc}}.<br />
<br />
$ complete -F _complete_alias config<br />
<br />
Another way to get completion in bash is adding the following to your {{ic|~/.bashrc}} (taken from [https://askubuntu.com/a/642778]):<br />
<br />
source /usr/share/bash-completion/completions/git<br />
__git_complete config __git_main<br />
<br />
{{Tip|To avoid accidentally commiting confidential information, see [[Git#Filtering confidential information]].}}<br />
<br />
== Host-specific configuration ==<br />
<br />
A common problem with synchronizing dotfiles across various machines is host-specific configuration.<br />
<br />
With [[Git]] this can be solved by maintaining a master branch for all shared configuration, while each individual machine has a machine-specific branch checked out. Host-specific configuration can be committed to the machine-specific branch; when shared configuration is modified in the master branch, the per-machine branches need to be rebased on top of the updated master.<br />
<br />
In configuration scripts like [[Command-line shell#Configuration files|shell configuration files]] conditional logic can be used. For example, [[Bash]] scripts (i.e. {{ic|.bashrc}}) can apply different configuration depending on the machine name (or type, custom variable, etc.):<br />
<br />
if <nowiki>[[ "$(hostname)" == "archlaptop" ]];</nowiki> then<br />
# laptop specific commands here<br />
else<br />
# desktop or server machine commands<br />
fi<br />
<br />
Similar can also be achieved with [[.Xresources]].[https://jnrowe.github.io/articles/tips/Sharing_Xresources_between_systems.html]<br />
<br />
If you find rebasing Git branches too cumbersome, you may want to use a [[#Tools|tool]] that supports ''file grouping'', or if even greater flexibility is desired, a tool that does ''processing''.<br />
<br />
== Tools ==<br />
<br />
;File grouping<br />
:How configuration files can be grouped to configuration groups (also called profiles or packages).<br />
;Processing<br />
:Some tools process configuration files to allow them to be customized depending on the host.<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! Name !! Package !! Written in !! File grouping !! Processing<br />
|-<br />
! [https://github.com/twpayne/chezmoi chezmoi]<br />
| {{Pkg|chezmoi}} || Go || directory-based || Go templates<br />
|-<br />
! [https://github.com/kesslern/dot-templater dot-templater]<br />
| {{AUR|dot-templater-git}} || Rust || directory-based || custom syntax<br />
|-<br />
! [https://deadc0de.re/dotdrop/ dotdrop]<br />
| {{AUR|dotdrop}} || Python || configuration file || Jinja2<br />
|-<br />
! [https://github.com/jbernard/dotfiles dotfiles]<br />
| {{AUR|dotfiles}} || Python || {{Grey|[https://github.com/jbernard/dotfiles/pull/24 No]}} || {{Grey|No}}<br />
|-<br />
! [https://github.com/EvanPurkhiser/dots Dots]<br />
| {{AUR|dots-manager}} || Python || directory-based || custom append points<br />
|-<br />
! [https://github.com/SuperCuber/dotter dotter]<br />
| {{AUR|dotter-rs}} || Rust || configuration file || Handlebars<br />
|-<br />
! [https://dt.cli.rs dt-cli]<br />
| {{AUR|dt-cli}} || Rust || configuration file || {{Grey|No}}<br />
|-<br />
! [https://www.gnu.org/software/stow/ GNU Stow]<br />
| {{Pkg|stow}} || Perl || directory-based[http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] || {{Grey|No}}<br />
|-<br />
! [https://github.com/lra/mackup Mackup]<br />
| {{AUR|mackup}} || Python || automatic per application || {{Grey|No}}<br />
|-<br />
! [https://github.com/darkfeline/mir.qualia mir.qualia]<br />
| {{AUR|mir.qualia}} || Python || {{Grey|No}} || custom blocks<br />
|-<br />
! [https://github.com/thoughtbot/rcm rcm]<br />
| {{AUR|rcm}} || Perl || directory-based (by host or tag) || {{Grey|No}}<br />
|}<br />
<br />
=== Tools wrapping Git ===<br />
<br />
If you are uncomfortable with [[Git]], you may want to use one of these tools, which abstract the version control system away (more or less).<br />
<br />
{| class="wikitable sortable" style="text-align:center;"<br />
! Name !! Package !! Written in !! File grouping !! Processing<br />
|-<br />
! [https://github.com/kazhala/dotbare dotbare]<br />
| {{AUR|dotbare}} || Shell ({{Pkg|fzf}}) || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/kobus-v-schoor/dotgit dotgit]<br />
| {{AUR|dotgit}} || Python || filename-based || {{Grey|No}}<br />
|-<br />
! [https://github.com/andsens/homeshick homeshick]<br />
| {{AUR|homeshick-git}} || Bash || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/technicalpickles/homesick homesick]<br />
| {{-}} || Ruby || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/pearl-core/pearl Pearl]<br />
| {{AUR|pearl-git}} || Python || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/RichiH/vcsh vcsh]<br />
| {{Pkg|vcsh}} || Shell || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://yadm.io yadm]<sup>(1)</sup><br />
| {{Pkg|yadm}} || Bash || filename-based<br>(by class/OS/distro/hostname/user)[https://yadm.io/docs/alternates] ||Built-in templates/Jinja2/ESH[https://yadm.io/docs/templates]<br>(optional)<br />
|}<br />
<br />
# Supports encryption of confidential files with [[GPG]] or OpenSSL. [https://yadm.io/docs/encryption]<br />
<br />
== User repositories ==<br />
<br />
{| class="wikitable sortable" style="text-align:center"<br />
! Author || Shell (Shell framework) || WM / DE || Editor || Terminal || Multiplexer || Audio || Monitor || Mail || IRC || File Manager || RSS reader<br />
|-<br />
! [https://github.com/alfunx/.dotfiles alfunx]<br />
| zsh || awesome || vim || kitty || tmux || ncmpcpp/mpd || htop/lain || thunderbird || || ||<br />
|-<br />
! [https://gitlab.com/Ambrevar/dotfiles Ambrevar]<br />
| Eshell || EXWM || Emacs || Emacs (Eshell) || Emacs TRAMP + dtach || EMMS || conky/dzen || mu4e || Circe || ||<br />
|-<br />
! [https://github.com/ask1234560/dotfiles_bspwm ananthu]<br />
| zsh || bspwm || neovim || alacritty || || mpv || htop, polybar || neomutt || weechat || ranger ||<br />
|-<br />
! [https://github.com/awalGarg/dotfiles awal]<br />
| fish || i3 || vim || st || tmux || || i3status || || The Lounge || ||<br />
|-<br />
! [https://github.com/ayekat/dotfiles ayekat]<br />
| zsh || karuiwm || vim || rxvt-unicode || tmux || ncmpcpp/mpd || karuibar || mutt || irssi || ||<br />
|-<br />
! [https://github.com/BachoSeven/dotfiles bachoseven]<br />
| zsh || [https://github.com/BachoSeven/dwm dwm] || neovim || [https://github.com/BachoSeven/st st] || || ncmpcpp || bottom || neomutt || weechat || lf ||<br />
|-<br />
! [https://github.com/bamos/dotfiles bamos]<br />
| zsh || i3/xmonad || vim/emacs || rxvt-unicode || tmux || mpv/cmus || conky/xmobar || mutt || ERC || ||<br />
|-<br />
! [https://github.com/benmezger/dotfiles benmezger] <br />
| [https://github.com/benmezger/dotfiles zsh/bash] || [https://github.com/benmezger/dotfiles/tree/main/dot_config/i3 i3-gaps] || [https://github.com/benmezger/dotfiles/tree/main/dot_doom.d emacs] || [https://github.com/benmezger/dotfiles/blob/main/dot_Xresources rxvt-unicode]/[https://github.com/benmezger/dotfiles/blob/main/dot_config/alacritty/ alacritty] || [https://github.com/benmezger/dotfiles/blob/main/dot_tmux.conf tmux] || [https://github.com/benmezger/dotfiles/blob/main/dot_config/mopidy mopidy]/[https://github.com/benmezger/dotfiles/tree/main/dot_config/ncmpcpp/ ncmpcpp] || [https://github.com/benmezger/dotfiles/blob/main/dot_config/i3/status.toml.tmpl i3status-rs] || [https://github.com/benmezger/dotfiles/blob/main/dot_doom.d/ mu4e]/[https://github.com/benmezger/dotfiles/blob/main/dot_config/neomutt neomutt]/[https://github.com/benmezger/dotfiles/blob/main/dot_mbsyncrc.tmpl mbsync] || [https://github.com/benmezger/dotfiles/blob/main/dot_weechat/ weechat] || ||<br />
|-<br />
! [https://github.com/pbrisbin/dotfiles brisbin33]<br />
| [https://github.com/pbrisbin/oh-my-zsh zsh] || [https://github.com/pbrisbin/xmonad-config xmonad] || [https://github.com/pbrisbin/vim-config vim] || rxvt-unicode || screen || || dzen || [https://github.com/pbrisbin/mutt-config mutt] || [https://github.com/pbrisbin/irssi-config irssi] || ||<br />
|-<br />
! [https://gitlab.com/BVollmerhaus/dotfiles BVollmerhaus]<br />
| [https://gitlab.com/BVollmerhaus/dotfiles/-/tree/master/config/fish fish] || [https://gitlab.com/BVollmerhaus/dotfiles/blob/master/config/i3/config i3-gaps] || [https://gitlab.com/BVollmerhaus/dotfiles/blob/master/config/kak/kakrc kakoune] || [https://gitlab.com/BVollmerhaus/dotfiles/-/blob/master/config/kitty/kitty.conf kitty] || || || [https://gitlab.com/BVollmerhaus/dotfiles/blob/master/config/polybar/config polybar] || || || [https://gitlab.com/BVollmerhaus/dotfiles/-/tree/master/config/ranger ranger] ||<br />
|-<br />
! [https://github.com/cinelli/dotfiles cinelli]<br />
| zsh || dwm || vim || termite-git || || pianobar || htop || mutt-kz || weechat || ||<br />
|-<br />
! [https://github.com/dikiaap/dotfiles dikiaap]<br />
| zsh || i3-gaps || neovim || alacritty || tmux || || i3blocks || || || nnn ||<br />
|-<br />
! [https://github.com/Earnestly/dotfiles Earnestly]<br />
| zsh || i3/orbment || vim/emacs || termite || tmux || mpd || conky || mutt || weechat || ||<br />
|-<br />
! [https://github.com/ErikBjare/dotfiles ErikBjare]<br />
| zsh || xmonad/xfce4 || vim || terminator || tmux || || xfce4-panel || || weechat || ||<br />
|-<br />
! [https://github.com/falconindy/dotfiles falconindy]<br />
| bash || i3 || vim || rxvt-unicode || || ncmpcpp || conky || mutt || || ||<br />
|-<br />
! [https://github.com/filiparag/dotfiles filiparag]<br />
| fish || bspwm || vim || alacritty || tmux || mpv, [https://github.com/altdesktop/playerctl playerctl] || htop, polybar || [https://www.nongnu.org/mailnotify/ mail-notification] || || [https://wiki.lxde.org/en/PCManFM pcmanfm] ||<br />
|-<br />
! [https://git.sr.ht/~gardenapple/dotfiles gardenapple]<br />
| zsh || sway || neovim || kitty || || || htop || [https://aerc-mail.org/ aerc] || || ||<br />
|-<br />
! [https://github.com/graysky2/configs/tree/master/dotfiles graysky]<br />
| zsh || xfce4 || vim || terminal || || ncmpcpp || custom || thunderbird || || ||<br />
|-<br />
! [https://github.com/hugdru/dotfiles hugdru]<br />
| zsh || awesome || neovim || rxvt-unicode || tmux || || || thunderbird || weechat || ||<br />
|-<br />
! [https://github.com/insanum/dotfiles insanum]<br />
| bash || herbstluftwm || vim || evilvte || tmux || || dzen || mutt-kz || || ||<br />
|-<br />
! [https://github.com/isti115/dotfiles isti115]<br />
| [https://github.com/Isti115/dotfiles/blob/master/.config/powershell/Microsoft.PowerShell_profile.ps1 pwsh]<br />
|| [https://github.com/Isti115/dotfiles/blob/master/.config/sway/config sway]<br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/nvim neovim]<br />
|| [https://github.com/Isti115/dotfiles/blob/master/.config/alacritty/alacritty.yml alacritty]<br />
|| tmux<br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/mpv mpv] / playerctl<br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/waybar waybar] / htop / ytop<br />
|| <br />
|| <br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/ranger ranger]<br />
||<br />
|-<br />
! [https://hg.sr.ht/~jasonwryan/shiv jasonwryan]<br />
| bash/zsh || dwm || vim || rxvt-unicode || tmux || ncmpcpp || custom || mutt || irssi || ||<br />
|-<br />
! [https://github.com/JDevlieghere/dotfiles/ jdevlieghere]<br />
| zsh || xmonad || vim || terminal || tmux || || htop || mutt || weechat || ||<br />
|-<br />
! [https://github.com/jelly/Dotfiles jelly]<br />
| zsh || i3 || vim || termite || tmux || ncmpcpp || || mutt-kz-git || weechat || ||<br />
|-<br />
! [https://github.com/JonasDe/dotfiles JonasDe] <br />
| zsh || i3 || vim || rxvt-unicode || tmux || || || || || ||<br />
|-<br />
! [https://github.com/Jorengarenar/dotfiles Jorengarenar] <br />
| [https://github.com/Jorengarenar/dotfiles/tree/master/shell sh]/[https://github.com/Jorengarenar/dotfiles/blob/master/bashrc Bash] || [https://github.com/Jorengarenar/dotfiles/tree/master/i3 i3] || [https://github.com/Jorengarenar/dotfiles/tree/master/vim Vim] || [https://github.com/Jorengarenar/dotfiles/blob/master/X11/Xresources xterm] || [https://github.com/Jorengarenar/dotfiles/blob/master/tmux.conf tmux] || [https://github.com/Jorengarenar/dotfiles/tree/master/mpv mpv] || [https://github.com/Jorengarenar/dotfiles/blob/master/htoprc htop] || [https://github.com/Jorengarenar/dotfiles/tree/master/aerc aerc] || [https://github.com/Jorengarenar/dotfiles/tree/master/weechat WeeChat] || [https://github.com/Jorengarenar/dotfiles/blob/master/ranger.conf ranger] || QuiteRSS<br />
|-<br />
! [https://github.com/markuszoppelt/dotfiles MarkusZoppelt]<br />
| zsh || gnome || vim || terminal || tmux || || || || || ||<br />
|-<br />
! [https://github.com/maximbaz/dotfiles maximbaz]<br />
| zsh || sway || kakoune || kitty || || || waybar || neomutt || || nnn ||<br />
|-<br />
! [https://git.mehalter.com/mehalter/dotfiles mehalter]<br />
| zsh || i3-gaps || neovim || termite || tmux || cmus || gotop || neomutt || weechat || ranger ||<br />
|-<br />
! [https://github.com/meskarune/.dotfiles meskarune]<br />
| bash || herbstluftwm || vim || rxvt-unicode || screen || || conky || || weechat || ||<br />
|-<br />
! [https://github.com/neersighted/dotfiles neersighted]<br />
| fish || i3 || neovim || alacritty || tmux || ncmpcpp || || || || ||<br />
|-<br />
! [https://github.com/nimaipatel/dotfiles nimaipatel]<br />
| bash || [https://github.com/nimaipatel/dwm dwm] || neovim || [https://github.com/nimaipatel/st st] || tmux || ncmpcpp || [https://github.com/nimaipatel/dwmblocks dwmblocks] || || || ranger ||<br />
|-<br />
! [https://github.com/oibind/dotfiles oibind]<br />
| fish || awesome || neovim || st || tmux || || htop-vim || || weechat || lf ||<br />
|-<br />
! [https://github.com/ok100/configs OK100]<br />
| bash || dwm || vim || rxvt-unicode || || cmus || conky, dzen || mutt || weechat || ||<br />
|-<br />
! [https://github.com/pablox-cl/dotfiles pablox-cl]<br />
| zsh (zplug) || gnome3 || neovim || kitty || || || || || || ||<br />
|-<br />
! [https://gitlab.com/peterzuger/dotfiles peterzuger]<br />
| zsh || i3-gaps || emacs || rxvt-unicode || screen || moc || htop || || || ||<br />
|-<br />
! [https://github.com/potamides/dotfiles potamides]<br />
| bash || awesome || neovim || termite || tmux || ncmpcpp || conky,htop || mutt || weechat || ranger ||<br />
|-<br />
! [https://github.com/reisub0/dot reisub0]<br />
| fish || qtile || neovim || kitty || || mpd || conky || || || ||<br />
|-<br />
! [https://git.sr.ht/~scrumplex/dotfiles Scrumplex]<br />
| fish || sway || neovim || kitty || || ncmpcpp / pipewire || waybar || aerc || || ranger ||<br />
|-<br />
! [https://github.com/shubhamgupta2956/dotfiles shubhamgupta2956]<br />
| zsh || i3-gaps-rounded || vim || terminator || || cmus || htop, i3blocks, gotop || || || ranger, nautilus ||<br />
|-<br />
! [https://github.com/sistematico/majestic sistematico]<br />
| zsh/fish/bash || [https://github.com/Airblader/i3 i3-gaps] || vim/nano || termite || tmux || ncmpcpp || polybar || mutt || weechat || ||<br />
|-<br />
! [https://git.sitilge.id.lv/sitilge/dotfiles sitilge]<br />
| zsh || sway || neovim || alacritty || || || htop || thunderbird || || ||<br />
|-<br />
! [https://github.com/thiagowfx/.dotfiles thiagowfx]<br />
| bash/zsh || i3 || vim || alacritty || tmux || playerctl || i3status || || || ranger ||<br />
|-<br />
! [https://github.com/vodik/dotfiles vodik]<br />
| zsh || xmonad || vim || termite-git || tmux || ncmpcpp || custom || mutt || weechat || ||<br />
|-<br />
! [https://github.com/w0ng/dotfiles w0ng]<br />
| zsh || dwm || vim || rxvt-unicode || tmux || ncmpcpp || custom || mutt || irssi || ||<br />
|-<br />
! [https://github.com/whitelynx/dotfiles whitelynx]<br />
| fish || i3 || neovim || kitty || || || i3pystatus || || || ||<br />
|-<br />
! [https://github.com/wolfcore/dotfiles wolfcore] <br />
| bash || dwm || vim || rxvt-unicode || tmux || cmus || custom || || weechat || ||<br />
|-<br />
! [https://github.com/zendeavor zendeavor]<br />
| [https://github.com/zendeavor/config-stuff/tree/sandbag/zsh zsh] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/config i3] || [https://github.com/zendeavor/dotvim/tree/sandbag vim] || [https://github.com/zendeavor/config-stuff/blob/sandbag/X11/Xresources#L14 rxvt-unicode] || [https://github.com/zendeavor/config-stuff/tree/sandbag/tmux tmux] || [https://github.com/zendeavor/config-stuff/blob/sandbag/ncmpcpp/config ncmpcpp] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/i3status.conf i3status] || || [https://github.com/zendeavor/config-stuff/tree/kiwi/weechat weechat] || ||<br />
|}<br />
<br />
== See also ==<br />
<br />
* [[gregswiki:DotFiles]]<br />
* [https://wiki.haskell.org/Xmonad/Config_archive XMonad Config Archive]<br />
* [http://dotshare.it dotshare.it]<br />
* [https://dotfiles.github.io/ dotfiles.github.io]<br />
* [https://terminal.sexy/ terminal.sexy] - Terminal color scheme designer</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=699558PipeWire2021-10-19T20:49:15Z<p>Scrumplex: fix code block about ALSA formats and rates</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on ''audio'' and ''video'' [[user group]]s. Instead, it uses a [[Polkit]]-like security model, asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation. Other packages, such as {{Pkg|pipewire-alsa}}, {{Pkg|pipewire-pulse}}, and {{Pkg|pipewire-jack}} are normally not needed unless one wants to [[#Audio|use PipeWire as a PulseAudio/JACK replacement]]. Also available are {{Pkg|lib32-pipewire}} and {{Pkg|lib32-pipewire-jack}} for multilib support.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/ryuukyu/helvum|{{Pkg|helvum}} or {{AUR|helvum-git}}}}<br />
<br />
=== WirePlumber ===<br />
<br />
PipeWire currently uses the simple example session manager {{ic|pipewire-media-session}}. <br />
<br />
To switch to the more powerful [https://pipewire.pages.freedesktop.org/wireplumber/index.html WirePlumber], [[install]] the {{Pkg|wireplumber}} package, then [[disable]] the {{ic|pipewire-media-session}} '''user''' unit, and [[enable]] the {{ic|wireplumber.service}} '''user''' unit.<br />
<br />
== Usage ==<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed].<br />
<br />
{{Note|1=<nowiki/><br />
* {{Pkg|xdg-desktop-portal}} 1.10.0 fixed a mismatch between specification and implementation of its D-Bus interface. [https://github.com/flatpak/xdg-desktop-portal/pull/609] <br />
* Some clients may not work with xdg-desktop-portal 1.10.0 or newer.<br />
* Current progress for [https://github.com/obsproject/obs-studio/pull/5294 OBS Studio], [https://bugs.chromium.org/p/chromium/issues/detail?id=1250940 Chromium] and [https://bugzilla.mozilla.org/show_bug.cgi?id=1731495 Firefox]<br />
}}<br />
<br />
The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gtk}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based compositor (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the following URL:<br />
<br />
chrome://flags/#enable-webrtc-pipewire-capturer<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work, the {{ic|1=XDG_CURRENT_DESKTOP}} and {{ic|1=WAYLAND_DISPLAY}} environment variables have to be set in the [[Systemd/User#Environment_variables|systemd user session]]. {{ic|1=XDG_CURRENT_DESKTOP}} has to be set to the name of your compositor, e.g. {{ic|1=XDG_CURRENT_DESKTOP=sway}}. {{ic|1=WAYLAND_DISPLAY}} is set automatically by the compositor. The recommended way to bring these environment variables over to the systemd user session is to run {{ic|1=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP}} after launching the compositor, e.g. with the compositors configuration file. See [https://github.com/emersion/xdg-desktop-portal-wlr#running] and [https://github.com/emersion/xdg-desktop-portal-wlr/wiki] for more details.<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
=== Video ===<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
=== Audio ===<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ this blog entry] for more information.<br />
<br />
==== ALSA/Legacy applications ====<br />
<br />
Install {{Pkg|pipewire-alsa}} to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or execute {{ic|systemctl start --user pipewire-pulse.service}} to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
If PipeWire does not work correctly on system startup, validate that the [[Systemd/User]] services {{ic|pipewire-pulse.service}}, {{ic|pipewire.service}}, and {{ic|pipewire-media-session.service}} are up and running. Keep in mind that {{ic|pipewire-pulse.service}} and {{ic|pipewire-pulse.socket}} have a {{ic|ConditionUser}} against running as root.<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} and use {{ic|pw-jack}} to launch JACK clients with the compatible libraries instead of the original {{ic|libjack*}}:<br />
<br />
pw-jack ''application''<br />
<br />
It is also possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" pw-jack ''application''<br />
<br />
Alternatively, install {{AUR|pipewire-jack-dropin}} or uninstall {{AUR|jack}}/{{Pkg|jack2}} to let JACK clients load the compatible libraries automatically.<br />
<br />
Use {{ic|ldd}} to verify that the JACK application links to the correct library:<br />
<br />
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2=<br />
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)<br />
}}<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. More specifically, the media session daemon checks for {{ic|/etc/pipewire/media-session.d/with-pulseaudio}}, and enables its {{ic|bluez5}} module automatically if the file exists.<br />
<br />
The configuration is located in the {{ic|bluez-monitor}} configuration file, either {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} (for system-wide configuration) or {{ic|~/.config/pipewire/media-session.d/bluez-monitor.conf}} (for user-specific configuration). A template for the configuration file can be copied from {{ic|/usr/share/pipewire/media-session.d/bluez-monitor.conf}}.<br />
<br />
===== Automatic profile selection =====<br />
<br />
To automatically switch between HSP/HFP and A2DP profiles when an input stream is detected, set the {{ic|bluez5.autoswitch-profile}} property to {{ic|true}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, enable these two services specifying {{ic|default_null_sink}} as argument for ''pulseaudio-null-sink'' service:<br />
<br />
systemctl --user enable pulseaudio-null-sink@default_null_sink.service<br />
systemctl --user enable jack-carla-rack.service<br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and see https://github.com/werman/noise-suppression-for-voice#pipewire. Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Audio ===<br />
<br />
{{Out of date|Factory config files were moved from /etc/pipewire/ to /usr/share/pipewire/. System wide config can still be done in /etc/pipewire/ and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire/. https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44}}<br />
<br />
==== Microphone is not detected by PipeWire ====<br />
<br />
PipeWires {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}} in {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, under {{ic|rules}} -> the first rule -> {{ic|actions}} -> {{ic|update-props}}:<br />
<br />
...<br />
update-props = {<br />
api.alsa.use-acp = false<br />
...<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
==== No sound after connecting to Bluetooth device ====<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
==== Low volume ====<br />
<br />
After replacing PulseAudio with Pipewire, sound worked fine, but after a reboot, the volume was intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
==== Increasing RLIMIT_MEMLOCK ====<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
==== Changing the sample rate ====<br />
<br />
By default PipeWire sets a global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value) you can do it by editing the line {{ic|1=default.clock.rate = 48000}} in the configuration file {{ic|/etc/pipewire/pipewire.conf}}. For example, if you want 192kHz, uncomment and change value {{ic|48000}} to {{ic|1=default.clock.rate = 192000}}.<br />
<br />
PipeWire can also change output sample rates supported by your DAC. To configure, uncomment and set the line {{ic|1=default.clock.allowed-rates = [ 48000 ]}}, for example, {{ic|[ 44100,48000,88200,96000 ]}}. The sample rate follows the sample rate of the audio stream being played when the card is idle.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm0p}} to {{ic|pcm0c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
==== Sound quality (resampling quality) ====<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to restart PipeWire (without sudo): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (never forget {{ic|pipewire-pulse.socket}} if you want your config changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
Probably it's somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
==== External sound card not activated after reconnect ====<br />
<br />
Check {{ic|~/.config/pipewire-media-session/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire-media-session/}} and restart PipeWire using {{ic|systemctl --user restart pipewire.service}}.<br />
<br />
==== No Sound or pactl info shows Failure: Connection refused ====<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and restart PipeWire-Pulse using {{ic|systemctl --user restart pipewire-pulse.service}}.<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
==== Low audio quality on Bluetooth ====<br />
<br />
In case Bluetooth playback stutters, check {{ic|pipewire.service}} using {{ic|systemctl --user status pipewire.service}}. If there are errors like this one, <br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}} in<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.codecs = [sbc]<br />
...<br />
}}<br />
<br />
Try enabling mSBC support (fixes mic on Sony 1000XM3):<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.enable-msbc = true<br />
...<br />
}}<br />
<br />
Restart PipeWire using {{ic|systemctl --user restart pipewire.service}} for the changes to take effect.<br />
<br />
==== No devices detected after PipeWire update and reboot (git / >=0.3.23) ====<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf<br />
~/.config/pipewire/pipewire.conf|output=<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}<br />
}}<br />
<br />
==== Noticeable audio delay when starting playback ====<br />
<br />
This is caused by node suspension when inactive. It can be disabled by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
==== Audio cutting out when multiple streams start playing ====<br />
<br />
This problem can typically be diagnosed by running {{ic|journalctl --user -b -u pipewire-pulse}} and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
==== Audio is distorted ====<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Uncomment the {{ic|1=default.clock.rate = 48000}} setting in {{ic|/etc/pipewire/pipewire.conf}} and reduce the value to {{ic|44100}}<br />
<br />
==== Audio problems after standby ====<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
==== High latency with USB DACs (e.g. Schiit Hel 2) ====<br />
<br />
Changing sample rates or formats might help reduce latency with some DACs such as Schiit Hel 2.[https://www.reddit.com/r/osugame/comments/msifdd/usb_dacamp_and_audio_lag/]<br />
Using matching rules in ''pipewire-media-session'' we can set properties for devices.[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-pipewire-media-session#matching-rules]<br />
<br />
Copy the default configuration of {{ic|alsa-monitor.conf}} for ''pipewire-media-session'' into either {{ic|/etc/pipewire/media-session.d}} or {{ic|~/.config/pipewire/media-session.d}}.<br />
Then append a new rule-block similar to the following one:<br />
<br />
{{hc|/etc/pipewire/media-session.d/alsa-monitor.conf<br />
~/.config/pipewire/media-session.d/alsa-monitor.conf|output=<br />
rules = {<br />
...<br />
{<br />
matches = [<br />
{<br />
node.name = "alsa_output.<name of node>"<br />
}<br />
]<br />
actions = {<br />
update-props = {<br />
audio.format = "S24_3LE"<br />
audio.rate = 96000<br />
# Following value should be doubled until audio doesn't cut out or other issues stop occurring<br />
api.alsa.period-size = 128<br />
}<br />
}<br />
}<br />
...<br />
}<br />
}}<br />
<br />
{{ic|alsa_output.<name of node>}} node can be obtained using {{ic|pw-top}}.<br />
<br />
Your DAC might support a different format or sample rate. You can check what your DAC supports by querying [[ALSA]]:<br />
<br />
First get the card number of your DAC:<br />
<br />
{{hc|$ aplay -l|<br />
...<br />
card 3: S2 [Schiit Hel 2], device 0: USB Audio [USB Audio]<br />
Subdevices: 0/1<br />
Subdevice #0: subdevice #0<br />
...<br />
}}<br />
<br />
So in this example it would be card 3.<br />
Get all supported sample rates and formats:<br />
<br />
{{hc|$ cat /proc/asound/cardX/streamX|<br />
...<br />
Playback:<br />
...<br />
Interface 1<br />
Altset 1<br />
Format: S16_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 16<br />
...<br />
Interface 1<br />
Altset 2<br />
Format: S24_3LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 24<br />
...<br />
Interface 1<br />
Altset 3<br />
Format: S32_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 32<br />
...<br />
...<br />
}}<br />
<br />
In this case {{ic|S16_LE, S24_3LE, S32_LE}} are the supported formats and {{ic|44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000}} are the supported sample rates across all formats.<br />
<br />
=== Video ===<br />
<br />
==== OBS (etc.) display nothing, even if they ask for a window/screen ====<br />
<br />
If you are sure that you have {{Pkg|xdg-desktop-portal}} installed as well as either {{Pkg|xdg-desktop-portal-gtk}} or {{Pkg|xdg-desktop-portal-kde}}, check the running state of the daemons.<br />
<br />
In OBS, if everything is working, you should see this in {{ic|stdout}}:<br />
<br />
...<br />
info: [pipewire] desktop selected, setting up screencast<br />
info: [pipewire] created stream 0x5632d7456850<br />
info: [pipewire] playing stream…<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=699554PipeWire2021-10-19T19:54:45Z<p>Scrumplex: Add section for dealing with high latency with some USB DACs (e.g. Schiit Hel 2)</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on ''audio'' and ''video'' [[user group]]s. Instead, it uses a [[Polkit]]-like security model, asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation. Other packages, such as {{Pkg|pipewire-alsa}}, {{Pkg|pipewire-pulse}}, and {{Pkg|pipewire-jack}} are normally not needed unless one wants to [[#Audio|use PipeWire as a PulseAudio/JACK replacement]]. Also available are {{Pkg|lib32-pipewire}} and {{Pkg|lib32-pipewire-jack}} for multilib support.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/ryuukyu/helvum|{{Pkg|helvum}} or {{AUR|helvum-git}}}}<br />
<br />
=== WirePlumber ===<br />
<br />
PipeWire currently uses the simple example session manager {{ic|pipewire-media-session}}. <br />
<br />
To switch to the more powerful [https://pipewire.pages.freedesktop.org/wireplumber/index.html WirePlumber], [[install]] the {{Pkg|wireplumber}} package, then [[disable]] the {{ic|pipewire-media-session}} '''user''' unit, and [[enable]] the {{ic|wireplumber.service}} '''user''' unit.<br />
<br />
== Usage ==<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed].<br />
<br />
{{Note|1=<nowiki/><br />
* {{Pkg|xdg-desktop-portal}} 1.10.0 fixed a mismatch between specification and implementation of its D-Bus interface. [https://github.com/flatpak/xdg-desktop-portal/pull/609] <br />
* Some clients may not work with xdg-desktop-portal 1.10.0 or newer.<br />
* Current progress for [https://github.com/obsproject/obs-studio/pull/5294 OBS Studio], [https://bugs.chromium.org/p/chromium/issues/detail?id=1250940 Chromium] and [https://bugzilla.mozilla.org/show_bug.cgi?id=1731495 Firefox]<br />
}}<br />
<br />
The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gtk}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based compositor (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the following URL:<br />
<br />
chrome://flags/#enable-webrtc-pipewire-capturer<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work, the {{ic|1=XDG_CURRENT_DESKTOP}} and {{ic|1=WAYLAND_DISPLAY}} environment variables have to be set in the [[Systemd/User#Environment_variables|systemd user session]]. {{ic|1=XDG_CURRENT_DESKTOP}} has to be set to the name of your compositor, e.g. {{ic|1=XDG_CURRENT_DESKTOP=sway}}. {{ic|1=WAYLAND_DISPLAY}} is set automatically by the compositor. The recommended way to bring these environment variables over to the systemd user session is to run {{ic|1=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP}} after launching the compositor, e.g. with the compositors configuration file. See [https://github.com/emersion/xdg-desktop-portal-wlr#running] and [https://github.com/emersion/xdg-desktop-portal-wlr/wiki] for more details.<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
=== Video ===<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
=== Audio ===<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ this blog entry] for more information.<br />
<br />
==== ALSA/Legacy applications ====<br />
<br />
Install {{Pkg|pipewire-alsa}} to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or execute {{ic|systemctl start --user pipewire-pulse.service}} to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
If PipeWire does not work correctly on system startup, validate that the [[Systemd/User]] services {{ic|pipewire-pulse.service}}, {{ic|pipewire.service}}, and {{ic|pipewire-media-session.service}} are up and running. Keep in mind that {{ic|pipewire-pulse.service}} and {{ic|pipewire-pulse.socket}} have a {{ic|ConditionUser}} against running as root.<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} and use {{ic|pw-jack}} to launch JACK clients with the compatible libraries instead of the original {{ic|libjack*}}:<br />
<br />
pw-jack ''application''<br />
<br />
It is also possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" pw-jack ''application''<br />
<br />
Alternatively, install {{AUR|pipewire-jack-dropin}} or uninstall {{AUR|jack}}/{{Pkg|jack2}} to let JACK clients load the compatible libraries automatically.<br />
<br />
Use {{ic|ldd}} to verify that the JACK application links to the correct library:<br />
<br />
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2=<br />
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)<br />
}}<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. More specifically, the media session daemon checks for {{ic|/etc/pipewire/media-session.d/with-pulseaudio}}, and enables its {{ic|bluez5}} module automatically if the file exists.<br />
<br />
The configuration is located in the {{ic|bluez-monitor}} configuration file, either {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} (for system-wide configuration) or {{ic|~/.config/pipewire/media-session.d/bluez-monitor.conf}} (for user-specific configuration). A template for the configuration file can be copied from {{ic|/usr/share/pipewire/media-session.d/bluez-monitor.conf}}.<br />
<br />
===== Automatic profile selection =====<br />
<br />
To automatically switch between HSP/HFP and A2DP profiles when an input stream is detected, set the {{ic|bluez5.autoswitch-profile}} property to {{ic|true}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, enable these two services specifying {{ic|default_null_sink}} as argument for ''pulseaudio-null-sink'' service:<br />
<br />
systemctl --user enable pulseaudio-null-sink@default_null_sink.service<br />
systemctl --user enable jack-carla-rack.service<br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and see https://github.com/werman/noise-suppression-for-voice#pipewire. Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Audio ===<br />
<br />
{{Out of date|Factory config files were moved from /etc/pipewire/ to /usr/share/pipewire/. System wide config can still be done in /etc/pipewire/ and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire/. https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44}}<br />
<br />
==== Microphone is not detected by PipeWire ====<br />
<br />
PipeWires {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}} in {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, under {{ic|rules}} -> the first rule -> {{ic|actions}} -> {{ic|update-props}}:<br />
<br />
...<br />
update-props = {<br />
api.alsa.use-acp = false<br />
...<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
==== No sound after connecting to Bluetooth device ====<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
==== Low volume ====<br />
<br />
After replacing PulseAudio with Pipewire, sound worked fine, but after a reboot, the volume was intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
==== Increasing RLIMIT_MEMLOCK ====<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
==== Changing the sample rate ====<br />
<br />
By default PipeWire sets a global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value) you can do it by editing the line {{ic|1=default.clock.rate = 48000}} in the configuration file {{ic|/etc/pipewire/pipewire.conf}}. For example, if you want 192kHz, uncomment and change value {{ic|48000}} to {{ic|1=default.clock.rate = 192000}}.<br />
<br />
PipeWire can also change output sample rates supported by your DAC. To configure, uncomment and set the line {{ic|1=default.clock.allowed-rates = [ 48000 ]}}, for example, {{ic|[ 44100,48000,88200,96000 ]}}. The sample rate follows the sample rate of the audio stream being played when the card is idle.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm0p}} to {{ic|pcm0c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
==== Sound quality (resampling quality) ====<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to restart PipeWire (without sudo): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (never forget {{ic|pipewire-pulse.socket}} if you want your config changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
Probably it's somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
==== External sound card not activated after reconnect ====<br />
<br />
Check {{ic|~/.config/pipewire-media-session/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire-media-session/}} and restart PipeWire using {{ic|systemctl --user restart pipewire.service}}.<br />
<br />
==== No Sound or pactl info shows Failure: Connection refused ====<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and restart PipeWire-Pulse using {{ic|systemctl --user restart pipewire-pulse.service}}.<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
==== Low audio quality on Bluetooth ====<br />
<br />
In case Bluetooth playback stutters, check {{ic|pipewire.service}} using {{ic|systemctl --user status pipewire.service}}. If there are errors like this one, <br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}} in<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.codecs = [sbc]<br />
...<br />
}}<br />
<br />
Try enabling mSBC support (fixes mic on Sony 1000XM3):<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.enable-msbc = true<br />
...<br />
}}<br />
<br />
Restart PipeWire using {{ic|systemctl --user restart pipewire.service}} for the changes to take effect.<br />
<br />
==== No devices detected after PipeWire update and reboot (git / >=0.3.23) ====<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf<br />
~/.config/pipewire/pipewire.conf|output=<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}<br />
}}<br />
<br />
==== Noticeable audio delay when starting playback ====<br />
<br />
This is caused by node suspension when inactive. It can be disabled by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
==== Audio cutting out when multiple streams start playing ====<br />
<br />
This problem can typically be diagnosed by running {{ic|journalctl --user -b -u pipewire-pulse}} and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
==== Audio is distorted ====<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Uncomment the {{ic|1=default.clock.rate = 48000}} setting in {{ic|/etc/pipewire/pipewire.conf}} and reduce the value to {{ic|44100}}<br />
<br />
==== Audio problems after standby ====<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
==== High latency with USB DACs (e.g. Schiit Hel 2) ====<br />
<br />
Changing sample rates or formats might help reduce latency with some DACs such as Schiit Hel 2.[https://www.reddit.com/r/osugame/comments/msifdd/usb_dacamp_and_audio_lag/]<br />
Using matching rules in ''pipewire-media-session'' we can set properties for devices.[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-pipewire-media-session#matching-rules]<br />
<br />
Copy the default configuration of {{ic|alsa-monitor.conf}} for ''pipewire-media-session'' into either {{ic|/etc/pipewire/media-session.d}} or {{ic|~/.config/pipewire/media-session.d}}.<br />
Then append a new rule-block similar to the following one:<br />
<br />
{{hc|/etc/pipewire/media-session.d/alsa-monitor.conf<br />
~/.config/pipewire/media-session.d/alsa-monitor.conf|output=<br />
rules = {<br />
...<br />
{<br />
matches = [<br />
{<br />
node.name = "alsa_output.<name of node>"<br />
}<br />
]<br />
actions = {<br />
update-props = {<br />
audio.format = "S24_3LE"<br />
audio.rate = 96000<br />
# Following value should be doubled until audio doesn't cut out or other issues stop occurring<br />
api.alsa.period-size = 128<br />
}<br />
}<br />
}<br />
...<br />
}<br />
}}<br />
<br />
{{ic|alsa_output.<name of node>}} node can be obtained using {{ic|pw-top}}.<br />
<br />
Your DAC might support a different format or sample rate. You can check what your DAC supports by querying [[ALSA]]:<br />
<br />
First get the card number of your DAC:<br />
<br />
{{hc|$ aplay -l|<br />
...<br />
card 3: S2 [Schiit Hel 2], device 0: USB Audio [USB Audio]<br />
Subdevices: 0/1<br />
Subdevice #0: subdevice #0<br />
...<br />
}}<br />
<br />
So in this example it would be card 3.<br />
Get all supported sample rates and formats:<br />
<br />
{{hc|$ aplay -l|$ cat /proc/asound/cardX/streamX|<br />
...<br />
Playback:<br />
...<br />
Interface 1<br />
Altset 1<br />
Format: S16_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 16<br />
...<br />
Interface 1<br />
Altset 2<br />
Format: S24_3LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 24<br />
...<br />
Interface 1<br />
Altset 3<br />
Format: S32_LE<br />
Channels: 2<br />
Endpoint: 0x05 (5 OUT) (ASYNC)<br />
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000<br />
Data packet interval: 125 us<br />
Bits: 32<br />
...<br />
...<br />
}}<br />
<br />
In this case {{ic|S16_LE, S24_3LE, S32_LE}} are the supported formats and {{ic|44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000}} are the supported sample rates across all formats.<br />
<br />
=== Video ===<br />
<br />
==== OBS (etc.) display nothing, even if they ask for a window/screen ====<br />
<br />
If you are sure that you have {{Pkg|xdg-desktop-portal}} installed as well as either {{Pkg|xdg-desktop-portal-gtk}} or {{Pkg|xdg-desktop-portal-kde}}, check the running state of the daemons.<br />
<br />
In OBS, if everything is working, you should see this in {{ic|stdout}}:<br />
<br />
...<br />
info: [pipewire] desktop selected, setting up screencast<br />
info: [pipewire] created stream 0x5632d7456850<br />
info: [pipewire] playing stream…<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=696771PipeWire2021-09-19T16:45:57Z<p>Scrumplex: Fix version number of xdp incompatibility</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on ''audio'' and ''video'' [[user group]]s but rather it uses a [[Polkit]]-like security model asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation. Other packages, such as {{Pkg|pipewire-alsa}}, {{Pkg|pipewire-pulse}}, and {{Pkg|pipewire-jack}} are normally not needed unless one wants to [[#Audio|use PipeWire as a PulseAudio/JACK replacement]]. Also available are {{Pkg|lib32-pipewire}} and {{Pkg|lib32-pipewire-jack}} for multilib support.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/ryuukyu/helvum|{{AUR|helvum}} or {{AUR|helvum-git}}}}<br />
<br />
== Usage ==<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed].<br />
<br />
{{Note|1=<nowiki/><br />
* {{Pkg|xdg-desktop-portal}} 1.10.0 fixed a mismatch between specification and implementation of its D-Bus interface. [https://github.com/flatpak/xdg-desktop-portal/pull/609] <br />
* Some clients may not work with xdg-desktop-portal 1.10.0 or newer.<br />
* Current progress for [https://github.com/obsproject/obs-studio/pull/5294 OBS Studio], [https://bugs.chromium.org/p/chromium/issues/detail?id=1250940 Chromium] and [https://bugzilla.mozilla.org/show_bug.cgi?id=1731495 Firefox]<br />
}}<br />
<br />
The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gtk}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based compositor (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the following URL:<br />
<br />
chrome://flags/#enable-webrtc-pipewire-capturer<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work you need to install {{Pkg|pipewire-media-session}} [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ/db63ec1ab6c0170334c1d1f45d1ebe543cc375fa#how-do-i-run-xdpw] and make sure that {{ic|1=XDG_CURRENT_DESKTOP=sway}} is set in the session [https://github.com/emersion/xdg-desktop-portal-wlr#running]. You need to set {{ic|1=XDG_SESSION_TYPE=wayland}} as well [https://github.com/emersion/xdg-desktop-portal-wlr/issues/117].<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
=== Video ===<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
=== Audio ===<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ this blog entry] for more information.<br />
<br />
==== ALSA/Legacy applications ====<br />
<br />
Install {{Pkg|pipewire-alsa}} to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or execute {{ic|systemctl start --user pipewire-pulse.service}} to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
If PipeWire does not work correctly on system startup, validate that the [[Systemd/User]] services {{ic|pipewire-pulse.service}}, {{ic|pipewire.service}}, and {{ic|pipewire-media-session.service}} are up and running. Keep in mind that {{ic|pipewire-pulse.service}} and {{ic|pipewire-pulse.socket}} have a {{ic|ConditionUser}} against running as root.<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} and use {{ic|pw-jack}} to launch JACK clients with the compatible libraries instead of the original {{ic|libjack*}}:<br />
<br />
pw-jack ''application''<br />
<br />
It is also possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" pw-jack ''application''<br />
<br />
Alternatively, install {{AUR|pipewire-jack-dropin}} or uninstall {{AUR|jack}}/{{Pkg|jack2}} to let JACK clients load the compatible libraries automatically.<br />
<br />
Use {{ic|ldd}} to verify that the JACK application links to the correct library:<br />
<br />
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2=<br />
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)<br />
}}<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. More specifically, the media session daemon checks for {{ic|/etc/pipewire/media-session.d/with-pulseaudio}}, and enables its {{ic|bluez5}} module automatically if the file exists.<br />
<br />
The configuration is located in the {{ic|bluez-monitor}} configuration file, either {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} (for system-wide configuration) or {{ic|~/.config/pipewire/media-session.d/bluez-monitor.conf}} (for user-specific configuration). A template for the configuration file can be copied from {{ic|/usr/share/pipewire/media-session.d/bluez-monitor.conf}}.<br />
<br />
===== Automatic profile selection =====<br />
<br />
To automatically switch between HSP/HFP and A2DP profiles when an input stream is detected, set the {{ic|bluez5.autoswitch-profile}} property to {{ic|true}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, enable these two services specifying {{ic|default_null_sink}} as argument for ''pulseaudio-null-sink'' service:<br />
<br />
systemctl --user enable pulseaudio-null-sink@default_null_sink.service<br />
systemctl --user enable jack-carla-rack.service<br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and see https://github.com/werman/noise-suppression-for-voice#pipewire. Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
== Troubleshooting ==<br />
<br />
{{Out of date|Factory config files were moved from /etc/pipewire/ to /usr/share/pipewire/. System wide config can still be done in /etc/pipewire/ and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire/. https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44}}<br />
<br />
=== Microphone is not detected by PipeWire ===<br />
<br />
PipeWires {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}} in {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, under {{ic|rules}} -> the first rule -> {{ic|actions}} -> {{ic|update-props}}:<br />
<br />
...<br />
update-props = {<br />
api.alsa.use-acp = false<br />
...<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
=== No sound after connecting to Bluetooth device ===<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
=== Low volume ===<br />
<br />
After replacing PulseAudio with Pipewire, sound worked fine, but after a reboot, the volume was intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
=== Increasing RLIMIT_MEMLOCK ===<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
=== Changing the sample rate ===<br />
<br />
By default PipeWire sets a global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value) you can do it by editing the line {{ic|1=default.clock.rate = 48000}} in the configuration file {{ic|/etc/pipewire/pipewire.conf}}. For example, if you want 192kHz, uncomment and change value {{ic|48000}} to {{ic|1=default.clock.rate = 192000}}.<br />
<br />
PipeWire can also change output sample rates supported by your DAC. To configure, uncomment and set the line {{ic|1=default.clock.allowed-rates = [ 48000 ]}}, for example, {{ic|[ 44100,48000,88200,96000 ]}}. The sample rate follows the sample rate of the audio stream being played when the card is idle.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm№p}} to {{ic|pcm№c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
=== Sound quality (resampling quality) ===<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to restart PipeWire (without sudo): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (never forget {{ic|pipewire-pulse.socket}} if you want your config changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
Probably it's somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
=== External sound card not activated after reconnect ===<br />
<br />
Check {{ic|~/.config/pipewire-media-session/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire-media-session/}} and restart PipeWire using {{ic|systemctl --user restart pipewire.service}}.<br />
<br />
=== No Sound or pactl info shows Failure: Connection refused ===<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and restart PipeWire-Pulse using {{ic|systemctl --user restart pipewire-pulse.service}}.<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
=== Low audio quality on Bluetooth ===<br />
<br />
In case Bluetooth playback stutters, check {{ic|pipewire.service}} using {{ic|systemctl --user status pipewire.service}}. If there are errors like this one, <br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}} in<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.codecs = [sbc]<br />
...<br />
}}<br />
<br />
Try enabling mSBC support (fixes mic on Sony 1000XM3):<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
...<br />
actions = {<br />
...<br />
update-props = {<br />
...<br />
bluez5.msbc-support = true<br />
...<br />
}}<br />
<br />
Restart PipeWire using {{ic|systemctl --user restart pipewire.service}} for the changes to take effect.<br />
<br />
=== No devices detected after PipeWire update and reboot (git / >=0.3.23) ===<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf<br />
~/.config/pipewire/pipewire.conf|output=<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}<br />
}}<br />
<br />
=== Noticeable audio delay when starting playback ===<br />
<br />
This is caused by node suspension when inactive. It can be disabled by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
=== Audio cutting out when multiple streams start playing ===<br />
<br />
This problem can typically be diagnosed by running {{ic|journalctl --user -b -u pipewire-pulse}} and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
=== Audio is distorted ===<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Uncomment the {{ic|1=default.clock.rate = 48000}} setting in {{ic|/etc/pipewire/pipewire.conf}} and reduce the value to {{ic|44100}}<br />
<br />
=== Audio problems after standby ===<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=696767PipeWire2021-09-19T16:06:50Z<p>Scrumplex: Note about WebRTC screen sharing being broken for some clients with xdp >=0.10.0</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on ''audio'' and ''video'' [[user group]]s but rather it uses a [[Polkit]]-like security model asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation. Other packages, such as {{Pkg|pipewire-alsa}}, {{Pkg|pipewire-pulse}}, and {{Pkg|pipewire-jack}} are normally not needed unless one wants to [[#Audio|use PipeWire as a PulseAudio/JACK replacement]]. Also available are {{Pkg|lib32-pipewire}} and {{Pkg|lib32-pipewire-jack}} for multilib support.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/ryuukyu/helvum|{{AUR|helvum}} or {{AUR|helvum-git}}}}<br />
<br />
== Usage ==<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed].<br />
<br />
{{Note|1=<nowiki/><br />
* {{Pkg|xdg-desktop-portal}} 0.10.0 fixed a mismatch between specification and implementation of its D-Bus interface. [https://github.com/flatpak/xdg-desktop-portal/pull/609] <br />
* Some clients may not work with xdg-desktop-portal 0.10.0 or newer.<br />
* Current progress for [https://github.com/obsproject/obs-studio/pull/5294 OBS Studio], [https://bugs.chromium.org/p/chromium/issues/detail?id=1250940 Chromium] and [https://bugzilla.mozilla.org/show_bug.cgi?id=1731469 Firefox]<br />
}}<br />
<br />
The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gtk}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based compositor (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the following URL:<br />
<br />
chrome://flags/#enable-webrtc-pipewire-capturer<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work you need to install {{Pkg|pipewire-media-session}} [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ/db63ec1ab6c0170334c1d1f45d1ebe543cc375fa#how-do-i-run-xdpw] and make sure that {{ic|1=XDG_CURRENT_DESKTOP=sway}} is set in the session [https://github.com/emersion/xdg-desktop-portal-wlr#running]. You need to set {{ic|1=XDG_SESSION_TYPE=wayland}} as well [https://github.com/emersion/xdg-desktop-portal-wlr/issues/117].<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
=== Video ===<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
=== Audio ===<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ this blog entry] for more information.<br />
<br />
==== ALSA/Legacy applications ====<br />
<br />
Install {{Pkg|pipewire-alsa}} to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or execute {{ic|systemctl start --user pipewire-pulse.service}} to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
If PipeWire does not work correctly on system startup, validate that the [[Systemd/User]] services {{ic|pipewire-pulse.service}}, {{ic|pipewire.service}}, and {{ic|pipewire-media-session.service}} are up and running. Keep in mind that {{ic|pipewire-pulse.service}} and {{ic|pipewire-pulse.socket}} have a {{ic|ConditionUser}} against running as root.<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} and use {{ic|pw-jack}} to launch JACK clients with the compatible libraries instead of the original {{ic|libjack*}}:<br />
<br />
pw-jack ''application''<br />
<br />
It is also possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" pw-jack ''application''<br />
<br />
Alternatively, install {{AUR|pipewire-jack-dropin}} or uninstall {{AUR|jack}}/{{Pkg|jack2}} to let JACK clients load the compatible libraries automatically.<br />
<br />
Use {{ic|ldd}} to verify that the JACK application links to the correct library:<br />
<br />
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2=<br />
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)<br />
}}<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. More specifically, the media session daemon checks for {{ic|/etc/pipewire/media-session.d/with-pulseaudio}}, and enables its {{ic|bluez5}} module automatically if the file exists.<br />
<br />
The configuration is located in the {{ic|bluez-monitor}} configuration file, either {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} (for system-wide configuration) or {{ic|~/.config/pipewire/media-session.d/bluez-monitor.conf}} (for user-specific configuration). A template for the configuration file can be copied from {{ic|/usr/share/pipewire/media-session.d/bluez-monitor.conf}}.<br />
<br />
===== Automatic profile selection =====<br />
<br />
To automatically switch between HSP/HFP and A2DP profiles when an input stream is detected, set the {{ic|bluez5.autoswitch-profile}} property to {{ic|true}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, enable these two services specifying {{ic|default_null_sink}} as argument for ''pulseaudio-null-sink'' service:<br />
<br />
systemctl --user enable pulseaudio-null-sink@default_null_sink.service<br />
systemctl --user enable jack-carla-rack.service<br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and see https://github.com/werman/noise-suppression-for-voice#pipewire. Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
== Troubleshooting ==<br />
<br />
{{Out of date|Factory config files were moved from /etc/pipewire/ to /usr/share/pipewire/. System wide config can still be done in /etc/pipewire/ and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire/. https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44}}<br />
<br />
=== Microphone is not detected by PipeWire ===<br />
<br />
PipeWires {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}} in {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, under {{ic|rules}} -> the first rule -> {{ic|actions}} -> {{ic|update-props}}:<br />
<br />
...<br />
update-props = {<br />
api.alsa.use-acp = false<br />
...<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
=== No sound after connecting to Bluetooth device ===<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
=== Low volume ===<br />
<br />
After replacing PulseAudio with Pipewire, sound worked fine, but after a reboot, the volume was intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
=== Increasing RLIMIT_MEMLOCK ===<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
=== Changing the sample rate ===<br />
<br />
By default PipeWire sets a global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value) you can do it by editing the line {{ic|1=default.clock.rate = 48000}} in the configuration file {{ic|/etc/pipewire/pipewire.conf}}. For example, if you want 192kHz, uncomment and change value {{ic|48000}} to {{ic|1=default.clock.rate = 192000}}.<br />
<br />
PipeWire can also change output sample rates supported by your DAC. To configure, uncomment and set the line {{ic|1=default.clock.allowed-rates = [ 48000 ]}}, for example, {{ic|[ 44100,48000,88200,96000 ]}}. The sample rate follows the sample rate of the audio stream being played when the card is idle.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm№p}} to {{ic|pcm№c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
=== Sound quality (resampling quality) ===<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to restart PipeWire (without sudo): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (never forget {{ic|pipewire-pulse.socket}} if you want your config changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
Probably it's somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
=== External sound card not activated after reconnect ===<br />
<br />
Check {{ic|~/.config/pipewire-media-session/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire-media-session/}} and restart PipeWire using {{ic|systemctl --user restart pipewire.service}}.<br />
<br />
=== No Sound or pactl info shows Failure: Connection refused ===<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and restart PipeWire-Pulse using {{ic|systemctl --user restart pipewire-pulse.service}}.<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
=== Low audio quality on Bluetooth ===<br />
<br />
In case Bluetooth playback stutters, check {{ic|pipewire.service}} using {{ic|systemctl --user status pipewire.service}}. If there are errors like this one, <br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}} in<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.codecs = [sbc]<br />
...<br />
}}<br />
<br />
Try enabling mSBC support (fixes mic on Sony 1000XM3):<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
...<br />
actions = {<br />
...<br />
update-props = {<br />
...<br />
bluez5.msbc-support = true<br />
...<br />
}}<br />
<br />
Restart PipeWire using {{ic|systemctl --user restart pipewire.service}} for the changes to take effect.<br />
<br />
=== No devices detected after PipeWire update and reboot (git / >=0.3.23) ===<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf<br />
~/.config/pipewire/pipewire.conf|output=<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}<br />
}}<br />
<br />
=== Noticeable audio delay when starting playback ===<br />
<br />
This is caused by node suspension when inactive. It can be disabled by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
=== Audio cutting out when multiple streams start playing ===<br />
<br />
This problem can typically be diagnosed by running {{ic|journalctl --user -b -u pipewire-pulse}} and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
=== Audio is distorted ===<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Uncomment the {{ic|1=default.clock.rate = 48000}} setting in {{ic|/etc/pipewire/pipewire.conf}} and reduce the value to {{ic|44100}}<br />
<br />
=== Audio problems after standby ===<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Firefox&diff=696764Firefox2021-09-19T16:04:17Z<p>Scrumplex: fix typo</p>
<hr />
<div>[[Category:Web browser]]<br />
[[Category:Mozilla]]<br />
[[ar:Firefox]]<br />
[[de:Firefox]]<br />
[[es:Firefox]]<br />
[[fr:Firefox]]<br />
[[ja:Firefox]]<br />
[[ko:Firefox]]<br />
[[ru:Firefox]]<br />
[[zh-hans:Firefox]]<br />
[[zh-hant:Firefox]]<br />
{{Related articles start}}<br />
{{Related|Firefox/Tweaks}}<br />
{{Related|Firefox/Profile on RAM}}<br />
{{Related|Firefox/Privacy}}<br />
{{Related|Browser extensions}}<br />
{{Related|Chromium}}<br />
{{Related|Opera}}<br />
{{Related articles end}}<br />
[https://www.mozilla.org/firefox Firefox] is a popular open source graphical web browser from [https://www.mozilla.org Mozilla].<br />
<br />
== Installing ==<br />
<br />
Firefox can be [[install]]ed with the {{Pkg|firefox}} package.<br />
<br />
Other alternatives include:<br />
<br />
* {{App|Firefox Developer Edition|for developers|https://www.mozilla.org/firefox/developer/|{{Pkg|firefox-developer-edition}}}}<br />
* {{App|Firefox Extended Support Release|long-term supported version|https://www.mozilla.org/firefox/organizations/|{{AUR|firefox-esr}} or {{AUR|firefox-esr-bin}}}}<br />
* {{App|Firefox Beta|cutting-edge version|https://www.mozilla.org/firefox/channel/desktop/#beta|{{AUR|firefox-beta}} or {{AUR|firefox-beta-bin}}}}<br />
* {{App|Firefox Nightly|nightly builds for testing ([https://developer.mozilla.org/Firefox/Experimental_features experimental features])|https://www.mozilla.org/firefox/channel/desktop/#nightly|{{AUR|firefox-nightly}}}} <br />
* {{App|Firefox KDE|Version of Firefox that incorporates an OpenSUSE patch for better [[#KDE integration|KDE integration]] than is possible through simple Firefox plugins.|https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox|{{AUR|firefox-kde-opensuse}}}}<br />
* On top of the different Mozilla build channels, a number of forks exist with more or less special features; see [[List of applications#Gecko-based]].<br />
<br />
A number of language packs are available for Firefox, other than the standard English. Language packs are usually named as {{ic|firefox-i18n-''languagecode''}} (where {{ic|''languagecode''}} can be any language code, such as '''de''', '''ja''', '''fr''', etc.). For a list of available language packs see [https://archlinux.org/packages/extra/any/firefox-i18n/ firefox-i18n] for {{Pkg|firefox}},[https://archlinux.org/packages/community/any/firefox-developer-edition-i18n/ firefox-developer-edition-i18n] for {{Pkg|firefox-developer-edition}} and [https://aur.archlinux.org/packages/?K=firefox-nightly- firefox-nightly-] for {{AUR|firefox-nightly}}.<br />
<br />
{{Note|1=Language packs are disabled on ''-nightly'' and ''-developer-edition'' due to frequent string changes that may cause crashes. To force a change to the UI language, you may set {{ic|intl.locale.requested}} in {{ic|about:config}} [https://www.reddit.com/r/firefox/comments/lx3dp9/how_to_change_interface_language/gpovlsp/?context=8&depth=9].}}<br />
<br />
== Add-ons ==<br />
<br />
Firefox is well known for its large library of add-ons which can be used to add new features or modify the behavior of existing features. Firefox's "Add-ons Manager" is used to manage installed add-ons or find new ones. <br />
<br />
For instructions on how to install add-ons and a list of add-ons, see [[Browser extensions]].<br />
<br />
=== Adding search engines ===<br />
<br />
Search engines may be added to Firefox by creating bookmarks with the {{ic|Location}} field using search URLs completed with %s in place of the query and the {{ic|Keyword}} field completed with user-defined characters:<br />
<br />
Location:<br />
https://duckduckgo.com/html/?q=%s<br />
Keyword:<br />
d<br />
<br />
Searches are performed by pre-pending the search term with the keyword of the specified search engine: {{ic|d archwiki}} will query DuckDuckGo using the search term {{ic|archwiki}}<br />
<br />
Search engines may also be added to Firefox through add-on extensions, see [https://addons.mozilla.org/firefox/search-tools/ this page] for a list of available search tools and engines.<br />
<br />
A very extensive list of search engines can be found at the [https://mycroftproject.com/ Mycroft Project].<br />
<br />
Also, you can use the [https://firefox.maltekraus.de/extensions/add-to-search-bar add-to-searchbar] extension to add a search to your search bar from any web site, by simply right clicking on the site's search field and selecting ''Add to Search Bar...''<br />
<br />
==== firefox-extension-arch-search ====<br />
<br />
[[Install]] the {{AUR|firefox-extension-arch-search}} package to add Arch-specific searches (AUR, wiki, forum, packages, etc) to the Firefox search toolbar.<br />
<br />
== Plugins ==<br />
<br />
Support for all plugins, including Flash Player, was removed in Firefox 85.[https://support.mozilla.org/kb/npapi-plugins][https://support.mozilla.org/kb/end-support-adobe-flash]<br />
<br />
== Configuration ==<br />
<br />
Firefox exposes a number of configuration options. To examine them, enter in the Firefox address bar:<br />
<br />
about:config<br />
<br />
Once set, these affect the user's current profile, and may be synchronized across all devices via [https://www.mozilla.org/firefox/sync/ Firefox Sync]. Please note that only a subset of the {{ic|about:config}} entries are synchronized by this method, and the exact subset may be found by searching for {{ic|services.sync.prefs}} in {{ic|about:config}}. Additional preferences and third party preferences may be synchronized by creating new boolean entries prepending the config value with [https://support.mozilla.org/en-US/kb/sync-custom-preferences services.sync.prefs.sync]. To synchronize the whitelist for the extension [https://addons.mozilla.org/firefox/addon/noscript/ NoScript]:<br />
<br />
services.sync.prefs.sync.capability.policy.maonoscript.sites<br />
<br />
The boolean {{ic|noscript.sync.enabled}} must be set to {{ic|true}} to synchronize the remainder of NoScript's preferences via Firefox Sync.<br />
<br />
=== Settings storage ===<br />
<br />
Firefox stores the configuration for a profile via a {{ic|prefs.js}} in the profile folder, usually {{ic|~/.mozilla/firefox/xxxxxxxx.default/}}. <br />
<br />
Firefox also allows configuration for a profile via a {{ic|user.js}} file: [http://kb.mozillazine.org/User.js_file user.js] kept also in the profile folder. A {{ic|user.js}} configuration supersedes a {{ic|prefs.js}}. For a useful starting point, see e.g [https://github.com/pyllyukko/user.js custom user.js] which is targeted at privacy/security conscious users.<br />
<br />
One drawback of the above approach is that it is not applied system-wide. Furthermore, this is not useful as a "pre-configuration", since the profile directory is created after first launch of the browser. You can, however, let ''firefox'' create a new profile and, after closing it again, [https://support.mozilla.org/en-US/kb/back-and-restore-information-firefox-profiles#w_restoring-a-profile-backup copy the contents] of an already created profile folder into it. <br />
<br />
Sometimes it may be desired to lock certain settings, a feature useful in widespread deployments of customized Firefox. In order to create a system-wide configuration, follow the steps outlined in [http://kb.mozillazine.org/Locking_preferences Locking preferences]:<br />
<br />
1. Create {{ic|/usr/lib/firefox/defaults/pref/local-settings.js}}:<br />
<br />
pref("general.config.obscure_value", 0);<br />
pref("general.config.filename", "mozilla.cfg");<br />
<br />
2. Create {{ic|/usr/lib/firefox/mozilla.cfg}} (this stores the actual configuration):<br />
<br />
//<br />
//...your settings...<br />
// e.g to disable Pocket, uncomment the following lines<br />
// lockPref("extensions.pocket.enabled", false);<br />
// lockPref("browser.newtabpage.activity-stream.feeds.section.topstories", false);<br />
<br />
Please note that the first line must contain exactly {{ic|//}}. The syntax of the file is similar to that of {{ic|user.js}}.<br />
<br />
=== Multimedia playback ===<br />
<br />
Firefox uses [[FFmpeg]] for playing multimedia inside HTML5 {{ic|<audio>}} and {{ic|<video>}} elements. Go to [http://demo.nimius.net/video_test/ video-test page] or [https://hpr.dogphilosophy.net/test/ audio-test page] to check which formats are actually supported.<br />
<br />
Firefox uses [[PulseAudio]] for audio playback and capture. If PulseAudio is not installed, Firefox uses [[alsa]] instead.<br />
<br />
==== HTML5 DRM/Widevine ====<br />
<br />
Widevine is a digital rights management tool that Netflix, Amazon Prime Video, and others use to protect their video content. It can be enabled in ''Preferences > General > Digital Rights Management (DRM) Content''. If you visit a Widevine-enabled page when this setting is disabled, Firefox will display a prompt below the address bar asking for permission to install DRM. Approve this and then wait for the "Downloading" bar to disappear, you are now able to watch videos from Widevine protected sites. <br />
<br />
Firefox can only play 720p video (or lower) with Widevine, due to not using [https://bugzilla.mozilla.org/show_bug.cgi?id=1700815 hardware DRM playback]. It is also required that the private mode browsing is disabled, for the window and in the preferences.<br />
<br />
==== Open With extension ====<br />
<br />
# Install [https://addons.mozilla.org/firefox/addon/open-with/ Open With] add-on.<br />
# Go to ''Add-ons > Open With > Preferences''.<br />
# Proceed with instructions to install a file in your system and test the installation. <br />
# Click ''Add browser''.<br />
# In the dialog write a name for this menu entry and command to start a video streaming capable player (e.g. [[mpv|/usr/bin/mpv]]).<br />
# (Optional step) Add needed arguments to the player (e.g. you may want {{ic|--force-window --ytdl}} for ''mpv'')<br />
# Right click on links or visit pages containing videos. Select newly created entry from Open With's menu and if the site is supported, the player will open as expected.<br />
<br />
The same procedure can be used to associate video downloaders such as ''youtube-dl''.<br />
<br />
==== Hardware video acceleration ====<br />
<br />
[[Hardware video acceleration]] via VA-API is available under [[Wayland]] [https://mastransky.wordpress.com/2020/06/03/firefox-on-fedora-finally-gets-va-api-on-wayland/] and [[Xorg]] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619523] [https://www.phoronix.com/scan.php?page=news_item&px=Firefox-80-VA-API-X11].<br />
<br />
To enable VA-API in Firefox:<br />
<br />
# Ensure that your video card is correctly configured for VA-API:<br />
#* See [[Hardware video acceleration]] for steps to verify and install VA-API drivers if required.<br />
# Use a compositor that supports hardware acceleration, either:<br />
#* WebRender from the new Servo browser engine, which can be enabled as explained in [[/Tweaks#Enable WebRender compositor]]. It is enabled by default in GNOME and other desktop environments [https://mastransky.wordpress.com/2021/01/10/firefox-were-finally-getting-hw-acceleration-on-linux/]. Ensure you are not running Software WebRender as that won't work as of August 2021 [https://bugzilla.mozilla.org/show_bug.cgi?id=1723540#c1].<br />
#* Gecko's legacy OpenGL back-end, which can be enabled as explained in [[/Tweaks#Enable Legacy OpenGL compositor]].<br />
# Set the following flags in {{ic|about:config}}:<br />
#* {{ic|media.ffmpeg.vaapi.enabled}} to {{ic|true}} in order to enable the use of VA-API with FFmpeg.<br />
#* {{ic|media.ffvpx.enabled}} to {{ic|false}} to disable the internal decoders for VP8/VP9. This is necessary despite [https://bugzilla.mozilla.org/show_bug.cgi?id=1660336 this bug] being fixed [https://bugzilla.mozilla.org/show_bug.cgi?id=1720363#c6][https://bugzilla.mozilla.org/show_bug.cgi?id=1683808].<br />
#* {{ic|media.navigator.mediadatadecoder_vpx_enabled}} to {{ic|true}} to enable hardware VA-API decoding for WebRTC [https://bugzilla.mozilla.org/show_bug.cgi?id=1709009].<br />
#* {{ic|media.rdd-vpx.enabled}} to {{ic|false}} to disable the remote data decoder process for VP8/VP9. Firefox attempts to use the RDD process for VP8/VP9 but the RDD sandbox blocks VA-API access [https://bugzilla.mozilla.org/show_bug.cgi?id=1673184]. Disabling the remote data decoder for VP8/VP9 process means VA-API will run in the content process instead. The best solution is to move VA-API to the GPU process [https://bugzilla.mozilla.org/show_bug.cgi?id=1683808].<br />
#** Another possible workaround is to completely disable the RDD process by setting {{ic|media.rdd-process.enabled}} to {{ic|false}}, instead of just disabling it for VP8/VP9 as above.<br />
#* On Intel, in some cases VA-API might not work with the Intel iHD driver {{Pkg|intel-media-driver}}. This might be workaroundable by using the Intel i965 driver {{Pkg|libva-intel-driver}} [https://bugzilla.mozilla.org/show_bug.cgi?id=1619585#c42] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619585#c62] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619585#c63]. <br />
#** As a last resort, the content process sandbox can be disabled. However, this is a serious security risk and disables protection against attackers. It is recommended to leave the sandbox settings as default [https://bugzilla.mozilla.org/show_bug.cgi?id=1683808#c26]. Nevertheless, to disable the content sandbox set {{ic|security.sandbox.content.level}} to {{ic|0}} [https://bugzilla.mozilla.org/show_bug.cgi?id=1720363#c9].<br />
# Run Firefox with the following [[environment variable]] enabled:<br />
#* In Wayland, with {{ic|1=MOZ_ENABLE_WAYLAND=1}}, see [[#Wayland]].<br />
#* In X.org, with {{ic|1=MOZ_X11_EGL=1}} or set {{ic|gfx.x11-egl.force-enabled}} to {{ic|true}} and {{ic|gfx.x11-egl.force-disabled}} to {{ic|false}} in {{ic|about:config}}.<br />
<br />
{{Warning|Disabling the content process sandbox is a security risk, in the future VA-API will be moved to the GPU process so it is properly sandboxed.}}<br />
<br />
{{Tip|<br />
* As well as following [[Hardware video acceleration#Verification]], one can confirm VA-API usage by checking Firefox VA-API logs. Run Firefox with the {{ic|1=MOZ_LOG="PlatformDecoderModule:5"}} environment variable and check in the log output that VA-API is enabled and used (search for the "VA-API" string) when playing a video for example. Pay attention to these logs as they might indicate that only one of the two possible compositors described before (WebRender or OpenGL) works with VA-API on your particular setup.<br />
* To allow hardware decoding in YouTube, the video codec used must be supported by the hardware. The profiles supported by your GPU can be checked with [[Hardware video acceleration#Verifying VA-API]] and the YouTube codecs used can ''sometimes'' (if offered by YouTube!) be controlled with the [https://addons.mozilla.org/firefox/addon/h264ify/ h264ify] or [https://addons.mozilla.org/firefox/addon/enhanced-h264ify/ enhanced-h264ify] extensions. Alternatively, you can install {{AUR|firefox-h264ify}}.<br />
}}<br />
<br />
{{Note|1=<nowiki/><br />
* NVIDIA's proprietary driver potentially has support for DMA-BUF in the 470 drivers [https://bugs.kde.org/show_bug.cgi?id=428089#c2][https://www.phoronix.com/scan.php?page=news_item&px=NVIDIA-DMA-BUF-Wayland-KDE]. DMA-BUF is necessary for hardware video acceleration in Firefox [https://bugzilla.mozilla.org/show_bug.cgi?id=1669189#c4]. If DMA-BUF support is present {{Pkg|libva-vdpau-driver}} will be necessary as Firefox does not natively support [[VDPAU]].<br />
* Currently Firefox's VA-API implementation can decode H.264/AVC, VP8 & VP9 encoded video. AV1 support may be added in the future [https://bugzilla.mozilla.org/show_bug.cgi?id=1652958].<br />
* Multi-GPU systems should automatically choose a suitable GPU for VA-API according to this [https://bugzilla.mozilla.org/show_bug.cgi?id=1588904#c36 solved issue].<br />
* Some videos (e.g. YouTube VR) may show a black image after setting {{ic|media.ffvpx.enabled}} to {{ic|false}} [https://bugzilla.mozilla.org/show_bug.cgi?id=1667537].<br />
* To workaround VA-API not working correctly in the RDD process, the RDD process sandbox can be disabled instead of moving VA-API to the content process as suggested above. This is not recommended since disabling the sandbox is a large security risk and disables protection against attackers. Set the environment variable {{ic|1=MOZ_DISABLE_RDD_SANDBOX=1}} to disable RDD sandbox. <br />
* [[AMDGPU]] users under {{Pkg|linux-hardened}} may need to rebuild ''linux-hardened'' with {{ic|1=CONFIG_CHECKPOINT_RESTORE=y}} due to {{Pkg|mesa}} [https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/mesa/mesa-9999.ebuild requiring the kcmp syscall]. This may no longer be necessary due to this [https://bugzilla.mozilla.org/show_bug.cgi?id=1624743 bug being solved].<br />
}}<br />
<br />
=== Spell checking ===<br />
<br />
Firefox can use system-wide installed [[Hunspell]] dictionaries as well as dictionaries installed through its own extension system.<br />
<br />
To enable spell checking for a specific language right click on any text field and check the ''Check Spelling'' box. To select a language for spell checking to you have right click again and select your language from the ''Languages'' sub-menu.<br />
<br />
When your default language choice does not stick, see [[#Firefox does not remember default spell check language]].<br />
<br />
==== System-wide Hunspell dictionaries ====<br />
<br />
Install [[Hunspell]] and its dictionaries for the languages you require.<br />
<br />
==== Dictionaries as extensions ====<br />
<br />
To get more languages right click on any text field and just click ''Add Dictionaries...'' and select the dictionary you want to install from the [https://addons.mozilla.org/firefox/language-tools/ Dictionaries and Language Packs list].<br />
<br />
{{Tip|For Russian, the extension is packaged as {{Pkg|firefox-spell-ru}}.}}<br />
<br />
=== KDE integration ===<br />
<br />
* To bring the [[KDE]] look to GTK apps (including Firefox), install {{Pkg|breeze-gtk}} and {{Pkg|kde-gtk-config}}. Afterwards, go to System Settings and in ''Appearance > Application Style > Configure GNOME/GTK Application Style…'' choose 'Breeze'.<br />
* To use the KDE file selection and print dialogs in Firefox 64 or newer, install {{Pkg|xdg-desktop-portal}} and {{Pkg|xdg-desktop-portal-kde}}, then do one of the following:<br />
** Set {{ic|widget.use-xdg-desktop-portal}} to {{ic|true}} in {{ic|about:config}}.<br />
** Launch firefox with {{ic|1=GTK_USE_PORTAL=1}} [[environment variable]].<br />
::{{Note|1=Using {{ic|1=GTK_USE_PORTAL=1}} or setting {{ic|widget.use-xdg-desktop-portal}} to {{ic|true}} will result in [https://bugzilla.mozilla.org/show_bug.cgi?id=1516290 Firefox asking to set default browser every time Firefox starts].}}<br />
* For integration with [[KDE]] MIME type system, proxy and file dialog, one can use {{AUR|firefox-kde-opensuse}} variant from AUR with OpenSUSE’s patches applied. Alternatively, integration with MIME types can be achieved by creating a symbolic link to the MIME database {{ic|~/.config/mimeapps.list}} from the deprecated {{ic|~/.local/share/applications/mimeapps.list}} that is used by Firefox. See [[XDG MIME Applications#mimeapps.list]].<br />
* Extensions/add-ons may provide additional integration, such as:<br />
** Browser integration in [[Plasma]]: requires {{Pkg|plasma-browser-integration}} and the [https://addons.mozilla.org/firefox/addon/plasma-integration/ Plasma Integration add-on].<br />
<br />
== Tips and tricks ==<br />
<br />
For general enhancements see [[Firefox/Tweaks]], for privacy related enhancements see [[Firefox/Privacy]].<br />
<br />
=== Dark themes ===<br />
<br />
If a dark [[GTK]] theme is in use (e.g. Arc Dark), it is recommended to start Firefox with a brighter one (e.g. Adwaita). See [[GTK#Themes]] and [[Firefox/Tweaks#Unreadable input fields with dark GTK themes]] for more information.<br />
<br />
Alternatively, starting with Firefox 68 you can make all the Firefox interfaces and even other websites respect dark themes, irrespective of the system GTK theme and Firefox theme. To do this, set {{ic|browser.in-content.dark-mode}} to {{ic|true}} and {{ic|ui.systemUsesDarkTheme}} to {{ic|1}} in {{ic|about:config}} [https://bugzilla.mozilla.org/show_bug.cgi?id=1488384#c23].<br />
<br />
=== Frame rate ===<br />
<br />
If Firefox is unable to automatically detect the right value, it will default to 60 fps. To manually correct this, set {{ic|layout.frame_rate}} to the refresh rate of your monitor (e.g. 144 for 144 Hz).<br />
<br />
=== Memory limit ===<br />
<br />
To prevent pages from abusing memory (and possible [[Wikipedia:Out_of_memory|OOM]]), we can use [[Firejail]] with the {{ic|rlimit-as}} option.<br />
<br />
=== New tabs position ===<br />
<br />
To control where new tabs appears (relative or absolute), use {{ic|browser.tabs.insertAfterCurrent}} and {{ic|browser.tabs.insertRelatedAfterCurrent}}. See [https://support.mozilla.org/en/questions/1229062] for more information.<br />
<br />
=== Screenshot of webpage ===<br />
<br />
You can ''Take a Screenshot'' by either clicking the ''Page actions'' button (the three horizontal dots) in the address bar or by right-clicking on the webpage. See [https://support.mozilla.org/en-US/kb/firefox-screenshots] for more information.<br />
<br />
As an alternative you can use the screenshot button in the [https://developer.mozilla.org/en-US/docs/Tools/Taking_screenshots Developer Tools].<br />
<br />
=== Wayland ===<br />
<br />
More recent versions of Firefox support opting into [[Wayland]] mode via an environment variable.<br />
<br />
$ MOZ_ENABLE_WAYLAND=1 firefox<br />
<br />
To make this permanent, see [[Environment variables#Graphical environment]] and start Firefox via the desktop launcher like you normally would. To verify it worked check the ''Window Protocol'' again.<br />
<br />
You may enter {{ic|about:support}} in the URL bar to check the ''Window Protocol''. It should say ''wayland'' instead of ''x11'' or ''xwayland''.<br />
<br />
On native Wayland Firefox rendering performance can be significantly improved by setting {{ic|gfx.webrender.compositor.force-enabled}} to true in {{ic|about:config}}. As of Firefox 89, this feature is experimental and Firefox Nightly is recommended for testing.<br />
<br />
All rendering is allowed to occur in native compositor surfaces, resulting in more efficient rendering, improving performance and battery life [https://bugzilla.mozilla.org/show_bug.cgi?id=1617498]. Ensure [[/Tweaks#Enable WebRender compositor]] is also enabled and working. GNOME 40.1/3.38.5 or KDE 5.22 or later are considered testable compositors [https://bugzilla.mozilla.org/show_bug.cgi?id=1617498#c13].<br />
<br />
=== Window manager rules ===<br />
<br />
To apply different configurations to Firefox windows, change the WM_CLASS string by using Firefox's {{ic|--class}} option, to a custom one.<br />
<br />
==== Profiles ====<br />
<br />
To start new Firefox instances, multiple profiles are required. To create a new profile:<br />
<br />
$ firefox [--new-instance] -P<br />
<br />
Class can be specified when launching Firefox with a not-in-use profile:<br />
<br />
$ firefox [--new-instance] -P ''profile_name'' --class=''class_name''<br />
<br />
=== Touchscreen gestures and pixel-perfect trackpad scrolling ===<br />
<br />
{{Merge|Firefox/Tweaks#Enable touchscreen gestures|Same solution.}}<br />
<br />
To enable touch gestures (like scrolling and pinch-to-zoom) and one-to-one trackpad scrolling (as can be witnessed with GTK3 applications like Nautilus), set the {{ic|1=MOZ_USE_XINPUT2=1}} [[environment variable]] before starting Firefox.<br />
<br />
=== Multiple home pages ===<br />
<br />
To have multiple tabs opened when starting Firefox open a new window and then open the sites you want to have as "home tabs".<br />
<br />
Now go to ''Preferences > Home'' and under ''Homepage and new windows'' click the ''Use Current Pages'' button.<br />
<br />
Alternatively go directly to ''Preferences > Home'' and now under ''Homepage and new windows'' set the first field to ''Custom URLs..'' and enter the pages you want as new home pages in the following format:<br />
<br />
<nowiki>https://url1.com|https://url2.com|https://url3.com</nowiki><br />
<br />
== Troubleshooting ==<br />
<br />
=== Safe Mode ===<br />
<br />
The command line switch {{ic|--safe-mode}} starts Firefox in [http://kb.mozillazine.org/Safe_Mode Safe Mode], which disables extensions, themes and some other features for this session.<br />
<br />
=== Disable hardware video acceleration ===<br />
<br />
To force disable hardware video acceleration in Firefox, e.g. in case of freezes, start Firefox in [[#Safe Mode|Safe Mode]] or set {{ic|layers.acceleration.disabled}} to {{ic|true}} in {{ic|about:config}}.<br />
<br />
=== Extension X does not work on some Mozilla owned domains ===<br />
<br />
By default extensions will not affect pages designated by {{ic|extensions.webextensions.restrictedDomains}}. If this is not desired, this field can be cleared (special pages such as {{ic|about:*}} will not be affected).<br />
<br />
=== Firefox startup takes very long ===<br />
<br />
If Firefox takes much longer to start up than other browsers, it may be due to lacking configuration of the localhost in {{ic|/etc/hosts}}. See [[Network configuration#Local network hostname resolution]] on how to set it up.<br />
<br />
=== Font troubleshooting ===<br />
<br />
See [[Font configuration]].<br />
<br />
Firefox has a setting which determines how many replacements it will allow from fontconfig. To allow it to use all your replacement-rules, change {{ic|gfx.font_rendering.fontconfig.max_generic_substitutions}} to {{ic|127}} (the highest possible value).<br />
<br />
Firefox ships with ''Twemoji Mozilla'' font. To use system emoji font set {{ic|font.name-list.emoji}} to {{ic|emoji}} in {{ic|about:config}}.<br />
<br />
Firefox has problems with [[Emoji]] presentation [https://bugzilla.mozilla.org/show_bug.cgi?id=1509988]. Set {{ic|gfx.font_rendering.fontconfig.max_generic_substitutions}} to {{ic|0}} as workaround.<br />
<br />
=== Setting an email client ===<br />
<br />
Inside the browser, {{ic|mailto}} links by default are opened by a web application such as Gmail or Yahoo Mail. To set an external email program, go to ''Preferences > Applications'' and modify the ''action'' corresponding to the {{ic|mailto}} content type; the file path will need to be designated (e.g. {{ic|/usr/bin/kmail}} for Kmail).<br />
<br />
Outside the browser, {{ic|mailto}} links are handled by the {{ic|x-scheme-handler/mailto}} mime type, which can be easily configured with [[xdg-mime]]. See [[Default applications]] for details and alternatives.<br />
<br />
=== File association ===<br />
<br />
See [[Default applications]].<br />
<br />
=== Firefox keeps creating ~/Desktop even when this is not desired ===<br />
<br />
Firefox uses {{ic|~/Desktop}} as the default place for download and upload files. To change it to another folder, set the {{ic|XDG_DESKTOP_DIR}} option as explained in [[XDG user directories]].<br />
<br />
=== Make plugins respect blocked pop-ups ===<br />
<br />
Some plugins can misbehave and bypass the default settings, such as the Flash plugin. You can prevent this by doing the following:<br />
<br />
# Type {{ic|about:config}} into the address bar.<br />
# Right-click on the page and select ''New > Integer''.<br />
# Name it {{ic|privacy.popups.disable_from_plugins}}.<br />
# Set the value to {{ic|2}}.<br />
<br />
The possible values are:<br />
<br />
* {{ic|'''0'''}}: Allow all popups from plugins.<br />
* {{ic|'''1'''}}: Allow popups, but limit them to {{ic|dom.popup_maximum}}.<br />
* {{ic|'''2'''}}: Block popups from plugins.<br />
* {{ic|'''3'''}}: Block popups from plugins, even on whitelisted sites.<br />
<br />
=== Changes to userChrome.css and userContent.css are ignored ===<br />
<br />
Set {{ic|toolkit.legacyUserProfileCustomizations.stylesheets}} to {{ic|true}} in {{ic|about:config}}<br />
<br />
=== Middle-click behavior ===<br />
<br />
To use the middle mouse button to paste whatever text has been highlighted/added to the clipboard, as is common in UNIX-like operating systems, set either {{ic|middlemouse.contentLoadURL}} or {{ic|middlemouse.paste}} to {{ic|true}} in {{ic|about:config}}. Having {{ic|middlemouse.contentLoadURL}} enabled was the default behaviour prior to Firefox 57.<br />
<br />
To scroll on middle-click (default for Windows browsers) set {{ic|general.autoScroll}} to {{ic|true}}.<br />
<br />
=== Backspace does not work as the 'Back' button ===<br />
<br />
According to [http://kb.mozillazine.org/Browser.backspace_action MozillaZine], the {{ic|Backspace}} key was mapped based on which platform the browser was running on. As a compromise, this preference was created to allow the {{ic|Backspace}} key to either go back/forward, scroll up/down a page, or do nothing.<br />
<br />
To make {{ic|Backspace}} go back one page in the tab's history and {{ic|Shift+Backspace}} go forward, set {{ic|browser.backspace_action}} to {{ic|0}} in {{ic|about:config}}.<br />
<br />
To have the {{ic|Backspace}} key scroll up one page and {{ic|Shift+Backspace}} scroll down one page, set {{ic|browser.backspace_action}} to {{ic|1}}. Setting this property to any other value will leave the key unmapped (Arch Linux defaults to {{ic|2}}, in other words, it is unmapped by default).<br />
<br />
=== Firefox does not remember login information ===<br />
<br />
It may be due to a corrupted {{ic|cookies.sqlite}} file in [https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data Firefox's profile] folder. In order to fix this, just rename or remove {{ic|cookie.sqlite}} while Firefox is not running.<br />
<br />
Open a terminal of choice and type the following:<br />
<br />
$ rm -f ~/.mozilla/firefox/<profile id>.default/cookies.sqlite<br />
<br />
The profile id is a random 8 character string.<br />
<br />
Restart Firefox and see if it solved the problem.<br />
<br />
If it did not work, check if there exists a {{ic|cookies.sqlite.bak}} file that you could use to manually restore the cookies.<br />
<br />
=== Cannot enter/leave fullscreen ===<br />
<br />
If Firefox detects an [https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html EWMH/ICCCM] compliant window manager, it will try to send a WM_STATE message to the root window to request Firefox be made to enter (or leave) full-screen mode (as defined by the window manager). Window managers are allowed to ignore it, but if they do, Firefox will assume the request got denied and propagate it to the end user which results in nothing happening. This may result in not being able to full screen a video. A general workaround is to set the {{ic|full-screen-api.ignore-widgets}} to {{ic|true}} in {{ic|about:config}}. <br />
<br />
Related bug reports: [https://bugzilla.mozilla.org/show_bug.cgi?id=1189622 Bugzilla 1189622].<br />
<br />
=== Firefox detects the wrong version of my plugin ===<br />
<br />
When you close Firefox, the latter saves the current timestamp and version of your plugins inside {{ic|pluginreg.dat}} located in your profile folder, typically in {{ic|~/.mozilla/firefox/''xxxxxxxx''.default/}}.<br />
<br />
If you upgraded your plugin when Firefox was still running, you will thus have the wrong information inside that file. The next time you will restart Firefox you will get that message {{ic|Firefox has prevented the outdated plugin "XXXX" from running on ...}} when you will be trying to open content dedicated to that plugin on the web. This problem often appears with the official [[Browser plugins#Adobe Flash Player|Adobe Flash Player plugin]] which has been upgraded while Firefox was still running.<br />
<br />
The solution is to remove the file {{ic|pluginreg.dat}} from your profile and that is it. Firefox will not complain about the missing file as it will be recreated the next time Firefox will be closed. [https://bugzilla.mozilla.org/show_bug.cgi?id=1109795#c16]<br />
<br />
=== JavaScript context menu does not appear on some sites ===<br />
<br />
You can try setting {{ic|dom.w3c_touch_events.enabled}} to {{ic|0}} in {{ic|about:config}}.<br />
<br />
=== Firefox does not remember default spell check language ===<br />
<br />
The default spell checking language can be set as follows:<br />
<br />
# Type {{ic|about:config}} in the address bar.<br />
# Set {{ic|spellchecker.dictionary}} to your language of choice, for instance {{ic|en_GB}}.<br />
# Notice that the for dictionaries installed as a Firefox plugin the notation is {{ic|en-GB}}, and for {{Pkg|hunspell}} dictionaries the notation is {{ic|en_GB}}.<br />
<br />
When you only have system wide dictionaries installed with {{Pkg|hunspell}}, Firefox might not remember your default dictionary language settings. This can be fixed by having at least one [https://addons.mozilla.org/firefox/language-tools/ dictionary] installed as a Firefox plugin. Notice that now you will also have a tab ''Dictionaries'' in ''Add-ons''. You may have to change the order of ''preferred language for displaying pages'' in {{ic|about:preferences#general}} to make the spell check default to the language of the addon dictionary.<br />
<br />
Related questions on the '''StackExchange''' platform: [https://stackoverflow.com/questions/26936792/change-firefox-spell-check-default-language/29446115], [https://stackoverflow.com/questions/21542515/change-default-language-on-firefox/29446353], [https://askubuntu.com/questions/184300/how-can-i-change-firefoxs-default-dictionary/576877]<br />
<br />
Related bug reports: [https://bugzilla.mozilla.org/show_bug.cgi?id=776028 Bugzilla 776028], [https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1026869 Ubuntu bug 1026869]<br />
<br />
=== Some MathML symbols are missing ===<br />
<br />
You need some Math fonts, namely Latin Modern Math and STIX (see this MDN page: [https://developer.mozilla.org/en-US/docs/Mozilla/MathML_Project/Fonts#Linux]), to display MathML correctly.<br />
<br />
In Arch Linux, these fonts are provided by {{Pkg|texlive-core}} '''and''' {{Pkg|texlive-fontsextra}}, but they are not available to fontconfig by default. See [[TeX Live#Making fonts available to Fontconfig]] for details. You can also try other [[Fonts#Math|Math fonts]]. In case you encounter this bug [https://bugzilla.mozilla.org/show_bug.cgi?id=1208776] installing {{Pkg|otf-latinmodern-math}} can help.<br />
<br />
=== Tearing video in fullscreen mode ===<br />
<br />
If you are using the Xorg Intel or Nouveau drivers and experience tearing video in fullscreen mode, try [[Firefox/Tweaks#Enable Legacy OpenGL compositor]].<br />
<br />
=== Tearing when scrolling ===<br />
<br />
Try disabling smooth scrolling in ''Preferences > Browsing''.<br />
<br />
=== Firefox WebRTC module cannot detect a microphone ===<br />
<br />
WebRTC applications for instance [https://mozilla.github.io/webrtc-landing/gum_test.html Firefox WebRTC getUserMedia test page] say that microphone cannot be found. Issue is reproducible for both ALSA or PulseAudio setup. Firefox debug logs show the following error:<br />
<br />
{{hc|1=$ NSPR_LOG_MODULES=MediaManager:5,GetUserMedia:5 firefox|2=<br />
...<br />
[Unnamed thread 0x7fd7c0654340]: D/GetUserMedia VoEHardware:GetRecordingDeviceName: Failed 1<br />
}}<br />
<br />
You can try setting {{ic|media.navigator.audio.full_duplex}} property to {{ic|false}} at {{ic|about:config}} Firefox page and restart Firefox.<br />
<br />
This can also help if you are using the PulseAudio [[PulseAudio#Microphone echo/noise cancellation|module-echo-cancel]] and Firefox does not recognise the virtual echo canceling source.<br />
<br />
=== Cannot login with my Chinese account ===<br />
<br />
Firefox provides a local service for Chinese users, with a local account totally different from the international one. Firefox installed with the {{Pkg|firefox}} package uses the international account system by default, to change into the Chinese local service, you should install the add-on manager on [http://mozilla.com.cn/thread-343905-1-1.html this page], then you can login with your Chinese account now.<br />
<br />
=== No audio on certain videos when using JACK and PulseAudio ===<br />
<br />
If you are using JACK in combination with PulseAudio and cannot hear any sound on some videos it could be because those videos have mono audio. This happens if your JACK setup uses more than just stereo, but you use normal headphones. To fix this you simply have to connect the {{ic|front-center}} port from the PulseAudio JACK Sink to both {{ic|playback_1}} and {{ic|playback_2}} ports of the system output.<br />
<br />
You can also do this automatically using a script:<br />
<br />
{{hc|jack-mono.sh<br />
|2=#!/bin/sh<br />
jack_connect "PulseAudio JACK Sink:front-center" "system:playback_1"<br />
jack_connect "PulseAudio JACK Sink:front-center" "system:playback_2"<br />
}}<br />
<br />
Keep in mind that the names for the sink and the ports might be different for you. You can check what your JACK setup looks like with a Patchbay like Catia from {{Pkg|cadence}}.<br />
<br />
=== Geolocation does not work ===<br />
<br />
Recently, Google limited the use of its location service with Arch Linux, which causes the following error when geolocation is enabled on a website: {{ic|Geolocation error: Unknown error acquiring position}}. Region-locked services such as [https://www.hulu.com/ Hulu] may display a similar error indicating that your location could not be determined even though you have allowed location services for the site.<br />
<br />
To avoid these problems, you can switch to use the [https://location.services.mozilla.com/ Mozilla Location Service]. In {{ic|about:config}} change the {{ic|geo.provider.network.url}} setting to:<br />
<br />
<nowiki>https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%</nowiki><br />
<br />
See {{Bug|65241}} for more details.<br />
<br />
=== Right mouse button instantly clicks the first option in window managers ===<br />
<br />
This problem has been observed in [[i3]], [[bspwm]] and [[xmonad]].<br />
<br />
To fix it, navigate to {{ic|about:config}} and change {{ic|ui.context_menus.after_mouseup}} to {{ic|true}}.<br />
<br />
See [https://www.reddit.com/r/i3wm/comments/88k0yt/right_mouse_btn_instantly_clicks_first_option_in/]<br />
<br />
=== Applications on Wayland can not launch Firefox ===<br />
<br />
Some applications running in XWayland mode try to launch the X11 edition of Firefox. If the browser already runs in Wayland native mode, the user will receive the error {{ic|Firefox is already running, but is not responding. To use Firefox, you must first close the existing Firefox process, restart your device, or use a different profile.}} while Firefox itself is fully operational. <br />
<br />
This can be worked around by setting the [[environment variable]] {{ic|1=MOZ_DBUS_REMOTE=1}}.<br />
<br />
{{Note|1=It is not sufficient to only set this variable in the ''.desktop'' file for Firefox, as it must be set for either the whole session or all XWayland applications. Consider additionally setting [[#Wayland]] globally. [https://bugzilla.mozilla.org/show_bug.cgi?id=1508803]}}<br />
<br />
=== Firefox window does not repaint after disabling or enabling compositing ===<br />
<br />
Unset the environment variable {{ic|MOZ_X11_EGL}}.<br />
<br />
Related bug report: [https://bugzilla.mozilla.org/show_bug.cgi?id=1711039 Bugzilla 1711039].<br />
<br />
=== Firefox continuously asks to be set as default browser upon launch ===<br />
<br />
There are a couple things you can try: if you are using a [[desktop environment]], check if Firefox is set as the default browser in your system settings. If it is not, then set it, otherwise you can run the following {{man|1|xdg-settings}} command, provided by the [[xdg-utils]] package, to query which browser is set as default on your system:<br />
<br />
$ xdg-settings get default-web-browser<br />
<br />
If no value is returned or it is not Firefox, then run this command to set it:<br />
<br />
$ xdg-settings set default-web-browser firefox.desktop<br />
<br />
If Firefox still asks to be set as the default browser, then it may be quieted if it is set to handle ''http'' and ''https'' URL schemes. To do so, run these {{man|1|xdg-mime}} commands: <br />
<br />
$ xdg-mime default firefox.desktop x-scheme-handler/http<br />
$ xdg-mime default firefox.desktop x-scheme-handler/https<br />
<br />
If those do not work either, check if you have set the environment variable {{ic|GTK_USE_PORTAL}} (all values trigger the bug), in which case, unset it. Related bug report: [https://bugzilla.mozilla.org/show_bug.cgi?id=1516290 Bugzilla 1516290]. If that does not work or you did not set it, navigate Firefox to {{ic|about:config}}, check if the variable {{ic|widget.use-xdg-desktop-portal}} is set to {{ic|true}} and, if so, set it to {{ic|false}}.<br />
<br />
=== Video stuttering ===<br />
<br />
If you experience video stuttering and you notice that Firefox is only hitting one core at 100% when watching videos (especially higher resolution videos), this might help you.<br />
<br />
Go into {{ic|about:config}} and search for {{ic|dom.ipc.processCount}} and change {{ic|dom.ipc.processCount.file}} from 1 to a higher number. An ad hoc method to find a good number is to increase it one at a time until you get good results, but 4 seems to be a good value.<br />
<br />
== See also ==<br />
<br />
* [https://www.mozilla.org/firefox/ Official website]<br />
* [https://www.mozilla.org/ Mozilla Foundation]<br />
* [[MozillaWiki:Firefox]]<br />
* [[Wikipedia:Mozilla Firefox]]<br />
* [https://addons.mozilla.org/ Firefox Add-ons]<br />
* [https://addons.mozilla.org/firefox/themes/ Firefox themes]<br />
* [https://ftp.mozilla.org/pub/firefox/releases/ Mozilla's FTP]<br />
* [http://forums.mozillazine.org/ mozillaZine] unofficial forums</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=PipeWire&diff=696746PipeWire2021-09-19T15:41:32Z<p>Scrumplex: Mention OBS Studio supporting PipeWire screen sharing</p>
<hr />
<div>[[Category:Multimedia]]<br />
[[fi:PipeWire]]<br />
[[ja:PipeWire]]<br />
[[pt:PipeWire]]<br />
[[ru:PipeWire]]<br />
{{Related articles start}}<br />
{{Related|PipeWire/Examples}}<br />
{{Related articles end}}<br />
<br />
[https://pipewire.org PipeWire] is a new low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]], [[JACK]], [[ALSA]] and [[GStreamer]]-based applications.<br />
<br />
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.<br />
<br />
PipeWire also supports containers like [[Flatpak]] and does not rely on ''audio'' and ''video'' [[user group]]s but rather it uses a [[Polkit]]-like security model asking Flatpak or Wayland for permission to record screen or audio.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|pipewire}} package from the official repositories.<br />
<br />
Pipewire uses [[systemd/User]] for management of the server and automatic socket activation.<br />
<br />
Optionally, install {{Pkg|pipewire-docs}} to review the documentation. Other packages, such as {{Pkg|pipewire-alsa}}, {{Pkg|pipewire-pulse}}, and {{Pkg|pipewire-jack}} are normally not needed unless one wants to [[#Audio|use PipeWire as a PulseAudio/JACK replacement]]. Also available are {{Pkg|lib32-pipewire}} and {{Pkg|lib32-pipewire-jack}} for multilib support.<br />
<br />
=== GUI ===<br />
<br />
* {{App|Helvum|GTK-based patchbay for pipewire, inspired by the JACK tool catia.|https://gitlab.freedesktop.org/ryuukyu/helvum|{{AUR|helvum}} or {{AUR|helvum-git}}}}<br />
<br />
== Usage ==<br />
<br />
=== WebRTC screen sharing ===<br />
<br />
Most applications used to rely on X11 for capturing the desktop (or individual applications), for example when using WebRTC in web browsers (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.<br />
<br />
This requires {{Pkg|xdg-desktop-portal}} and one of its backends [https://jgrulich.cz/2018/07/04/how-to-enable-and-use-screen-sharing-on-wayland to be installed]. The available backends are:<br />
<br />
* {{Pkg|xdg-desktop-portal-gtk}} for GNOME.<br />
* {{Pkg|xdg-desktop-portal-kde}} for KDE.<br />
* {{Pkg|xdg-desktop-portal-wlr}} for wlroots-based compositor (e.g. [[Sway]], [https://github.com/djpohly/dwl dwl])<br />
<br />
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable [https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire support] by setting the corresponding (experimental) flag at the following URL:<br />
<br />
chrome://flags/#enable-webrtc-pipewire-capturer<br />
<br />
{{Pkg|obs-studio}} (27+) supports this method by using the new PipeWire capture source.<br />
<br />
For {{ic|xdg-desktop-portal-wlr}} to work you need to install {{Pkg|pipewire-media-session}} [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ/db63ec1ab6c0170334c1d1f45d1ebe543cc375fa#how-do-i-run-xdpw] and make sure that {{ic|1=XDG_CURRENT_DESKTOP=sway}} is set in the session [https://github.com/emersion/xdg-desktop-portal-wlr#running]. You need to set {{ic|1=XDG_SESSION_TYPE=wayland}} as well [https://github.com/emersion/xdg-desktop-portal-wlr/issues/117].<br />
<br />
{{Tip|To share an individual monitor with {{ic|xdg-desktop-portal-wlr}} if you have more than one, you can use configuration file options, see {{man|5|xdg-desktop-portal-wlr|SCREENCAST OPTIONS}}:<br />
{{hc|~/.config/xdg-desktop-portal-wlr/config|2=<br />
chooser_type = none<br />
output_name = ''Monitor''<br />
}}<br />
In [[Sway]], you can get the ''Monitor'' value using the {{ic|swaymsg -t get_outputs}} command.}}<br />
<br />
{{Accuracy|Since [https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 this pull request] was merged, the following note about specific app/window sharing may be not correct anymore for {{Pkg|xdg-desktop-portal-gtk}}. Also see the ticket tracking the discussion at [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204].}}<br />
<br />
Note that the only supported feature is sharing the entire desktop and not a specific app/window [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows][https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO].<br />
<br />
=== Video ===<br />
<br />
Although the software is not yet production-ready, it is safe to play around with. Most applications that rely on [[GStreamer]] to handle e.g. video streams should work out-of-the-box using the PipeWire GStreamer plugin, see [[GStreamer#PipeWire]]. Applications like e.g. {{Pkg|cheese}} are therefore already able to share video input using it.<br />
<br />
=== Audio ===<br />
<br />
PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients. See [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ this blog entry] for more information.<br />
<br />
==== ALSA/Legacy applications ====<br />
<br />
Install {{Pkg|pipewire-alsa}} to route all application using the ALSA API through PipeWire.<br />
<br />
==== PulseAudio clients ====<br />
<br />
Install {{Pkg|pipewire-pulse}}. It will replace {{Pkg|pulseaudio}} and {{Pkg|pulseaudio-bluetooth}}. Reboot, re-login or execute {{ic|systemctl start --user pipewire-pulse.service}} to see the effect. <br />
<br />
Normally, no further action is needed, as the user service {{ic|pipewire-pulse.socket}} should be enabled automatically by the package. To check if the replacement is working, run the following command and see the output:<br />
<br />
{{hc|1=$ pactl info|2=<br />
...<br />
Server Name: PulseAudio (on PipeWire 0.3.32)<br />
...<br />
}}<br />
<br />
If PipeWire does not work correctly on system startup, validate that the [[Systemd/User]] services {{ic|pipewire-pulse.service}}, {{ic|pipewire.service}}, and {{ic|pipewire-media-session.service}} are up and running. Keep in mind that {{ic|pipewire-pulse.service}} and {{ic|pipewire-pulse.socket}} have a {{ic|ConditionUser}} against running as root.<br />
<br />
==== JACK clients ====<br />
<br />
Install {{Pkg|pipewire-jack}} and use {{ic|pw-jack}} to launch JACK clients with the compatible libraries instead of the original {{ic|libjack*}}:<br />
<br />
pw-jack ''application''<br />
<br />
It is also possible to request a custom buffer size by setting a quotient of buffersize/samplerate (which equals the block latency in seconds):<br />
<br />
PIPEWIRE_LATENCY="128/48000" pw-jack ''application''<br />
<br />
Alternatively, install {{AUR|pipewire-jack-dropin}} or uninstall {{AUR|jack}}/{{Pkg|jack2}} to let JACK clients load the compatible libraries automatically.<br />
<br />
Use {{ic|ldd}} to verify that the JACK application links to the correct library:<br />
<br />
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2=<br />
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)<br />
}}<br />
<br />
==== Bluetooth devices ====<br />
<br />
PipeWire handles Bluetooth audio devices if the {{Pkg|pipewire-pulse}} package is installed. More specifically, the media session daemon checks for {{ic|/etc/pipewire/media-session.d/with-pulseaudio}}, and enables its {{ic|bluez5}} module automatically if the file exists.<br />
<br />
The configuration is located in the {{ic|bluez-monitor}} configuration file, either {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} (for system-wide configuration) or {{ic|~/.config/pipewire/media-session.d/bluez-monitor.conf}} (for user-specific configuration). A template for the configuration file can be copied from {{ic|/usr/share/pipewire/media-session.d/bluez-monitor.conf}}.<br />
<br />
===== Automatic profile selection =====<br />
<br />
To automatically switch between HSP/HFP and A2DP profiles when an input stream is detected, set the {{ic|bluez5.autoswitch-profile}} property to {{ic|true}}:<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
{<br />
...<br />
actions = {<br />
update-props = {<br />
...<br />
bluez5.autoswitch-profile = true<br />
...<br />
}}<br />
<br />
==== Run PipeWire on top of native JACK ====<br />
<br />
PipeWire can also run as a JACK client on top of the native JACK daemon if desired. See [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] for more information.<br />
<br />
== Audio post-processing ==<br />
<br />
=== EasyEffects ===<br />
<br />
EasyEffects (former PulseEffects) is a GTK utility which provides a large array of audio effects and filters to individual application output streams and microphone input streams. Notable effects include an input/output equalizer, output loudness equalization and bass enhancement, input de-esser and noise reduction plug-in. See [https://github.com/wwmm/easyeffects the GitHub page] for a full list of effects.<br />
<br />
In order to use EasyEffects, install {{Pkg|easyeffects}}. See [https://github.com/wwmm/easyeffects/wiki/Community-presets Community Presets] for a collection of preset configurations. See [https://github.com/jaakkopasanen/AutoEq AutoEq] for collection of AI generated EQ presets for headphones.<br />
<br />
{{Note|For PulseEffects legacy version, see [[PulseAudio#PulseEffects]].}}<br />
<br />
=== NoiseTorch ===<br />
<br />
NoiseTorch is an alternative way for noise suppression. {{AUR|noisetorch}}. There also exists a binary version, {{AUR|noisetorch-bin}}, as well as a {{AUR|noisetorch-git}}.<br />
<br />
After starting it the module can be loaded for the selected microphone. It is possible to adjust the voice activation threshold, which should be set to the highest level, not filtering out any actual voice.<br />
<br />
=== LADSPA, LV2 and VST plugins ===<br />
<br />
If you want to choose between the full list of available LADSPA, LV2 and VST plugins, you can apply them using a custom Pulseaudio null sink and Carla Jack host. Install {{Pkg|pipewire-pulse}}, {{Pkg|pipewire-jack}} and {{Pkg|carla}}. At the begin, create a new Pulseaudio null sink named {{ic|default_null_sink}}.<br />
<br />
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR<br />
<br />
Start Carla through Pipewire, {{ic|pw-jack carla-rack}}. In ''Rack'' tab add whichever plugin you want. Make sure they are ''stereo'' type. You can change their order, the one on top of the list will be the first to receive the audio stream, just like in EasyEffects. Afterwards move to ''Patchbay'' tab and connect the {{ic|default_null_sink}} L/R monitors to Carla inputs, then Carla outputs to the playbacks of your desired device (speakers, earphones, HDMI, etc). Save the configuration to a local folder, i.e. {{ic|~/Documents/carla_sink_effects.carxp}}.<br />
<br />
You can test the effects while a multimedia application is reproducing audio, i.e. watching a video on a website through Firefox. There are two methods to do it. The first one, inside Carla ''Patchbay'' tab, disconnecting all Firefox connections and linking its L/R outputs to {{ic|default_null_sink}} playbacks. The second through {{Pkg|pavucontrol}}, locating Firefox audio stream and redirecting it to {{ic|default_null_sink}} (this should remember the connection to automatically redirect the application to the same sink on the next instance).<br />
<br />
To apply these settings at startup, create two systemd user service units:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service|output=<br />
[Unit]<br />
Description=Load Carla Rack JACK host<br />
<br />
[Service]<br />
PassEnvironment="PIPEWIRE_LINK_PASSIVE=true"<br />
Type=exec<br />
ExecStart=/usr/bin/pw-jack carla-rack -n<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
{{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output=<br />
[Unit]<br />
Description=Load %i Pulseaudio null sink<br />
Before=jack-carla-rack.service<br />
After=pipewire-pulse.service<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR<br />
ExecStop=/usr/bin/pactl unload-module module-null-sink<br />
RemainAfterExit=yes<br />
<br />
[Install]<br />
WantedBy=default.target<br />
}}<br />
<br />
Then override ''jack-carla-rack'' service specifying the full path of your Carla configuration at ''Environment'' directive:<br />
<br />
{{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output=<br />
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp"<br />
ExecStart=<br />
ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE<br />
}}<br />
<br />
At last, enable these two services specifying {{ic|default_null_sink}} as argument for ''pulseaudio-null-sink'' service:<br />
<br />
systemctl --user enable pulseaudio-null-sink@default_null_sink.service<br />
systemctl --user enable jack-carla-rack.service<br />
<br />
Note that if you set the {{ic|default_null_sink}} as the default device in system settings, all applications will be redirected to it and the volume keys will change its level, not the one on the speakers. If you want to control volume speakers, leave them as the default in system settings and redirect your desired application to {{ic|default_null_sink}} inside pavucontrol (Pipewire compatibility layer will remember the connection on the next instance of the same application).<br />
<br />
=== Noise suppression for voice ===<br />
<br />
Install {{AUR|noise-suppression-for-voice}} and see https://github.com/werman/noise-suppression-for-voice#pipewire. Then, set the noise cancelled source as default in your audio settings. You might need to restart your application prior being able to use it.<br />
<br />
== Troubleshooting ==<br />
<br />
{{Out of date|Factory config files were moved from /etc/pipewire/ to /usr/share/pipewire/. System wide config can still be done in /etc/pipewire/ and user config in $HOME/.config/pipewire/, but files must be copied from /usr/share/pipewire/. https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1609126bcd720304b7a4c81b87cc3e70ae91ff44}}<br />
<br />
=== Microphone is not detected by PipeWire ===<br />
<br />
PipeWires {{ic|alsa-monitor}} module uses {{Pkg|alsa-card-profiles}} to detect devices by default. If this is not working for you, try to turn off {{ic|api.alsa.use-acp}}, or optionally turn on {{ic|api.alsa.use-ucm}} in {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, under {{ic|rules}} -> the first rule -> {{ic|actions}} -> {{ic|update-props}}:<br />
<br />
...<br />
update-props = {<br />
api.alsa.use-acp = false<br />
...<br />
<br />
Then, restart pipewire and check available devices:<br />
<br />
{{hc| 1=<br />
$ pw-record --list-targets<br />
|2=<br />
Available targets ("*" denotes default): 62<br />
58: description="Built-in Audio" prio=1872<br />
60: description="Built-in Audio" prio=2000<br />
* 62: description="Built-in Audio (Loopback PCM)" prio=1984<br />
}}<br />
<br />
=== No sound after connecting to Bluetooth device ===<br />
<br />
As of 2020-12-07, if there is no sound after connecting a Bluetooth device, you might need to switch the default sink and/or move a sink input to the correct sink. Use {{ic|pactl list sinks}} to list the available sinks and {{ic|pactl set-default-sink}} to switch the default sink to the Bluetooth device. This can be automated via [[udev]] using a script similar to [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e this one].<br />
<br />
See this [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit thread] for a discussion of the issue. According to author of the script, the headset profile (HSP) might still have problems.<br />
<br />
=== Low volume ===<br />
<br />
After replacing PulseAudio with Pipewire, sound worked fine, but after a reboot, the volume was intolerably low.<br />
<br />
Open {{ic|alsamixer}}, use {{ic|F6}} to select the proper soundcard, and make sure the ALSA volumes are at 100%. {{ic|alsactl}} should maintain this setting after reboot.<br />
<br />
=== Increasing RLIMIT_MEMLOCK ===<br />
<br />
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK<br />
<br />
Install {{Pkg|realtime-privileges}} and add your own user to the {{ic|realtime}} group.<br />
<br />
Alternatively, increasing memlock from 64kB to 128kB seems enough to fix this. If you are running {{ic|pipewire-pulse}} under [[systemd/User]], add:<br />
<br />
username soft memlock 64<br />
username hard memlock 128<br />
<br />
to {{ic|/etc/security/limits.d/username.conf}}<br />
<br />
=== Changing the sample rate ===<br />
<br />
By default PipeWire sets a global sample rate of 48kHz. If you need to change it (e.g. you own a DAC supporting a higher value) you can do it by editing the line {{ic|1=default.clock.rate = 48000}} in the configuration file {{ic|/etc/pipewire/pipewire.conf}}. For example, if you want 192kHz, uncomment and change value {{ic|48000}} to {{ic|1=default.clock.rate = 192000}}.<br />
<br />
PipeWire can also change output sample rates supported by your DAC. To configure, uncomment and set the line {{ic|1=default.clock.allowed-rates = [ 48000 ]}}, for example, {{ic|[ 44100,48000,88200,96000 ]}}. The sample rate follows the sample rate of the audio stream being played when the card is idle.<br />
<br />
To check out which output sample rate and sample format are the data sent to DAC (probably you need to change digits):<br />
cat /proc/asound/card0/pcm0p/sub0/hw_params<br />
To check out which input sample rate is used, change {{ic|pcm№p}} to {{ic|pcm№c}} ({{ic|c}} is short for "capture", {{ic|p}} is for "playback").<br />
<br />
=== Sound quality (resampling quality) ===<br />
<br />
If you used PulseAudio with {{ic|1=resample-method = speex-float-10}} or {{ic|soxr-vhq}}, then you might consider uncommenting and changing {{ic|1=resample.quality = 4}} to {{ic|10}} or the maximum {{ic|15}} in {{ic|stream.properties}} block in both {{ic|/etc/pipewire/client.conf}} and {{ic|/etc/pipewire/pipewire-pulse.conf}} (copy them from {{ic|/usr/share/pipewire/}} if they do not exist). Do not forget to restart PipeWire (without sudo): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (never forget {{ic|pipewire-pulse.socket}} if you want your config changes to be applied).<br />
<br />
There is a very little quality difference between {{ic|10}} and {{ic|15}}, but the CPU load difference is 2-3x. And the latency difference between {{ic|4}}, {{ic|10}}, {{ic|15}} is yet to be investigated by anybody. {{ic|1= resample.quality = 15}} on 44100→48000 Hz on Ryzen 2600 causes {{ic|pipewire}} or {{ic|pipewire-pulse}} processes to cause 4.0% one CPU core load.<br />
<br />
You can compare resamplers here: https://src.infinitewave.ca/ (do not pay attention to anything above 18 KHz and over 120 dB). speex is listed as "Xiph.org Speex".<br />
<br />
PipeWire uses its own resampling algorithm called Spa. Like with SoX's {{ic|sox}}, Speex's {{ic|speexenc}}, PipeWire includes its standalone version: {{ic|spa-resample}}. Usage:<br />
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav<br />
<br />
Probably it's somehow possible to use other resamplers by creating your own sink. Or just use a plugin in your music player (e.g., Qmmp has SoX plugin).<br />
<br />
=== External sound card not activated after reconnect ===<br />
<br />
Check {{ic|~/.config/pipewire-media-session/default-profile}} if there is any entry with default profile "off" and remove it. If that does not help, remove all files from {{ic|~/.config/pipewire-media-session/}} and restart PipeWire using {{ic|systemctl --user restart pipewire.service}}.<br />
<br />
=== No Sound or pactl info shows Failure: Connection refused ===<br />
<br />
It means applications are unable to connect to the PipeWire-Pulse service, confirm that {{ic|/etc/pipewire/pipewire-pulse.conf}} exists and is not empty and restart PipeWire-Pulse using {{ic|systemctl --user restart pipewire-pulse.service}}.<br />
<br />
If that does not fix it, run {{ic|strace -f -o /tmp/pipe.txt pactl info}} and pastebin {{ic|/tmp/pipe.txt}} while seeking help on IRC ([ircs://irc.oftc.net/pipewire #pipewire] on OFTC) or the mailing-lists.<br />
<br />
=== Low audio quality on Bluetooth ===<br />
<br />
In case Bluetooth playback stutters, check {{ic|pipewire.service}} using {{ic|systemctl --user status pipewire.service}}. If there are errors like this one, <br />
<br />
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered<br />
<br />
check the currently selected codec using {{ic|pactl list sinks}} and try changing it by setting {{ic|bluez5.codecs}} to one of {{ic|sbc aac ldac aptx aptx_hd}} in<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
properties = {<br />
...<br />
bluez5.codecs = [sbc]<br />
...<br />
}}<br />
<br />
Try enabling mSBC support (fixes mic on Sony 1000XM3):<br />
<br />
{{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output=<br />
...<br />
rules = [<br />
...<br />
actions = {<br />
...<br />
update-props = {<br />
...<br />
bluez5.msbc-support = true<br />
...<br />
}}<br />
<br />
Restart PipeWire using {{ic|systemctl --user restart pipewire.service}} for the changes to take effect.<br />
<br />
=== No devices detected after PipeWire update and reboot (git / >=0.3.23) ===<br />
<br />
As of commit [https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88 012a68f8], a new [[user unit]] has been added which is disabled by default, meaning there is no ''pipewire-media-session'' running on user login. Run this program on login by [[enabling]] the {{ic|pipewire-media-session.service}} user unit.<br />
<br />
If the user or the package manager have not sorted out the configuration file changes after update, then another instance of ''pipewire-media-session'' might be running in {{ic|pipewire.service}}. Verify whether this is the case by checking the [[unit status]] of the {{ic|pipewire.service}} user unit. If it shows ''pipewire'' and ''pipewire-media-session'' running, update your system and/or user configuration:<br />
<br />
{{hc|/etc/pipewire/pipewire.conf<br />
~/.config/pipewire/pipewire.conf|output=<br />
context.exec = {<br />
...<br />
# Line below should be commented out<br />
#"/usr/bin/pipewire-media-session" = { args = "" }<br />
...<br />
}<br />
}}<br />
<br />
=== Noticeable audio delay when starting playback ===<br />
<br />
This is caused by node suspension when inactive. It can be disabled by editing {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} depending on where the delay occurs and changing property {{ic|session.suspend-timeout-seconds}} to 0 to disable or to experiment with other values and see what works. Alternatively you can comment out the line {{ic|suspend-node}} in {{ic|/etc/pipewire/media-session.d/media-session.conf}}. Restart both the {{ic|pipewire}} and {{ic|pipewire-pulse}} systemd services to apply these changes, or alternatively reboot.<br />
<br />
=== Audio cutting out when multiple streams start playing ===<br />
<br />
This problem can typically be diagnosed by running {{ic|journalctl --user -b -u pipewire-pulse}} and finding lines similar to:<br />
<br />
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940<br />
<br />
According to the [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors official PipeWire troubleshooting guide], to solve this problem edit {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}}, uncomment the line saying {{ic|1=api.alsa.headroom = 0}} and change its value to {{ic|1024}}.<br />
<br />
=== Audio is distorted ===<br />
<br />
* For microphones, try navigating to the card that is having issues after running {{ic|alsamixer}} and use the arrow keys to reduce any "Mic Boost" or "Internal Mic Boost" options.<br />
* Uncomment the {{ic|1=default.clock.rate = 48000}} setting in {{ic|/etc/pipewire/pipewire.conf}} and reduce the value to {{ic|44100}}<br />
<br />
=== Audio problems after standby ===<br />
<br />
If the sound is missing or otherwise garbled after waking the machine up from sleep, it might help to reinitialize ALSA:<br />
<br />
# alsactl init<br />
<br />
== See also ==<br />
<br />
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab<br />
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — Blog post from January 2018 outlining the state of PipeWire at the time<br />
* [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — Blog post from September 2020</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Talk:Dotfiles&diff=671562Talk:Dotfiles2021-05-16T20:00:14Z<p>Scrumplex: /* Move Tools section into List of applications */ new section</p>
<hr />
<div>== Bare repository and alias method ==<br />
<br />
Hi all, I'd love to expand this out to include the method coved in [https://news.ycombinator.com/item?id=11070797 this HN discussion]. The simplicity of it is rather beautiful and it keeps the tracking isolated from the rest of $HOME.<br />
Before I do that, I'm new here so don't want to just start making sizeable edits with some form of discussion. Can anyone see any advantages of the currently listed gitignore method that this does not provide? -- [[User:Kimburgess|Kimburgess]] ([[User talk:Kimburgess|talk]])<br />
<br />
:So basically all it does is hide the untracked files in the commit window? IOW, a half-baked variant of [[Dotfiles#Using_gitignore]] which actually ignores the files instead of hiding them. One example where this is better if you end up running {{ic|git clean}}. If the files are not ignored, they'd end up deleted. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 12:51, 26 December 2016 (UTC)<br />
<br />
::Almost. Although it's hiding rather than excluding, there's one important difference — the actual repo is in a sub directory, not the base of $HOME. This means when you're sitting in the $HOME tree, attempting to run any vanilla git commands will fail (as it's not a repo). This protects you a little, but also stops any git cruft from showing for users running with git aware prompt strings (i.e. showing current branch / state). You could add a wildcard exclusion to this method as well, but it would come with the tradeoff of losing visibility of what you don't have tracked in your dotfiles.--[[User:Kimburgess|Kimburgess]] ([[User talk:Kimburgess|talk]]) 23:52, 26 December 2016 (UTC)<br />
<br />
:::I've independently implemented https://github.com/eli-schwartz/dotfiles.sh in order to do this, maybe helpful? -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 03:49, 27 January 2019 (UTC)<br />
<br />
== Move Tools section into List of applications ==<br />
<br />
[[List of applications]] might be more suitable to list all the different dotfiles managers than having them listed just here.<br />
<br />
[[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]])</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Dotfiles&diff=671561Dotfiles2021-05-16T19:57:36Z<p>Scrumplex: Add Scrumplex to list of user repositories</p>
<hr />
<div>[[Category:Configuration files]]<br />
[[Category:Configuration management]]<br />
[[es:Dotfiles]]<br />
[[ja:ドットファイル]]<br />
[[pt:Dotfiles]]<br />
{{Related articles start}}<br />
{{Related|XDG Base Directory support}}<br />
{{Related|X resources}}<br />
{{Related articles end}}<br />
User-specific application configuration is traditionally stored in so called [[Wikipedia:dotfile|dotfiles]] (files whose filename starts with a dot). It is common practice to track dotfiles with a [[version control system]] such as [[Git]] to keep track of changes and synchronize dotfiles across various hosts. There are various approaches to managing your dotfiles (e.g. directly tracking dotfiles in the home directory v.s. storing them in a subdirectory and symlinking/copying/generating files with a [[shell]] script or [[#Tools|a dedicated tool]]). Apart from explaining how to manage your dotfiles this article also contains [[#User repositories|a list of dotfile repositories]] from Arch Linux users.<br />
<br />
== Tracking dotfiles directly with Git ==<br />
<br />
The benefit of tracking dotfiles directly with Git is that it only requires [[Git]] and does not involve symlinks. The disadvantage is that [[#Host-specific configuration|host-specific configuration]] generally requires merging changes into multiple [[Git#Branching|branches]].<br />
<br />
The simplest way to achieve this approach is to initialize a [[Git]] repository directly in your home directory and ignoring all files by default with a {{man|5|gitignore}} pattern of {{ic|*}}. This method however comes with two drawbacks: it can become confusing when you have other Git repositories in your home directory (e.g. if you forget to initialize a repository you suddenly operate on your dotfile repository) and you can no longer easily see which files in the current directory are untracked (because they are ignored).<br />
<br />
An alternative method without these drawbacks is the "bare repository and alias method" popularized by [https://news.ycombinator.com/item?id=11070797 this Hacker News comment], which just takes three commands to set up:<br />
<br />
$ git init --bare ~/.dotfiles<br />
$ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'<br />
$ config config status.showUntrackedFiles no<br />
<br />
You can then manage your dotfiles with the created [[alias]]. If you are using [[Bash]] and would like bash completion for this alias, simply install {{AUR|bash-complete-alias}}, then add the alias and the following line to your {{ic|~/.bashrc}}.<br />
<br />
$ complete -F _complete_alias config<br />
<br />
{{Tip|To avoid accidentally commiting confidential information, see [[Git#Filtering confidential information]].}}<br />
<br />
== Host-specific configuration ==<br />
<br />
A common problem with synchronizing dotfiles across various machines is host-specific configuration.<br />
<br />
With [[Git]] this can be solved by maintaining a master branch for all shared configuration, while each individual machine has a machine-specific branch checked out. Host-specific configuration can be committed to the machine-specific branch; when shared configuration is modified in the master branch, the per-machine branches need to be rebased on top of the updated master.<br />
<br />
In configuration scripts like [[Command-line shell#Configuration files|shell configuration files]] conditional logic can be used. For example, [[Bash]] scripts (i.e. {{ic|.bashrc}}) can apply different configuration depending on the machine name (or type, custom variable, etc.):<br />
<br />
if <nowiki>[[ "$(hostname)" == "archlaptop" ]];</nowiki> then<br />
# laptop specific commands here<br />
else<br />
# desktop or server machine commands<br />
fi<br />
<br />
Similar can also be achieved with [[.Xresources]].[https://jnrowe.github.io/articles/tips/Sharing_Xresources_between_systems.html]<br />
<br />
If you find rebasing Git branches too cumbersome, you may want to use a [[#Tools|tool]] that supports ''file grouping'', or if even greater flexibility is desired, a tool that does ''processing''.<br />
<br />
== Tools ==<br />
<br />
;File grouping<br />
:How configuration files can be grouped to configuration groups (also called profiles or packages).<br />
;Processing<br />
:Some tools process configuration files to allow them to be customized depending on the host.<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! Name !! Package !! Written in !! File grouping !! Processing<br />
|-<br />
! [https://github.com/kesslern/dot-templater dot-templater]<br />
| {{AUR|dot-templater-git}} || Rust || directory-based || custom syntax<br />
|-<br />
! [https://github.com/SuperCuber/dotter dotter]<br />
| {{AUR|dotter-rs}} || Rust || configuration file || Handlebars<br />
|-<br />
! [https://deadc0de.re/dotdrop/ dotdrop]<br />
| {{AUR|dotdrop}} || Python || configuration file || Jinja2<br />
|-<br />
! [https://github.com/jbernard/dotfiles dotfiles]<br />
| {{AUR|dotfiles}} || Python || {{Grey|[https://github.com/jbernard/dotfiles/pull/24 No]}} || {{Grey|No}}<br />
|-<br />
! [https://github.com/EvanPurkhiser/dots Dots]<br />
| {{AUR|dots-manager}} || Python || directory-based || custom append points<br />
|-<br />
! [https://github.com/twpayne/chezmoi chezmoi]<br />
| {{Pkg|chezmoi}} || Go || directory-based || Go templates<br />
|-<br />
! [https://www.gnu.org/software/stow/ GNU Stow]<br />
| {{Pkg|stow}} || Perl || directory-based[http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] || {{Grey|No}}<br />
|-<br />
! [https://github.com/lra/mackup Mackup]<br />
| {{AUR|mackup}} || Python || automatic per application || {{Grey|No}}<br />
|-<br />
! [https://github.com/darkfeline/mir.qualia mir.qualia]<br />
| {{AUR|mir.qualia}} || Python || {{Grey|No}} || custom blocks<br />
|-<br />
! [https://github.com/thoughtbot/rcm rcm]<br />
| {{AUR|rcm}} || Perl || directory-based (by host or tag) || {{Grey|No}}<br />
|}<br />
<br />
=== Tools wrapping Git ===<br />
<br />
If you are uncomfortable with [[Git]], you may want to use one of these tools, which abstract the version control system away (more or less).<br />
<br />
{| class="wikitable sortable" style="text-align:center;"<br />
! Name !! Package !! Written in !! File grouping !! Processing<br />
|-<br />
! [https://github.com/kazhala/dotbare dotbare]<br />
| {{AUR|dotbare}} || Shell ({{Pkg|fzf}}) || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/kobus-v-schoor/dotgit dotgit]<br />
| {{AUR|dotgit}} || Python || filename-based || {{Grey|No}}<br />
|-<br />
! [https://github.com/andsens/homeshick homeshick]<br />
| {{AUR|homeshick-git}} || Bash || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/technicalpickles/homesick homesick]<br />
| {{-}} || Ruby || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/pearl-core/pearl Pearl]<br />
| {{AUR|pearl-git}} || Python || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://github.com/RichiH/vcsh vcsh]<br />
| {{AUR|vcsh}} || Shell || repository-wise || {{Grey|No}}<br />
|-<br />
! [https://yadm.io yadm]<sup>(1)</sup><br />
| {{AUR|yadm}} || Bash || filename-based<br>(by class/OS/distro/hostname/user)[https://yadm.io/docs/alternates] ||Built-in templates/Jinja2/ESH[https://yadm.io/docs/templates]<br>(optional)<br />
|}<br />
<br />
# Supports encryption of confidential files with [[GPG]] or OpenSSL. [https://yadm.io/docs/encryption]<br />
<br />
== User repositories ==<br />
<br />
{| class="wikitable sortable" style="text-align:center"<br />
! Author || Shell (Shell framework) || WM / DE || Editor || Terminal || Multiplexer || Audio || Monitor || Mail || IRC || File Manager<br />
|-<br />
! [https://github.com/alfunx/.dotfiles alfunx]<br />
| zsh || awesome || vim || kitty || tmux || ncmpcpp/mpd || htop/lain || thunderbird || ||<br />
|-<br />
! [https://gitlab.com/altaway/dotfiles altaway]<br />
| zsh || bspwm || neovim || alacritty || bspwm || mpv || ytop || gnus+message || rcirc || broot<br />
|-<br />
! [https://gitlab.com/Ambrevar/dotfiles Ambrevar]<br />
| Eshell || EXWM || Emacs || Emacs (Eshell) || Emacs TRAMP + dtach || EMMS || conky/dzen || mu4e || Circe ||<br />
|-<br />
! [https://github.com/ask1234560/dotfiles_bspwm ananthu]<br />
| zsh || bspwm || neovim || alacritty || || mpv || htop, polybar || neomutt || weechat || ranger<br />
|-<br />
! [https://github.com/awalGarg/dotfiles awal]<br />
| fish || i3 || vim || st || tmux || || i3status || || The Lounge ||<br />
|-<br />
! [https://github.com/ayekat/dotfiles ayekat]<br />
| zsh || karuiwm || vim || rxvt-unicode || tmux || ncmpcpp/mpd || karuibar || mutt || irssi ||<br />
|-<br />
! [https://github.com/bamos/dotfiles bamos]<br />
| zsh || i3/xmonad || vim/emacs || rxvt-unicode || tmux || mpv/cmus || conky/xmobar || mutt || ERC ||<br />
|-<br />
! [https://github.com/benmezger/dotfiles benmezger] <br />
| [https://github.com/benmezger/dotfiles zsh/bash/fish] || [https://github.com/benmezger/dotfiles/tree/main/dot_config/i3 i3-gaps] || [https://github.com/benmezger/dotfiles/tree/main/dot_doom.d emacs] || [https://github.com/benmezger/dotfiles/blob/main/dot_Xresources rxvt-unicode] || [https://github.com/benmezger/dotfiles/blob/main/dot_tmux.conf tmux] || || [https://github.com/benmezger/dotfiles/blob/main/dot_config/i3/status.toml.tmpl i3status-rs] || mu4e/neomutt || weechat ||<br />
|-<br />
! [https://github.com/pbrisbin/dotfiles brisbin33]<br />
| [https://github.com/pbrisbin/oh-my-zsh zsh] || [https://github.com/pbrisbin/xmonad-config xmonad] || [https://github.com/pbrisbin/vim-config vim] || rxvt-unicode || screen || || dzen || [https://github.com/pbrisbin/mutt-config mutt] || [https://github.com/pbrisbin/irssi-config irssi] ||<br />
|-<br />
! [https://gitlab.com/BVollmerhaus/dotfiles BVollmerhaus]<br />
| [https://gitlab.com/BVollmerhaus/dotfiles/-/tree/master/config/fish fish] || [https://gitlab.com/BVollmerhaus/dotfiles/blob/master/config/i3/config i3-gaps] || [https://gitlab.com/BVollmerhaus/dotfiles/blob/master/config/kak/kakrc kakoune] || [https://gitlab.com/BVollmerhaus/dotfiles/-/blob/master/config/kitty/kitty.conf kitty] || || || [https://gitlab.com/BVollmerhaus/dotfiles/blob/master/config/polybar/config polybar] || || || [https://gitlab.com/BVollmerhaus/dotfiles/-/tree/master/config/ranger ranger]<br />
|-<br />
! [https://github.com/cinelli/dotfiles cinelli]<br />
| zsh || dwm || vim || termite-git || || pianobar || htop || mutt-kz || weechat ||<br />
|-<br />
! [https://github.com/dikiaap/dotfiles dikiaap]<br />
| zsh || i3-gaps || neovim || alacritty || tmux || || i3blocks || || ||<br />
|-<br />
! [https://github.com/Earnestly/dotfiles Earnestly]<br />
| zsh || i3/orbment || vim/emacs || termite || tmux || mpd || conky || mutt || weechat ||<br />
|-<br />
! [https://github.com/ErikBjare/dotfiles ErikBjare]<br />
| zsh || xmonad/xfce4 || vim || terminator || tmux || || xfce4-panel || || weechat ||<br />
|-<br />
! [https://github.com/falconindy/dotfiles falconindy]<br />
| bash || i3 || vim || rxvt-unicode || || ncmpcpp || conky || mutt || ||<br />
|-<br />
! [https://github.com/filiparag/dotfiles filiparag]<br />
| fish || bspwm || vim || alacritty || tmux || mpv, [https://github.com/altdesktop/playerctl playerctl] || htop, polybar || [https://www.nongnu.org/mailnotify/ mail-notification] || || [https://wiki.lxde.org/en/PCManFM pcmanfm]<br />
|-<br />
! [https://git.sr.ht/~gardenapple/dotfiles gardenapple]<br />
| fish || Sway || neovim || kitty || || || htop || [https://aerc-mail.org/ aerc] || ||<br />
|-<br />
! [https://github.com/graysky2/configs/tree/master/dotfiles graysky]<br />
| zsh || xfce4 || vim || terminal || || ncmpcpp || custom || thunderbird || ||<br />
|-<br />
! [https://github.com/hugdru/dotfiles hugdru]<br />
| zsh || awesome || neovim || rxvt-unicode || tmux || || || thunderbird || weechat ||<br />
|-<br />
! [https://github.com/insanum/dotfiles insanum]<br />
| bash || herbstluftwm || vim || evilvte || tmux || || dzen || mutt-kz || ||<br />
|-<br />
! [https://github.com/isti115/dotfiles isti115]<br />
| [https://github.com/Isti115/dotfiles/blob/master/.config/powershell/Microsoft.PowerShell_profile.ps1 pwsh]<br />
|| [https://github.com/Isti115/dotfiles/blob/master/.config/sway/config sway]<br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/nvim neovim]<br />
|| [https://github.com/Isti115/dotfiles/blob/master/.config/alacritty/alacritty.yml alacritty]<br />
|| tmux<br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/mpv mpv] / playerctl<br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/waybar waybar] / htop / ytop<br />
|| <br />
|| <br />
|| [https://github.com/Isti115/dotfiles/tree/master/.config/ranger ranger]<br />
|-<br />
! [https://hg.sr.ht/~jasonwryan/shiv jasonwryan]<br />
| bash/zsh || dwm || vim || rxvt-unicode || tmux || ncmpcpp || custom || mutt || irssi ||<br />
|-<br />
! [https://github.com/JDevlieghere/dotfiles/ jdevlieghere]<br />
| zsh || xmonad || vim || terminal || tmux || || htop || mutt || weechat ||<br />
|-<br />
! [https://github.com/jelly/Dotfiles jelly]<br />
| zsh || i3 || vim || termite || tmux || ncmpcpp || || mutt-kz-git || weechat ||<br />
|-<br />
! [https://github.com/JonasDe/dotfiles JonasDe] <br />
| zsh || i3 || vim || rxvt-unicode || tmux || || || || ||<br />
|-<br />
! [https://github.com/Jorengarenar/dotfiles Jorengarenar] <br />
| bash || i3 || vim || xterm || || mpv || i3blocks || aerc || weechat ||<br />
|-<br />
! [https://github.com/markuszoppelt/dotfiles MarkusZoppelt]<br />
| zsh || gnome || vim || terminal || tmux || || || || || <br />
|-<br />
! [https://github.com/maximbaz/dotfiles maximbaz]<br />
| zsh || sway || kakoune || kitty || || || waybar || neomutt || || nnn<br />
|-<br />
! [https://git.mehalter.com/mehalter/dotfiles mehalter]<br />
| zsh || i3-gaps || neovim || termite || tmux || cmus || gotop || neomutt || weechat || ranger<br />
|-<br />
! [https://github.com/meskarune/.dotfiles meskarune]<br />
| bash || herbstluftwm || vim || rxvt-unicode || screen || || conky || || weechat ||<br />
|-<br />
! [https://github.com/neersighted/dotfiles neersighted]<br />
| fish || i3 || neovim || alacritty || tmux || ncmpcpp || || || ||<br />
|-<br />
! [https://github.com/oibind/dotfiles oibind]<br />
| fish || awesome || neovim || st || tmux || || htop-vim || || weechat || lf<br />
|-<br />
! [https://github.com/ok100/configs OK100]<br />
| bash || dwm || vim || rxvt-unicode || || cmus || conky, dzen || mutt || weechat ||<br />
|-<br />
! [https://github.com/pablox-cl/dotfiles pablox-cl]<br />
| zsh (zplug) || gnome3 || neovim || kitty || || || || || ||<br />
|-<br />
! [https://gitlab.com/peterzuger/dotfiles peterzuger]<br />
| zsh || i3-gaps || emacs || rxvt-unicode || screen || moc || htop || || ||<br />
|-<br />
! [https://github.com/potamides/dotfiles potamides]<br />
| bash || awesome || neovim || termite || tmux || ncmpcpp || conky,htop || mutt || weechat || ranger<br />
|-<br />
! [https://github.com/reisub0/dot reisub0]<br />
| fish || qtile || neovim || kitty || || mpd || conky || || ||<br />
|-<br />
! [https://gitlab.com/Scrumplex/dotfiles Scrumplex]<br />
| fish || sway || neovim || kitty || || mpd || waybar || || ||<br />
|-<br />
! [https://github.com/shubhamgupta2956/dotfiles shubhamgupta2956]<br />
| zsh || i3-gaps-rounded || vim || terminator || || cmus || htop, i3blocks, gotop || || || ranger, nautilus<br />
|-<br />
! [https://github.com/sistematico/majestic sistematico]<br />
| zsh/fish/bash || [https://github.com/Airblader/i3 i3-gaps] || vim/nano || termite || tmux || ncmpcpp || polybar || mutt || weechat ||<br />
|-<br />
! [https://git.sitilge.id.lv/sitilge/dotfiles sitilge]<br />
| zsh || sway || neovim || alacritty || || || htop || thunderbird || ||<br />
|-<br />
! [https://github.com/thiagowfx/dotfiles thiagowfx]<br />
| bash || i3 || vim/emacs || tilix || || || i3blocks || || ||<br />
|-<br />
! [https://github.com/vodik/dotfiles vodik]<br />
| zsh || xmonad || vim || termite-git || tmux || ncmpcpp || custom || mutt || weechat ||<br />
|-<br />
! [https://github.com/w0ng/dotfiles w0ng]<br />
| zsh || dwm || vim || rxvt-unicode || tmux || ncmpcpp || custom || mutt || irssi ||<br />
|-<br />
! [https://github.com/whitelynx/dotfiles whitelynx]<br />
| fish || i3 || neovim || kitty || || || i3pystatus || || ||<br />
|-<br />
! [https://github.com/wolfcore/dotfiles wolfcore] <br />
| bash || dwm || vim || rxvt-unicode || tmux || cmus || custom || || weechat ||<br />
|-<br />
! [https://github.com/zendeavor zendeavor]<br />
| [https://github.com/zendeavor/config-stuff/tree/sandbag/zsh zsh] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/config i3] || [https://github.com/zendeavor/dotvim/tree/sandbag vim] || [https://github.com/zendeavor/config-stuff/blob/sandbag/X11/Xresources#L14 rxvt-unicode] || [https://github.com/zendeavor/config-stuff/tree/sandbag/tmux tmux] || [https://github.com/zendeavor/config-stuff/blob/sandbag/ncmpcpp/config ncmpcpp] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/i3status.conf i3status] || || [https://github.com/zendeavor/config-stuff/tree/kiwi/weechat weechat] ||<br />
|}<br />
<br />
== See also ==<br />
<br />
* [[gregswiki:DotFiles]]<br />
* [https://wiki.haskell.org/Xmonad/Config_archive XMonad Config Archive]<br />
* [http://dotshare.it dotshare.it]<br />
* [https://dotfiles.github.io/ dotfiles.github.io]<br />
* [https://terminal.sexy/ terminal.sexy] - Terminal color scheme designer</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Talk:AMDGPU&diff=658006Talk:AMDGPU2021-04-07T08:47:14Z<p>Scrumplex: /* Section about Colour Spaces and how to change them */ new section</p>
<hr />
<div>== Supported Hardware ==<br />
I just crawled the product names "Radeon xyz" of VI/CI GPUs together and was going to go on for professional products "FirePro xzy", too.<br />
<br />
Afaik, there is no such complete listing on the web. There is a lot of confusion about the code and product names, due to AMD repeatedly rebranding their products and even change code names for same GPUs (Tonga = Antigua, Hawaii = Grenada, Carrizo = Bristol Ridge?, ...)<br />
<br />
When I started using gnu/linux, the arch wiki was a great help and there are still a lot of people struggling with graphics drivers. Now I know it is not hard to understand, but it is still confusing for beginners, coming from windows and just being used to install one software suite (not a drm driver, libdrm, mesa, gallium, etc.), supporting all the current hardware.<br />
<br />
now everyone has to go through all of this every time to determine 1) which hardware is really in their product and 2) which driver suits their hardware<br />
<br />
<br />
tl;dr I think maintaining such a list would be really useful for beginners, maybe not here but in a separate article?<br />
[[User:Iuno|Iuno]] ([[User talk:Iuno|talk]]) 09:27, 16 February 2016 (UTC)<br />
<br />
:Well, [https://wiki.gentoo.org/wiki/Amdgpu#Feature_support Gentoo wiki] has a simple two-line summary. If it's still not sufficiently clear or the list is already much larger, I guess we could have a separate subpage to not clutter the main page... -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 10:20, 16 February 2016 (UTC)<br />
<br />
:: yes, in the meantime I also found this table. It looks good but it is not complete. And completing the list would blow up the table cells a lot. I guess we should wait until vulkan and the new OpenCL driver has been released. Until then, there is no real reason for owners of pre-VI hardware to switch over to amdgpu. All vi and post-vi will be covered, so there is no need to list those separately. For the others I could create a subpage when switching to amdgpu gives you the opportunity for opencl 2.1 and vulkan -- [[User:Iuno|Iuno]] ([[User talk:Iuno|talk]]) 10:50, 16 February 2016 (UTC)<br />
<br />
== Enable amdgpu for Sea Islands Cards ==<br />
testing my Hawaii card w/ amdgpu last week, sound did not work, even though 6 pcm/hdmi audio devices were listed. Might be added as an issue (as I think this is important deciding between radeon and amdgpu), but needs further investigation/confirmation from other testers.<br />
[[User:Iuno|Iuno]] ([[User talk:Iuno|talk]]) 09:53, 16 February 2016 (UTC)<br />
:Please remember the AMDGPU is still in beta, and there's still info and knowledge/experience missing (e.g. most users use the Radeon driver).<br />
:AMD isn't that great in providing info and so far a lot of users are confused about their hardware support in use with amdgpu.<br />
:Remember there are flags like {{ic|exp_hw_support}}. More info need to be added, but it will take some time.<br />
:[[User:Francoism|Francoism]] ([[User talk:Francoism|talk]]) 13:14, 16 February 2016 (UTC)<br />
: It does indeed seem like that was no CI issue. Audio over hdmi is not supported by amdgpu atm, respectively only with the (upcoming) DAL changes[http://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/open-source-amd-linux/853189-audio-over-hdmi-tonga-and-amdgpu], although it is listed as 'done' [http://xorg.freedesktop.org/wiki/RadeonFeature/ here]. [[User:Iuno|Iuno]] ([[User talk:Iuno|talk]]) 15:59, 22 February 2016 (UTC)<br />
<br />
== Sea Islands cards not working with 4.5.x? ==<br />
I stumbled across this wiki page in hopes of getting more performance after seeing Michael from Phoronix get his 290 working with this. Following through all the instructions, menuconfiging and compiling new kernels, in the end all I get is a blank screen with my r9 390. No errors on Xorg.0.log. Can anyone confirm that it isn't just me?<br />
[[User:Katorisenko|Katorisenko]] ([[User talk:Katorisenko|talk]]) 07:46, 24 April 2016 (UTC)<br />
<br />
== AMDGPU and HDMI Audio ==<br />
<br />
According to [https://bugzilla.freedesktop.org/show_bug.cgi?id=92827#c2 this Freedesktop.org bug comment], HDMI audio support in AMDGPU requires DAL which is "not upstream yet", and won't be anytime soon according to [http://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-DC-DRM-No this Phoronix article]. I'm currently struggling to make my HDMI audio work with my AMD Radeon R9 380; if this happens to be impossible with AMDGPU, should we mention it in the "Troubleshooting" section of this page? --[[User:Hellpe|Hellpe]] ([[User talk:Hellpe|talk]]) 23:26, 3 January 2017 (UTC)<br />
<br />
:I am in favor of adding the information notice to the troubleshooting section. I think users who do not keep up with the news will be confused when Pulseaudio seems to add the HDMI audio devices, despite them being non-functional until the DAL code is refactored and accepted upstream then pushed to regular users. I know it was not immediately clear to me when I upgraded from my radeonsi card to an RX series amdgpu card until I did some reading. I "think" currently the only way to get HDMI audio is to use the AMDGPU-PRO driver for the time being. [[User:Ase1590|Ase1590]] ([[User talk:Ase1590|talk]]) 15:48, 4 January 2017 (UTC)<br />
<br />
::I have it working with an R9 380 under Xorg. I did nothing special, simply disabled the built-in audio and enabled the HDMI audio. It does not work under Wayland however. Pavucontrol shows unavailable. [[User:Unit73e|Unit73e]] ([[User talk:Unit73e|talk]]) 12:22, 2 December 2017 (UTC)<br />
<br />
== Some experiments with integrated AMD graphics ==<br />
<br />
Some results after playing with "radeon" and "amdgpu" drivers and gnome (for AMD A10 7850K):<br />
<br />
- Having both drivers loaded causes systemd to hang at system shutdown (xorg). Using amdgpu and blacklisting radeon or using radeon and blacklisting amdgpu both fix this problem.<br />
<br />
- Having amdgpu driver without mkinitcpio.conf entry causes<br />
1. Wayland can't be enabled (always in xorg mode) and XDG_SESSION_TYPE shows "x11"<br />
2. HDMI sound output is shown only in rare cases<br />
<br />
- Having amdgpu driver with mkinitcpio.conf entry causes<br />
1. Wayland is enabled by default and XDG_SESSION_TYPE shows "wayland"<br />
2. HDMI sound is always disabled<br />
<br />
- Having radeon driver without mkinitcpio.conf entry causes<br />
1. Wayland can't be enabled (always in xorg mode) and XDG_SESSION_TYPE shows "x11"<br />
2. HDMI sound is always correctly detected and working<br />
<br />
- Having radeon driver with mkinitcpio.conf entry<br />
1. Wayland is enabled by default and XDG_SESSION_TYPE shows "wayland"<br />
2. HDMI sound is always correctly detected and working<br />
<br />
[[User:Beoldhin|Beoldhin]] ([[User talk:Beoldhin|talk]]) 19:07, 23 May 2017 (UTC)<br />
<br />
Update: with kernel 4.11.2-1: HDMI sound output is now working with "amdgpu" but only in as "Gnome in xorg" login option (still no sound with Wayland). There are still some graphical glitches when running Wayland with the radeon driver: external screen doesn't turn off after timeout, windows can't be maximized with the "wmctrl" command and updating text in terminal causes some text updating problems (these don't exist with xorg, amdgpu and radeon both work fine). So in summary: I can now select either amdgpu or radeon driver but Wayland is still unstable.<br />
<br />
[[User:Beoldhin|Beoldhin]] ([[User talk:Beoldhin|talk]]) 19:07, 23 May 2017 (UTC)<br />
<br />
== Vega Changes for Wiki ==<br />
<br />
With Vega releasing around the end of the month, the DC/DAL is still not it the kernel. Should we just put a note for users to use the AMDGPU-PRO drivers if they have VEGA cards? We could possibly add a note saying that in the AUR, there is an alternate kernel built from their repos with the DC/DAL code. <br />
Alternate kernel--> {{AUR|linux-amd-staging-git}} [[User:Sesese9|Sesese9]] ([[User talk:Sesese9|talk]]) 00:40, 10 July 2017 (UTC)<br />
<br />
== Moving "Enable GPU display scaling" to xrandr ==<br />
<br />
I thought about it to put this under xrandr directly, but for example for my integrated Intel 6th gen GPU I don't have the "scaling mode" option, and I don't know about NVIDIA.<br />
And even if the "scaling mode" option exists for other vendors and or cards, I don't know if the possible values for "scaling mode" are the same everywhere, as far as I remember there are not.<br />
That was the reason I did put it here. [[User:Bertl|Bertl]] ([[User talk:Bertl|talk]]) 16:01, 18 February 2018 (UTC)<br />
:Ok, looks like [[Intel_graphics#Setting_scaling_mode|Intel]] uses the same settings, but it's only available for internal (LVDS, eDP) ports, but at least according to https://bugs.freedesktop.org/show_bug.cgi?id=90989 it also uses "None, Full, Center, Full aspect".<br />
:I know that radeonsi uses the same commands, but still don't know about NVIDIA.<br />
:But yea, now I also think that it should be moved and the [[Intel_graphics#Setting_scaling_mode|Intel]] section should be merged into it. [[User:Bertl|Bertl]] ([[User talk:Bertl|talk]]) 18:37, 18 February 2018 (UTC)<br />
<br />
== Update on kernel parameters ==<br />
<br />
this part does not seems to be required on 4.17:<br />
<br />
>> Also, since kernel 4.13, adding the amdgpu.si_support=1 radeon.si_support=0 or amdgpu.cik_support=1 radeon.cik_support=0 kernel parameter is required. Otherwise, AMDGPU will not start and you will end up with either radeon being used instead or the display being frozen during the boot.<br />
<br />
{{unsigned|12:10, 22 April 2018|Lesto}}<br />
<br />
== Renaming AMDGPU-PRO to Radeon Software for Linux? ==<br />
<br />
So AMD basically changed the name of their AMDGPU-PRO driver as simply Radeon™ Software for Linux, see [https://support.amd.com/en-us/kb-articles/Pages/AMDGPU-PRO-Driver-for-Linux-Release-Notes.aspx 17.40], [https://support.amd.com/en-us/kb-articles/Pages/Radeon-Software-for-Linux-Release-Notes.aspx 18.10] and [https://support.amd.com/en-us/kb-articles/Pages/Radeon-Software-for-Linux-18.20-Early-Preview-Release-Notes.aspx 18.20 preview] release notes. With that in mind, should the names on wiki be slowly changed, or the alternative name/note being added somewhere? I'm not sure if AMDGPU-PRO is still used by AMD officially and whether AMDGPU (without PRO) term is being used as well, but the name sure definitely stuck among community – any ideas? [[User:Faalagorn|Faalagorn]] [[User talk:Faalagorn|☎]]/[[Special:Contributions/Faalagorn|✓]] 17:33, 11 May 2018 (UTC)<br />
<br />
EDIT: Probably worth noticing is the similar situation happened between [[Fglrx]] and [[AMD Catalyst]] naming back then. [[User:Faalagorn|Faalagorn]] [[User talk:Faalagorn|☎]]/[[Special:Contributions/Faalagorn|✓]] 17:38, 11 May 2018 (UTC)<br />
<br />
== Vulkan support for FreeSync on Mesa 19.1 ==<br />
<br />
Mesa 19.1 recently came out and it supposedly has FreeSync support for Vulkan. I can't test it right now but I was running the freesync patch before 19.1 and it worked for me. Anyone can confirm it is working on 19.1 and edit the FreeSync part about "only OpenGL is supported"<br />
<br />
[[User:Igo95862|Igo95862]] ([[User talk:Igo95862|talk]]) 08:56, 5 July 2019 (UTC)<br />
<br />
== Move Variable Refresh Rate to New Page ==<br />
<br />
NVIDIA has supported freesync for a while now as well as having their own variable refresh rate technology (Gsync). I think it would make more sense to make a separate page for it.<br />
[[User:Cknight70|Cknight70]] ([[User talk:Cknight70|talk]]) 17:00, 2 August 2019 (UTC)<br />
<br />
:I have started writing the article on my [[User:Cknight70#Variable_refresh_rate|personal page]]. Please feel free to make edits, I will create the new page in a couple of days if there are no objections. [[User:Cknight70|Cknight70]] ([[User talk:Cknight70|talk]]) 18:58, 3 August 2019 (UTC)<br />
<br />
::Check out [[Variable Refresh Rate]] [[User:Cknight70|Cknight70]] ([[User talk:Cknight70|talk]]) 15:49, 9 August 2019 (UTC)<br />
<br />
== OpenCL implementation? ==<br />
<br />
I've just spent the past day finding out how to get OpenCL to work with AMDGPU and I just found the answer on the [[Blender]] page by using {{AUR|opencl-amd}}. I don't really know if it would fit in with the page (as I could of solved this much sooner by searching up OpenCL and just looking at [[GPGPU]]) but I was still confused by people saying that only AMDGPU-PRO has OpenCL 2 support, so if it was mentioned somehow on the page I think it would be very helpful.<br />
[[User:Polygonerror|Polygonerror]] ([[User talk:Polygonerror|talk]]) 15:45, 20 December 2019 (UTC)<br />
<br />
== Navi power consumption addition: Idle power consumption & memory clocks with Navi 10 and multiple monitors ==<br />
<br />
Using a Gigabyte 5700 XT Gaming OC and 2 Monitors (LG OLED 55" and Dell 25") connected, the GPU won't throttle down and uses around 30W in idle.<br />
Xorg.conf and xrandr etc. don't help.<br />
A workaround is to suspend and resume, using the following as an systemd user job.<br />
<br />
.config/systemd/user/xrandr.service<br />
[Unit]<br />
Description=xrandr<br />
After=suspend.target<br />
<br />
[Service]<br />
Type=oneshot<br />
Environment=DISPLAY=:0<br />
ExecStart=/usr/bin/xrandr -s 2560x1440 --dpi 117 --output DisplayPort-2 --mode 2560x1440 --primary --output HDMI-A-0 --same-as DisplayPort-2 --scale-from 2560x1440 --mode 1920x1080 --rate 60 --dpi 96<br />
ExecStart=/usr/bin/xrandr --output HDMI-A-0 --off<br />
<br />
<br />
[Install]<br />
WantedBy=suspend.target<br />
<br />
Change ports and resolutions and enable with<br />
<br />
systemctl --user enable xrandr<br />
<br />
Setting --rate of the LG OLED to 120 will not reduce power consumption as much, because the GPU needs to clock the memory higher.<br />
<br />
Everything works as expected after resuming. Power1 from amdgpu is around 9-10W in idle.<br />
<br />
Is there anything official to fix this that I didn't find?<br />
<br />
The problem is still present in 5.5.15-1-ck and 5.6rc7-1.<br />
<br />
Is it OK to include this in the troubleshooting section ?<br />
<br />
[[User:Strikemybread|Strikemybread]] ([[User talk:Strikemybread|talk]]) 11:29, 7 April 2020 (UTC)<br />
<br />
: still present in 5.7-mainline [[User:Strikemybread|Strikemybread]] ([[User talk:Strikemybread|talk]])<br />
: OK, using a modeline _without_ reduced blanking gives proper power usage right after boot (cvt 2560 1440 60). More than the max. reported pixel clock of the monitor(connection). Power reading is now ~10 W, with workaround above ~ 8 W. And, workaround doesn't work anymore with > 5.9.14. [[User:Strikemybread|Strikemybread]] ([[User talk:Strikemybread|talk]])<br />
<br />
== Adding suggestion to install `xf86-video-amdgpu` when using southern islands gpu? ==<br />
<br />
In my case it wasn't possible to create `/etc/X11/xorg.conf.d/20-amdgpu.conf` and restart pc without crash. (for tearfree option)<br />
<br />
{{unsigned|18:53, 18 June 2020|Shfil}}<br />
<br />
== amdvlk inclusion ==<br />
<br />
I've noticed that amdvlk isn't properly explained or listed as an option, nor is there a clear explanation about how amd gpu drivers can be installed along side each-other and switched between; this is particularly relevant when you consider how trivial it is to switch between divers when amd gpus are compared to nvidia gpus. The wiki could be more clear, complete, and comprehensive if it included such information.<br />
<br />
Additionally there is a comment under the AOC compiler section which flatly states mesa with the AOC compiler preforms better than amdvlk, unfortunately that is inaccurate. There are still applications/games which require or preform much better under amdvlk. Also because the drivers in question are still very much "moving targets" its unlikely for one driver to be definitively better than the other for quite sometime.<br />
<br />
[[User:Desulate|Desulate]] ([[User talk:Desulate|talk]]) 22:27, 28 November 2020 (UTC)<br />
<br />
== Enable Southern Islands (SI) and Sea Islands (CIK) support ==<br />
<br />
This chapter is entirely obsolete, at least for Navi GPUs (Radeon Pro W5700 in my case).<br />
<br />
No {{ic|{cik,si}_support}} module parameters are needed and things work fine with {{ic|amdgpu}} out-of-the-box. There is no need for {{ic|radeon}} anywhere in this context; it can be just blacklisted (or not; it doesn't matter). (Also, there is a separate Wiki [[ATI|page]] for {{ic|radeon}} and legacy GPUs; {{ic|radeon}} should be mentioned (only) there.) [[User:Andrej|Andrej]] ([[User talk:Andrej|talk]]) 19:25, 15 December 2020 (UTC)<br />
<br />
: You are missing the purpose of these parameters. On some old gpus the radeon driver is loaded by default, but they could work with amdgpu also. These parameters are for activating amdgpu driver for them. [[User:Ashark|Ashark]] ([[User talk:Ashark|talk]]) 19:38, 15 December 2020 (UTC)<br />
<br />
== Section about Colour Spaces and how to change them ==<br />
<br />
I recently read about the ''issues'' around colour spaces with AMDGPU via HDMI. Apparently? AMDGPU uses YCbCr color format. There should be a section explaining how to change this behavior, as it is a common issue among users, causing weird colors with monitors in some cases. This [https://www.wezm.net/v2/posts/2020/linux-amdgpu-pixel-format/#the-fix blog post] shows a possible workaround, by editing the monitor's EDID and passing that to KMS with a kernel parameter. Though it might not be the desired workaround for many people. The section should also mention possible settings on the monitor itself (changing colour space there).<br />
<br />
[[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 08:47, 7 April 2021 (UTC)</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Talk:Nextcloud&diff=653075Talk:Nextcloud2021-02-21T21:52:14Z<p>Scrumplex: Example configuration for a LEMP stack with NC 21+</p>
<hr />
<div>== Possible merge with owncloud ==<br />
<br />
''[[Moved from [[Talk:Nextcloud]]'' -- [[User:Rdeckard|Rdeckard]] ([[User_talk:Rdeckard|talk]]) 13:41, 7 January 2017 (UTC)<br />
<br />
I'm thinking many of the installation and configuration steps are identical between [[Nextcloud]] and [[Owncloud]]. We could possibly merge these two articles. There is some good info here that may be missing at [[Owncloud]]. I think unless there are drastic differences they should be combined. We could note any differences in the main article. -- [[User:Rdeckard|Rdeckard]] ([[User_talk:Rdeckard|talk]]) 01:52, 5 January 2017 (UTC)<br />
<br />
:Good idea. Are you offering to take point? [[User:Graysky|Graysky]] ([[User talk:Graysky|talk]]) 01:58, 7 January 2017 (UTC)<br />
<br />
::Sure. It actually looks like many of the sections are identical (were copied). I'll work on it. -- [[User:Rdeckard|Rdeckard]] ([[User_talk:Rdeckard|talk]]) 13:00, 7 January 2017 (UTC)<br />
<br />
::: Wait, shouldn't we create a new page merging the content, then setup redirects from 'owncloud' and 'nextcloud' to that new page? To me, the unified page would would allow for either package to be installed from one read without having all the clicking between pages like I see you have started to do. [[User:Graysky|Graysky]] ([[User talk:Graysky|talk]]) 13:22, 7 January 2017 (UTC)<br />
<br />
::::Right. That was temporary until I got everything merged piece-by-piece. It all now goes to [[ownCloud]] where both programs are treated. -- [[User:Rdeckard|Rdeckard]] ([[User_talk:Rdeckard|talk]]) 13:36, 7 January 2017 (UTC)<br />
<br />
::::: OK, if you're finished, I might take a look at further refining the unified page, but I don't want to deal with potential content collisions if we are both editing simultaneously :) [[User:Graysky|Graysky]] ([[User talk:Graysky|talk]]) 13:42, 7 January 2017 (UTC)<br />
<br />
::::::Go for it! I'm done with it for the morning. Thanks! -- [[User:Rdeckard|Rdeckard]] ([[User_talk:Rdeckard|talk]]) 13:44, 7 January 2017 (UTC)<br />
<br />
:::::::I Realize I am a bit late on this, but the fact that Nextcloud forked from ownCloud, wouldn't it have been advantageous to keep them separate as we don't know how long the install processes will remain the same / similiar? --[[User:TheFlyingFool|TheFlyingFool]] ([[User talk:TheFlyingFool|talk]]) 13:57, 25 January 2017 (UTC)<br />
<br />
::::::::We may have to revisit this again. But for now the setup and configuration are nearly the same. Personally I think the owncloud/nextcloud manuals do a great job with the details, so we should refer to them more often. If and when the installation process here diverges, we'll consider splitting again. -- [[User:Rdeckard|Rdeckard]] ([[User_talk:Rdeckard|talk]]) 13:50, 31 January 2017 (UTC)<br />
<br />
== Switch to cron from AJAX ==<br />
<br />
The [https://doc.owncloud.org/server/9.1/admin_manual/contents.html ownCloud 9.1 Server Administration Manual] on "Defining Background Jobs" states [https://doc.owncloud.org/server/9.1/admin_manual/configuration_server/background_jobs_configuration.html#cron cron] as the preferred method for executing regular tasks. It also states that [https://doc.owncloud.org/server/9.1/admin_manual/configuration_server/background_jobs_configuration.html#ajax AJAX] is "...the default option. Unfortunately, however, it is also the least reliable." The downside being AJAX requires regular visits to the page to trigger the background job. --[[User:Koopa|Koopa]] ([[User talk:Koopa|talk]]) 21:37, 7 February 2017 (UTC)<br />
<br />
:Versions of nextcloud from 12 and up suggests that both cron and systemd can be used, and I see no point in even mentioning cron, since it's a whole software piece that's missing from arch by default, and adding it to this article contributes nothing. Systemd should be used by default with Arch to integrate well with other parts of the OS, and not to confuse users with multiple scheduling tools. [[User:NeoTheFox|NeoTheFox]] ([[User talk:NeoTheFox|talk]]) 10:53, 28 August 2017 (UTC)<br />
<br />
== Uploaded file size limitation ==<br />
<br />
The article is missing raising file size limitation. Current max file size with the provided configs seems to be 512MB - 2GB depending on what you use to upload.<br />
<br />
This seems to be set in /usr/share/webapps/nextcloud/.user.ini for the web side, /tmp needs to be as big as all concurrent file uploads, and possibly more.<br />
<br />
Documentation is here: https://docs.nextcloud.com/server/12/admin_manual/configuration_files/big_file_upload_configuration.html?highlight=big%20file%20upload<br />
<br />
Am planning to figure this out and add it to the article sometimes in the future, but if someone does it before me I won't be mad.<br />
<br />
[[User:C0rn3j|C0rn3j]] ([[User talk:C0rn3j|talk]]) 10:51, 2 October 2017 (UTC)<br />
<br />
== Cron, file scan and preview timers ==<br />
<br />
I have changed the AUR repository from `nextcloud-systemd-cron` to<br />
`nextcloud-systemd-timers`. I did this change, because I have also included<br />
timers for periodic file scans and preview generation. If there is interest, I<br />
can add some lines about these timers to the Nextcloud Wiki article.<br />
<br />
{{Unsigned|09:34, 28 November 2018|Dschrempf}}<br />
<br />
:I have changed [https://wiki.archlinux.org/index.php?title=Nextcloud&type=revision&diff=557694&oldid=557305]. It sure is helpful, if you add a little about what is included. --[[User:Indigo|Indigo]] ([[User talk:Indigo|talk]]) 18:40, 28 November 2018 (UTC)<br />
<br />
== uWSGI INI ==<br />
<br />
I believe the INI file [https://wiki.archlinux.org/index.php/Nextcloud#uWSGI] included on this page has issues (at least it did for me). Those issues are resolved with a one-line addition to the bottom:<br />
{{bc|1=env = front_controller_active=true}}<br />
<br />
The issue being that the Nginx configuration provided throughout this page includes the following block:<br />
{{bc|1=location = / {<br />
rewrite ^ /index.php;<br />
}<br />
}}<br />
<br />
But this causes conflicts with the PHP-side's own URL rewriting. Adding the {{ic|front_controller_active}} environment variable clears this up.<br />
<br />
[[User:Djmoch|Djmoch]] ([[User talk:Djmoch|talk]]) 03:56, 31 December 2018 (UTC)<br />
<br />
== <s>nginx section: dead link</s> ==<br />
<br />
the nginx section has a tip section for a config template to work with Lets encrypt. that link is broken. the github repo seems restructured/deleted..<br />
<br />
{{unsigned|22:53, 7 December 2019|MrWhite}}<br />
<br />
:Please use [[Template:Dead link]] to mark broken links. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 08:04, 8 December 2019 (UTC)<br />
<br />
::Removed in [[Special:PermanentLink/614531]] [[User:Tlvince|Tlvince]] ([[User talk:Tlvince|talk]]) 12:00, 20 May 2020 (UTC)<br />
<br />
== Add disclaimer for possible disadvantages of setting up nextcloud on a rolling-release OS ==<br />
<br />
Dear administrators,<br />
<br />
I would like to propose adding a disclaimer to the wiki about the possible disadvantages of setting up nextcloud on a rolling-release OS like Arch linux. I have a nextcloud server that became dysfunctional after a recent update from php 7.3 to 7.4, since nextcloud doesn't upgrade as fast as a rolling release OS does. Trying to downgrade to php 7.3 was not possible either, due to several dependencies failing to allow that. Please don't get me wrong, I do believe that Arch linux's rolling-release feature is one of its strengths but when it is not matched with the same agility in the development of other software packages, it may become a problem, like in the case described above.<br />
<br />
Thank you for your consideration.<br />
<br />
Hakova<br />
[[User:Hakova|Hakova]] ([[User talk:Hakova|talk]]) 17:16, 21 December 2019 (UTC)<br />
<br />
== Update Collabora section to include HTTPS for Docker container ==<br />
<br />
It appears the Docker image for the Collabora section uses http://127.0.0.1:9980/ in the nginx and Apache examples, but the default Docker image now ships listening with HTTPS, eg. https://127.0.0.1:9980/ or you get Bad Gateway errors from php-fpm.<br />
<br />
{{unsigned|22:04, 29 March 2020|Chetwisniewski}}<br />
<br />
== Recent Pacman hook removal ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=Nextcloud&diff=prev&oldid=618928 The most recent edit] removed Pacman hook section because it's been already in the package. But the hook installation line is [https://github.com/archlinux/svntogit-community/blob/91e4262f91ee883ba9766ee61097027c3bfa88f5/trunk/PKGBUILD#L56 commented out] in PKGBUILD, so it's not installed by default. Is it reasonable to remove the hook section in spite of not installing the hook file itself? And why is the hook installation line in PKGBUILD commented out in the first place?<br />
<br />
[[User:Ynakao|Ynakao]] ([[User talk:Ynakao|talk]]) 11:11, 13 June 2020 (UTC)<br />
<br />
:[https://wiki.archlinux.org/index.php?title=Nextcloud&diff=619676&oldid=618928 Reverted]. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 11:19, 13 June 2020 (UTC)<br />
<br />
[[User:AndyRTR|AndyRTR]] ([[User talk:AndyRTR|talk]]) 14:27, 13 June 2020 (UTC)<br />
Sorry for the removal. I had the hook also probably manually installed long ago and missed that's not actually in the pkg. <br />
Opened https://bugs.archlinux.org/task/66990<br />
<br />
== the "Make sure that session.save_path is configured." bit could use explanation ==<br />
<br />
I actually still do not know how to configure this.<br />
<br />
{{Unsigned|16:01, 21 September 2020 (UTC)|Zuntik}}<br />
<br />
I actually happen to have the same problem. I don't know how to configure this and miss some few more explanation. Setting up nextcloud still seems to be a very restricted thing to me.<br />
<br />
[[User:Manouchk|Manouchk]] ([[User talk:Manouchk|talk]]) 15:51, 10 January 2021 (UTC)<br />
<br />
<br />
== Recommended Configuration for Application Servers ==<br />
<br />
As 21.0.0 introduced the nextcloud user with no configuration alongside it, it is unclear to me how to handle this.<br />
For example: Say I have multiple PHP applications running. How should I configure my LEMP stack in regards to potentially having multiple instances of php-fpm. In a container world this would be trivially simple. Am I expected to create multiple php-fpm services with seperate configurations?<br />
If yes: Maybe there should be a way to start a php-fpm service with different configuration (like php-fpm@config-name.service)<br />
[[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 21:52, 21 February 2021 (UTC)</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Android_tethering&diff=651172Android tethering2021-02-07T13:34:07Z<p>Scrumplex: Expansion note: why do we need the udev rule?</p>
<hr />
<div>[[Category:Android]]<br />
[[Category:Network sharing]]<br />
[[de:Tethering]]<br />
[[fr:Modem attache Android]]<br />
[[ja:Android テザリング]]<br />
[[ru:Android tethering]]<br />
[[Wikipedia:Tethering|Tethering]] is a way to have internet access on your PC through your smartphone using its network connection. USB tethering and Wi-Fi access point tethering are natively supported since Android 2.2 "Froyo".<br />
<br />
== Wi-Fi access point ==<br />
<br />
Using an Android phone as a Wi-Fi access point (to a 3G/4G mobile internet connection) is available for devices running Android 2.2 "Froyo" or newer.<br />
<br />
Enable it via one of the following:<br />
<br />
* ''Settings > Wireless & networks > Internet tethering > Wi-Fi access point''<br />
* ''Settings > More... > Tethering & mobile hotspot > Mobile Wi-Fi hotspot''<br />
<br />
{{Note|On some phones, this method will discharge the battery rapidly and tends to cause intense heating, unlike USB.}}<br />
<br />
== USB tethering ==<br />
<br />
USB tethering is available since Android 2.2 "Froyo".<br />
<br />
* Connect the phone to your computer via USB (the USB connection mode -- Phone Portal, Memory Card or Charge only -- is not important, but please note that you will not be able to change the USB mode during tethering)<br />
* Enable the tethering option from your phone. This is usually done from one of:<br />
** ''Settings -> Wireless & networks -> Internet tethering'' (or ''Tethering & portable hotspot'', for more recent versions)<br />
** ''Settings -> More... -> Tethering & mobile hotspot -> USB tethering''<br />
* Follow [[Network configuration]].<br />
<br />
{{Note|The network interface name may change depending on the USB port you use. You may want to [[Network configuration#Change interface name|change the interface name]] to create a unique name for your device regardless of the USB port.}}<br />
<br />
* If you are using a cellular data plan and you have recently entered a new billing period, you may need to restart your phone.<br />
<br />
=== Using systemd-networkd with udev ===<br />
{{Expansion|networkd can handle interface changes without a restart, so why this udev rule?}}<br />
Using [[systemd-networkd]] you can automatically adjust the networking to use the phone as the gateway when plugged in.<br />
<br />
{{hc|/etc/udev/rules.d/90-android-tethering.rules|<nowiki><br />
# Execute pairing program when appropriate<br />
ACTION=="add|remove", SUBSYSTEM=="net", ATTR{idVendor}=="18d1" ENV{ID_USB_DRIVER}=="rndis_host", SYMLINK+="android", RUN+="/usr/bin/systemctl restart systemd-networkd.service"<br />
</nowiki>}}<br />
<br />
You may have to adjust the {{ic|idVendor}} attribute depending on your phone. You can check using ''udevadm'':<br />
<br />
$ udevadm info /sys/class/net/enp0s26u1u2<br />
<br />
Then create the corresponding systemd-networkd file:<br />
<br />
{{hc|/etc/systemd/network/50-enp0s26u1u2.network|<nowiki><br />
[Match]<br />
Name=enp0s26u1u2<br />
<br />
[Network]<br />
DHCP=ipv4<br />
</nowiki>}}<br />
<br />
== USB tethering with AziLink ==<br />
<br />
[https://github.com/aziwoqpd/azilink AziLink] is an application that allows USB tethering for Android-based phones, without requiring root access. It is very useful for Android older than version 2.2, when there was no stock USB tethering feature implemented. It also does not require changes to your browser, and all network traffic is transparently handled (except ICMP pings). It may be somewhat CPU intensive on the phone at high usage rates (a 500 kBytes/sec data transfer rate may take more than 50% of phone CPU).<br />
<br />
=== Tools needed ===<br />
<br />
For Arch, you need to [[install]] the {{pkg|openvpn}} package. You will also need to install the {{pkg|android-tools}} package for the ''adb'' tool and {{pkg|android-udev}} which sets up the correct {{ic|/usr/lib/udev/rules.d/51-android.rules}} file for your device to be recognized. On the phone, you need the [http://lfx.org/azilink/azilink.apk azilink.apk] ([https://github.com/aziwoqpd/azilink azilink homepage]). The android application acts as a NAT, adb forwards the ports to your phone, and your openvnp setup will connect to it.<br />
<br />
==== Configuring the phone connection in Arch Linux ====<br />
<br />
So that you do not have to run adb as root, we are going to grant your user permissions to your usb device. Make sure you have turned on USB debugging on the phone (usually in ''Settings -> Applications -> Development -> USB debugging'') so that it will be shown as a device, and that it is plugged in to your computer via the USB cable. You should see it with you run the {{ic|lsusb}} command. Original azi link instructions are [https://raw.githubusercontent.com/aziwoqpd/azilink/master/HOWTO here]<br />
<br />
The device should be listed. Example output for the Acer Liquid phone:<br />
<br />
Bus 001 Device 006: ID '''0502''':3202 Acer, Inc. <br />
<br />
Then, create the following file, replacing {{ic|ciri}} by your own Linux user name, and '''0502''' by the vendor ID of your own phone:<br />
<br />
{{hc|/etc/udev/rules.d/51-android.rules|<nowiki><br />
SUBSYSTEM=="usb", ATTR(idVendor)=="0502", MODE="0666" OWNER="ciri"<br />
</nowiki>}}<br />
<br />
As root run the {{ic|udevadm control --reload}} command to make the change effective. To make sure the change took effect, run {{ic|adb devices}} and it should say {{ic|device}} instead of {{ic|unauthorized}}. Another way to make it take effect is to reboot. Another test is to run {{ic|adb shell}} to get to your phones unix prompt.<br />
<br />
=== Procedure ===<br />
<br />
Run the AziLink application in the phone and select ''About'' at the bottom to receive instructions, which basically are:<br />
<br />
# You will have to enable USB debugging on the phone if it was not already enabled (usually in ''Settings -> Applications -> Development -> USB debugging'').<br />
# Connect the phone with the USB cable to the PC.<br />
# Run AziLink and make sure that the ''Service active'' option at the top is checked.<br />
# Run the following commands in your Linux PC:<br />
<br />
$ adb forward tcp:41927 tcp:41927<br />
# openvpn azilink.ovpn<br />
<br />
{{ic|azilink.ovpn}} source from [https://raw.githubusercontent.com/aziwoqpd/azilink/master/azilink.ovpn here]<br />
<br />
{{hc|azilink.ovpn|<nowiki><br />
dev tun<br />
remote 127.0.0.1 41927 tcp-client<br />
ifconfig 192.168.56.2 192.168.56.1<br />
route 0.0.0.0 128.0.0.0<br />
route 128.0.0.0 128.0.0.0<br />
socket-flags TCP_NODELAY<br />
keepalive 10 30<br />
dhcp-option DNS 192.168.56.1<br />
</nowiki>}}<br />
<br />
You may need to manually update the contents of [[resolv.conf]] to<br />
<br />
{{hc|/etc/resolv.conf|<br />
nameserver 192.168.56.1<br />
}}<br />
<br />
If you are running NetworkManager, you may need to stop it before running OpenVPN.<br />
<br />
== USB tethering with EasyTether ==<br />
<br />
Get the [http://www.mobile-stream.com/easytether/drivers.html easytether] linux client software. The commands to set it up and run it are as follows.<br />
<br />
# pacman -U easytether-0.8.5-2-x86_64.pkg.tar.xz<br />
# easytether-usb<br />
# dhcpcd tap-easytether<br />
<br />
Make sure you have the EasyTether android app installed on your phone for it to connect to. Note: The Lite app disables some connections and you must have the paid app for full functionality. For this reason, using the AziLink setup is recommended instead.<br />
<br />
== Tethering via Bluetooth ==<br />
<br />
Android (from at least 4.0 onwards, possibly earlier) can provide a Bluetooth personal-area network (PAN) in access point mode.<br />
<br />
NetworkManager can perform this action and handle the network initialisation itself; consult its documentation for more details. <br />
<br />
Alternatively: pair and ensure you can connect your computer and Android device, as described on [[Bluetooth]], then, substituting the address of the device (here given as {{ic|AA_BB_CC_DD_EE_FF}}), do:<br />
<br />
{{bc|<nowiki>$ dbus-send --system --type=method_call --dest=org.bluez /org/bluez/hci0/dev_AA_BB_CC_DD_EE_FF org.bluez.Network1.Connect string:'nap'</nowiki>}}<br />
<br />
This will create a network interface {{ic|bnep0}}. Finally, [[Network configuration|configure a network connection]] on this interface; Android offers DHCP by default.<br />
<br />
== Tethering with SOCKS proxy ==<br />
<br />
With this method tethering is achieved by port forwarding from the phone to the PC. This is suitable only for browsing. For Firefox, you should set {{ic|network.proxy.socks_remote_dns}} to {{ic|true}} in {{ic|about:config}} ( address bar )<br />
<br />
=== Tools needed ===<br />
<br />
* The {{Pkg|android-tools}} and {{Pkg|android-udev}} packages<br />
* USB connection cable from your phone to PC<br />
* Either [http://graha.ms/androidproxy/ Tetherbot]{{Dead link|2020|12|19|status=404}} or [https://code.google.com/p/proxoid/ Proxoid]<br />
<br />
=== Instructions ===<br />
<br />
==== Tetherbot ====<br />
<br />
Tetherbot is ''an experimental SOCKS proxy and Port Bouncer that should allow you to connect your laptop to the internet using the internet connection (EDGE, 3G or Wifi) of your T-Mobile G1 Cellphone.'' It is discontinued and its website is down, but still can be accessed from Wayback Machine[https://web.archive.org/web/20171121193952/http://graha.ms/androidproxy/] and its APK can be downloaded from [https://android-apk.org/graha.ms.tunnel/ Android APK website].<br />
<br />
In order to do SOCKS proxy via Tetherbot to connect your browser to the Internet, do:<br />
<br />
# For your phone, open the application ''Tetherbot'' and press the ''Start Socks'' button<br />
# Start your SOCKS proxy by running: {{bc|# adb forward tcp:1080 tcp:1080}}<br />
# Now go to your web browser's proxy settings, set a manual proxy configuration with the proxy host address {{ic|localhost}} and port {{ic|1080}}, leaving the rest blank.<br />
<br />
{{Note|Remember to disable these proxy settings in your web browser if you want to stop using your phone's connection.}}<br />
<br />
==== Proxoid ====<br />
<br />
Follow the instructions demonstrated in the following [http://www.linux-magazine.com/Online/Blogs/Productivity-Sauce/Tether-an-Android-Phone-Using-Proxoid link].</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=648661User:Scrumplex2021-01-10T22:23:03Z<p>Scrumplex: Add more information</p>
<hr />
<div>===Arch Linux Involvement===<br />
* [https://wiki.archlinux.org/index.php/Special:Contributions/Scrumplex Wiki contributions]<br />
* [https://aur.archlinux.org/packages/?SeB=m&K=Scrumplex AUR packages]<br />
* [https://bugs.archlinux.org/index.php?status=&opened=Scrumplex&do=index Bugtracker]<br />
<br />
===Contact===<br />
* '''E-Mail:''' contact@scrumplex.net<br />
* '''IRC:''' irc://irc.freenode.net:scrumplex<br />
* '''Matrix:''' [https://matrix.to/#/@scrumplex:duckhub.io @scrumplex:duckhub.io]<br />
* '''Website:''' [https://scrumplex.net scrumplex.net] <br />
<br />
===PGP Key===<br />
* '''Key ID:''' [https://x.scrumplex.rocks/cloud/scrumplex.asc C10411294912A422]<br />
* '''Fingerprint:''' [https://x.scrumplex.rocks/cloud/scrumplex.asc AF1F B107 E188 CB97 9A94 FD7F C104 1129 4912 A422]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Silent_boot&diff=642913Silent boot2020-11-30T20:38:04Z<p>Scrumplex: Use https for demonstration video URL</p>
<hr />
<div>[[Category:Boot process]]<br />
[[es:Silent boot]]<br />
[[ja:サイレントブート]]<br />
[[pt:Silent boot]]<br />
{{Related articles start}}<br />
{{Related|Plymouth}}<br />
{{Related articles end}}<br />
<br />
This page is for those who prefer to limit the verbosity of their system to a strict minimum, either for aesthetics or other reasons. Following this guide will remove all text from the bootup process. [https://www.youtube.com/watch?v=tuqhsqrhXk0 Video demonstration]<br />
<br />
== Kernel parameters ==<br />
<br />
{{Accuracy|The {{ic|vga}} kernel parameters should be omitted if using [[Kernel_mode_setting|kernel mode setting]].}}<br />
<br />
Change the [[kernel parameters]] using the configuration options of your boot loader, to include the following parameters:<br />
<br />
quiet vga=current<br />
<br />
{{ic|1=vga=current}} is the kernel argument that avoid weird behaviours like {{Bug|32309}}.<br />
<br />
If you are still getting messages printed to the console, it may be dmesg sending you what it thinks are important messages. You can change the level at which these messages will be printed by using {{ic|1=quiet loglevel=<level>}}, where {{ic|<level>}} is any number between 0 and 7, where 0 is the most critical, and 7 is debug levels of printing.<br />
<br />
quiet loglevel=3 vga=current<br />
<br />
Note that this only seems to work if both {{ic|quiet}} and {{ic|1=loglevel=<level>}} are both used, and they must be in that order (quiet first). The loglevel parameter will only change that which is printed to the console, the levels of dmesg itself will not be affected and will still be available through the journal as well as the {{ic|dmesg}} command. For more information, see the {{ic|Documentation/kernel-parameters.txt}} file of the {{Pkg|linux-docs}} package.<br />
<br />
If you also want to stop systemd from printing its version number when booting, you should also append {{ic|1=udev.log_priority=3}} to your kernel commandline ([https://www.freedesktop.org/software/systemd/man/systemd-udevd.service.html#Kernel%20command%20line source]). If systemd is used in an [[initramfs]], append {{ic|1=rd.udev.log_priority=3}} instead.<br />
<br />
If you are using the {{ic|systemd}} hook in the [[initramfs]], you may get systemd messages during initramfs initialization. You can pass {{ic|1=rd.systemd.show_status=false}} to disable them, or {{ic|1=rd.systemd.show_status=auto}} to only suppress successful messages (so in case of errors you can still see them). Actually, {{ic|1=auto}} is already passed to {{ic|1=systemd.show_status=auto}} when {{ic|1=quiet}} is used, however for some motive sometimes systemd inside initramfs does not get it. Below are the parameters that you need to pass to your kernel to get a completely clean boot with systemd in your [[initramfs]]:<br />
<br />
quiet loglevel=3 rd.systemd.show_status=auto rd.udev.log_priority=3<br />
<br />
Also {{ic|touch ~/.hushlogin}} to remove the Last login message.<br />
<br />
== Remove console cursor blinking ==<br />
<br />
The console cursor at boot keeps blinking if you follow these instructions. This can be solved by passing {{ic|1=vt.global_cursor_default=0}} to the kernel [http://www.friendlyarm.net/forum/topic/2998].<br />
<br />
To recover the cursor in the TTY, run:<br />
# setterm -cursor on >> /etc/issue<br />
<br />
== sysctl ==<br />
<br />
To hide any kernel messages from the console, add or modify the {{ic|kernel.printk}} line according to [https://unix.stackexchange.com/a/45525/27433]:<br />
<br />
{{hc|/etc/sysctl.d/20-quiet-printk.conf|2=<br />
kernel.printk = 3 3 3 3<br />
}}<br />
<br />
== agetty ==<br />
<br />
To hide agetty printed issue and "login:" prompt line from the console[https://github.com/karelzak/util-linux/commit/933956cb499e12d0d0e5228b6de34ffa5c9a9e08], create a [[drop-in snippet]] for {{ic|getty@tty1.service}}.<br />
<br />
{{hc|/etc/systemd/system/getty@tty1.service.d/skip-prompt.conf|2=<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/usr/bin/agetty '''--skip-login''' --nonewline --noissue --autologin ''username'' --noclear %I $TERM<br />
}}<br />
<br />
== startx ==<br />
<br />
To hide {{ic|startx}} messages, you could redirect its output to {{ic|/dev/null}}, in your [https://github.com/kaihendry/Kai-s--HOME/blob/master/.bash_profile .bash_profile] like so:<br />
<br />
{{Note|Redirection is broken with rootless login. See [[Xorg#Session log redirection]].}}<br />
<br />
$ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null<br />
<br />
== fsck ==<br />
<br />
To hide fsck messages during boot, let systemd check the root filesystem. For this, replace ''udev'' hook with ''systemd'':<br />
<br />
HOOKS=( base systemd fsck ...) <br />
<br />
in {{ic|/etc/mkinitcpio.conf}} and [[regenerate the initramfs]].<br />
<br />
Now edit {{ic|systemd-fsck-root.service}} and {{ic|systemd-fsck@.service}}:<br />
<br />
# systemctl edit --full systemd-fsck-root.service<br />
# systemctl edit --full systemd-fsck@.service<br />
<br />
Configuring ''StandardOutput'' and ''StandardError'' like this:<br />
<br />
(...)<br />
<br />
[Service]<br />
Type=oneshot<br />
RemainAfterExit=yes<br />
ExecStart=/usr/lib/systemd/systemd-fsck<br />
StandardOutput=null<br />
StandardError=journal+console<br />
TimeoutSec=0<br />
<br />
See [https://www.freedesktop.org/software/systemd/man/systemd-fsck@.service.html this] for more info on the options you can pass to {{ic|systemd-fsck}} - you can change how often the service will check (or not) your filesystems.<br />
<br />
== Make GRUB silent ==<br />
<br />
To hide GRUB welcome and boot messages, you may install unofficial {{AUR|grub-silent}} package.<br />
<br />
After the installation, it is required to reinstall [[GRUB]] to necessary partition first.<br />
<br />
Then, take an example as {{ic|/etc/default/grub.silent}}, and make necessary changes to {{ic|/etc/default/grub}}.<br />
<br />
Below three lines are necessary:<br />
<br />
GRUB_DEFAULT=0<br />
GRUB_TIMEOUT=0<br />
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT<br />
<br />
{{Note|If you set {{ic|1=GRUB_TIMEOUT=0}} and {{ic|1=GRUB_HIDDEN_TIMEOUT=1}} (or any positive value), set {{ic|1=GRUB_RECORDFAIL_TIMEOUT=$GRUB_HIDDEN_TIMEOUT}} instead of {{ic|1=GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT}}. Otherwise pressing {{ic|Esc}} on boot to show GRUB menu will not work.}}<br />
<br />
Lastly, regenerate {{ic|grub.cfg}} file.<br />
<br />
== Retaining or disabling the vendor logo from BIOS ==<br />
<br />
Modern UEFI systems display a vendor logo on boot until handing over control to the bootloader; e.g. Lenovo laptops display a bright red Lenovo logo. This vendor logo is typically blanked by the bootloader (if standard GRUB is used) or by the kernel.<br />
<br />
To prevent the kernel from blanking the vendor logo, Linux 4.19 introduced a new configuration option {{ic|FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER}} that retains the contents of the framebuffer until text needs to be printed on the framebuffer console. As of November 2018 (Linux 4.19.1), the official Arch Linux kernels are compiled with {{ic|1=CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y}}.<br />
<br />
When combined with a low loglevel (to prevent text from being printed), the vendor logo can be retained while the system is initialized. Note that GRUB in the standard configuration blanks the screen; consider using [[EFISTUB]] booting instead to boot directly into the kernel and thus leverage deferred takeover.<br />
<br />
[https://www.youtube.com/watch?v=5DW2JgJmsuY Video demonstration]<br />
<br />
The kernel command line should use {{ic|1=loglevel=3}} or {{ic|1=rd.udev.log_priority=3}} as mentioned above. Note that if you often receive {{ic|Core temperature above threshold, cpu clock throttled}} messages in the kernel log, you need to use log level 2 to silence these at boot time. Alternatively, if you compile your own kernel, adjust the log level of the message in {{ic|arch/x86/kernel/cpu/mcheck/therm_throt.c}}.<br />
<br />
If you use [[Intel graphics]], set {{ic|1=i915.fastboot=1}} in the kernel command line to avoid unnecessary modesetting (and screen blanking) on boot.<br />
<br />
Further reading:<br />
<br />
* [https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.19-FBDEV-Defer-Console Phoronix: Linux 4.19 Adds Deferred Console Takeover Support For FBDEV - Cleaner Boot Process]<br />
* [https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/thread/3MWCKJ2DVJPC4INXPKB4ECFZLA7X5RTI/ Hans de Goede: Adding deferred fbcon console takeover to the Fedora kernels]<br />
<br />
=== Disabling deferred takeover ===<br />
<br />
If the new behavior leads to issues, you can disable deferred takeover by using the {{ic|1=fbcon=nodefer}} [[kernel parameter]].</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Talk:Podman&diff=623290Talk:Podman2020-07-01T21:18:10Z<p>Scrumplex: Comment added to Why should the image source URL be used</p>
<hr />
<div>== Rootless podman ==<br />
<br />
Reading the Rootless podman, two things were not clear to me:<br />
<br />
# Does the username, uid and gid set in the {{ic|/etc/subuid}} and {{ic|/etc/subgid}} have to exist and be valid values (e.g. should I create a podman user in my system), or doesn't matter what I set in those files ?<br />
# After setting those values, is it still required to run podman as root (and the container will be run as the non-root user set in those files), or I should be able to run podman binary as non-root user?<br />
-- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 19:03, 1 July 2020 (UTC)<br />
: I have added some further explanation to the section. About the second point: This should probably be described in a seperate Usage section. [[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 19:34, 1 July 2020 (UTC)<br />
<br />
== Why should the image source URL be used ==<br />
<br />
This page uses as {{ic|docker.io/''image_name''}} as image source URL, but using solely the image name with/out its version seems to work. e.g. {{ic|podman pull debian}}. So, why should the URL be used instead of just the name? -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 19:20, 1 July 2020 (UTC)<br />
<br />
: As far as I can tell all the official documentation, both on the website and on Redhat articles, they always use the {{ic|docker.io/''image_name''}} format. I assume that whatever comes first in {{ic|/etc/containers/registries.conf}} at {{ic|registries.search}} will be searched, when not defining a registry, but this may change in the future, or by editing the configuration. Maybe add a notice about this somewhere? [[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 19:34, 1 July 2020 (UTC)<br />
<br />
:: The information on the Images section is very similar to [[Docker#Images]]. I'm starting to think that we should link Docker#Images and only add in this page what is different. Notice how Podman website tells its user to {{ic|1=alias docker=podman}}. The image source should be verified and then listed in here '''only''' if different from docker. -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 20:31, 1 July 2020 (UTC)<br />
<br />
::: Well to be honest I copied it over and just added the {{ic|docker.io/}} prefix to the images. I think it should generally be specified where to pull the image(s) from, so it might be worth just pointing to the Docker page with a Note like "Be sure to define docker.io/ to define the docker hub explicitly" [[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 21:18, 1 July 2020 (UTC)</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Podman&diff=623219Podman2020-07-01T19:40:38Z<p>Scrumplex: Make notice about registry prefix a "Note"-box</p>
<hr />
<div>[[Category:Virtualization]]<br />
[[Category:Sandboxing]]<br />
[[pt:Podman]]<br />
{{Related articles start}}<br />
{{Related|systemd-nspawn}}<br />
{{Related|Linux Containers}}<br />
{{Related|Docker}}<br />
{{Related|Buildah}}<br />
{{Related|Vagrant}}<br />
{{Related articles end}}<br />
Podman is an alternative to [[Docker]], providing a similar interface.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|podman}} package. Additionally if you want to build container images look at [[Buildah]].<br />
<br />
Unlike [[Docker]], Podman doesn't require a daemon, but there is one providing an API for services like {{Pkg|cockpit}} via {{Pkg|cockpit-podman}}.<br />
<br />
By default it is only possible to run Podman containers as root. See [[#Rootless Podman|Rootless Podman]] to set up running containers as a non-root user.<br />
<br />
== Configuration ==<br />
<br />
Configuration files for configuring how containers behave are located at {{ic|/etc/containers}}. To configure the network bridge interface used by Podman see {{ic|/etc/cni/net.d/87-podman-bridge.conflist}}<br />
<br />
=== Rootless Podman ===<br />
<br />
By default only {{ic|root}} is allowed to run containers (or namespaces in kernelspeak).<br />
<br />
To allow rootless operation of Podman containers, first determine which user(s) and group(s) you want to use for the containers, and then add their corresponding entries to {{ic|/etc/subuid}} and {{ic|/etc/subgid}} respectively.<br />
<br />
The following example enables the {{ic|podman}} user and group to run Podman containers (or other types of containers in that case). It allocates the UIDs/GIDs from 165536 to 169631 to the {{ic|podman}} user and group respectively. See {{man|5|subuid}} and {{man|5|subgid}} for more information.<br />
<br />
{{hc|/etc/subuid|podman:165536:4096}}<br />
<br />
{{hc|/etc/subgid|podman:165536:4096}}<br />
<br />
After this the user/group {{ic|podman}} is able to start and run podman containers.<br />
<br />
== Images ==<br />
{{Note|You may omit the registry prefix from the images, as Podman will automatically search for the image in all registries defined in {{ic|/etc/containers/registries.conf}} at {{ic|registries.search}} in the defined order. The following images will always contain the prefix, to allow for configurations without {{ic|docker.io}} in the configuration.}}<br />
<br />
=== Arch Linux ===<br />
<br />
The following command pulls the [https://hub.docker.com/_/archlinux/ Arch Linux] x86_64 image from [https://hub.docker.com/ Docker Hub]. This is a stripped down version of Arch core without network, etc.<br />
<br />
# podman pull docker.io/archlinux<br />
<br />
See also [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md].<br />
<br />
For a full Arch base, clone the repo from above and build your own image.<br />
<br />
$ git clone https://github.com/archlinux/archlinux-docker.git<br />
<br />
Make sure that the {{Pkg|devtools}} package is installed.<br />
<br />
Edit the {{ic|packages}} file so it only contains 'base'. Then run: <br />
<br />
# make rootfs<br />
# podman build -t archlinux .<br />
<br />
=== Alpine Linux ===<br />
<br />
[https://www.alpinelinux.org/ Alpine Linux] is a popular choice for small container images, especially for software compiled as static binaries. The following command pulls the latest Alpine Linux image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/alpine<br />
<br />
Alpine Linux uses the [https://musl.libc.org/ musl] libc implementation instead of the [https://www.gnu.org/software/libc/ glibc] libc implementation used by most Linux distributions. Because Arch Linux uses glibc, there are a number of functional differences between an Arch Linux host and an Alpine Linux container that can impact the performance and correctness of software. A list of these differences is documented [https://wiki.musl-libc.org/functional-differences-from-glibc.html here].<br />
<br />
Note that dynamically linked software built on Arch Linux (or any other system using glibc) may have bugs and performance problems when run on Alpine Linux (or any other system using a different libc). See [https://bugs.python.org/issue32307], [https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image] and [https://pythonspeed.com/articles/alpine-docker-python] for examples.<br />
<br />
=== CentOS ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/centos Centos] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/centos<br />
<br />
See the Docker Hub page for a full list of available tags for each CentOS release.<br />
<br />
=== Debian ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/debian Debian] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/debian<br />
<br />
See the Docker Hub page for a full list of available tags, including both standard and slim versions for each Debian release.<br />
<br />
== See also ==<br />
<br />
* [https://podman.io/ Official website]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Podman&diff=623218Podman2020-07-01T19:39:38Z<p>Scrumplex: Add explanation about docker.io/ prefix in Images section</p>
<hr />
<div>[[Category:Virtualization]]<br />
[[Category:Sandboxing]]<br />
[[pt:Podman]]<br />
{{Related articles start}}<br />
{{Related|systemd-nspawn}}<br />
{{Related|Linux Containers}}<br />
{{Related|Docker}}<br />
{{Related|Buildah}}<br />
{{Related|Vagrant}}<br />
{{Related articles end}}<br />
Podman is an alternative to [[Docker]], providing a similar interface.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|podman}} package. Additionally if you want to build container images look at [[Buildah]].<br />
<br />
Unlike [[Docker]], Podman doesn't require a daemon, but there is one providing an API for services like {{Pkg|cockpit}} via {{Pkg|cockpit-podman}}.<br />
<br />
By default it is only possible to run Podman containers as root. See [[#Rootless Podman|Rootless Podman]] to set up running containers as a non-root user.<br />
<br />
== Configuration ==<br />
<br />
Configuration files for configuring how containers behave are located at {{ic|/etc/containers}}. To configure the network bridge interface used by Podman see {{ic|/etc/cni/net.d/87-podman-bridge.conflist}}<br />
<br />
=== Rootless Podman ===<br />
<br />
By default only {{ic|root}} is allowed to run containers (or namespaces in kernelspeak).<br />
<br />
To allow rootless operation of Podman containers, first determine which user(s) and group(s) you want to use for the containers, and then add their corresponding entries to {{ic|/etc/subuid}} and {{ic|/etc/subgid}} respectively.<br />
<br />
The following example enables the {{ic|podman}} user and group to run Podman containers (or other types of containers in that case). It allocates the UIDs/GIDs from 165536 to 169631 to the {{ic|podman}} user and group respectively. See {{man|5|subuid}} and {{man|5|subgid}} for more information.<br />
<br />
{{hc|/etc/subuid|podman:165536:4096}}<br />
<br />
{{hc|/etc/subgid|podman:165536:4096}}<br />
<br />
After this the user/group {{ic|podman}} is able to start and run podman containers.<br />
<br />
== Images ==<br />
You may omit the registry prefix from the images, as Podman will automatically search for the image in all registries defined in {{ic|/etc/containers/registries.conf}} at {{ic|registries.search}} in the defined order. The following images will always contain the prefix, to allow for configurations without {{ic|docker.io}} in the configuration.<br />
<br />
=== Arch Linux ===<br />
<br />
The following command pulls the [https://hub.docker.com/_/archlinux/ Arch Linux] x86_64 image from [https://hub.docker.com/ Docker Hub]. This is a stripped down version of Arch core without network, etc.<br />
<br />
# podman pull docker.io/archlinux<br />
<br />
See also [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md].<br />
<br />
For a full Arch base, clone the repo from above and build your own image.<br />
<br />
$ git clone https://github.com/archlinux/archlinux-docker.git<br />
<br />
Make sure that the {{Pkg|devtools}} package is installed.<br />
<br />
Edit the {{ic|packages}} file so it only contains 'base'. Then run: <br />
<br />
# make rootfs<br />
# podman build -t archlinux .<br />
<br />
=== Alpine Linux ===<br />
<br />
[https://www.alpinelinux.org/ Alpine Linux] is a popular choice for small container images, especially for software compiled as static binaries. The following command pulls the latest Alpine Linux image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/alpine<br />
<br />
Alpine Linux uses the [https://musl.libc.org/ musl] libc implementation instead of the [https://www.gnu.org/software/libc/ glibc] libc implementation used by most Linux distributions. Because Arch Linux uses glibc, there are a number of functional differences between an Arch Linux host and an Alpine Linux container that can impact the performance and correctness of software. A list of these differences is documented [https://wiki.musl-libc.org/functional-differences-from-glibc.html here].<br />
<br />
Note that dynamically linked software built on Arch Linux (or any other system using glibc) may have bugs and performance problems when run on Alpine Linux (or any other system using a different libc). See [https://bugs.python.org/issue32307], [https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image] and [https://pythonspeed.com/articles/alpine-docker-python] for examples.<br />
<br />
=== CentOS ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/centos Centos] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/centos<br />
<br />
See the Docker Hub page for a full list of available tags for each CentOS release.<br />
<br />
=== Debian ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/debian Debian] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/debian<br />
<br />
See the Docker Hub page for a full list of available tags, including both standard and slim versions for each Debian release.<br />
<br />
== See also ==<br />
<br />
* [https://podman.io/ Official website]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Talk:Podman&diff=623217Talk:Podman2020-07-01T19:35:24Z<p>Scrumplex: Reply to both categories</p>
<hr />
<div>== Rootless podman ==<br />
<br />
Reading the Rootless podman, two things were not clear to me:<br />
<br />
# Does the username, uid and gid set in the {{ic|/etc/subuid}} and {{ic|/etc/subgid}} have to exist and be valid values (e.g. should I create a podman user in my system), or doesn't matter what I set in those files ?<br />
# After setting those values, is it still required to run podman as root (and the container will be run as the non-root user set in those files), or I should be able to run podman binary as non-root user?<br />
-- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 19:03, 1 July 2020 (UTC)<br />
: I have added some further explanation to the section. About the second point: This should probably be described in a seperate Usage section. [[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 19:34, 1 July 2020 (UTC)<br />
<br />
== Why should the image source URL be used ==<br />
<br />
This page uses as {{ic|docker.io/''image_name''}} as image source URL, but using solely the image name with/out its version seems to work. e.g. {{ic|podman pull debian}}. So, why should the URL be used instead of just the name? -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 19:20, 1 July 2020 (UTC)<br />
: As far as I can tell all the official documentation, both on the website and on Redhat articles, they always use the {{ic|docker.io/''image_name''}} format. I assume that whatever comes first in {{ic|/etc/containers/registries.conf}} at {{ic|registries.search}} will be searched, when not defining a registry, but this may change in the future, or by editing the configuration. Maybe add a notice about this somewhere? [[User:Scrumplex|Scrumplex]] ([[User talk:Scrumplex|talk]]) 19:34, 1 July 2020 (UTC)</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Podman&diff=623216Podman2020-07-01T19:28:50Z<p>Scrumplex: Add further explanation to Rootless Podman</p>
<hr />
<div>[[Category:Virtualization]]<br />
[[Category:Sandboxing]]<br />
[[pt:Podman]]<br />
{{Related articles start}}<br />
{{Related|systemd-nspawn}}<br />
{{Related|Linux Containers}}<br />
{{Related|Docker}}<br />
{{Related|Buildah}}<br />
{{Related|Vagrant}}<br />
{{Related articles end}}<br />
Podman is an alternative to [[Docker]], providing a similar interface.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|podman}} package. Additionally if you want to build container images look at [[Buildah]].<br />
<br />
Unlike [[Docker]], Podman doesn't require a daemon, but there is one providing an API for services like {{Pkg|cockpit}} via {{Pkg|cockpit-podman}}.<br />
<br />
By default it is only possible to run Podman containers as root. See [[#Rootless Podman|Rootless Podman]] to set up running containers as a non-root user.<br />
<br />
== Configuration ==<br />
<br />
Configuration files for configuring how containers behave are located at {{ic|/etc/containers}}. To configure the network bridge interface used by Podman see {{ic|/etc/cni/net.d/87-podman-bridge.conflist}}<br />
<br />
=== Rootless Podman ===<br />
<br />
By default only {{ic|root}} is allowed to run containers (or namespaces in kernelspeak).<br />
<br />
To allow rootless operation of Podman containers, first determine which user(s) and group(s) you want to use for the containers, and then add their corresponding entries to {{ic|/etc/subuid}} and {{ic|/etc/subgid}} respectively.<br />
<br />
The following example enables the {{ic|podman}} user and group to run Podman containers (or other types of containers in that case). It allocates the UIDs/GIDs from 165536 to 169631 to the {{ic|podman}} user and group respectively. See {{man|5|subuid}} and {{man|5|subgid}} for more information.<br />
<br />
{{hc|/etc/subuid|podman:165536:4096}}<br />
<br />
{{hc|/etc/subgid|podman:165536:4096}}<br />
<br />
After this the user/group {{ic|podman}} is able to start and run podman containers.<br />
<br />
== Images ==<br />
<br />
=== Arch Linux ===<br />
<br />
The following command pulls the [https://hub.docker.com/_/archlinux/ Arch Linux] x86_64 image from [https://hub.docker.com/ Docker Hub]. This is a stripped down version of Arch core without network, etc.<br />
<br />
# podman pull docker.io/archlinux<br />
<br />
See also [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md].<br />
<br />
For a full Arch base, clone the repo from above and build your own image.<br />
<br />
$ git clone https://github.com/archlinux/archlinux-docker.git<br />
<br />
Make sure that the {{Pkg|devtools}} package is installed.<br />
<br />
Edit the {{ic|packages}} file so it only contains 'base'. Then run: <br />
<br />
# make rootfs<br />
# podman build -t archlinux .<br />
<br />
=== Alpine Linux ===<br />
<br />
[https://www.alpinelinux.org/ Alpine Linux] is a popular choice for small container images, especially for software compiled as static binaries. The following command pulls the latest Alpine Linux image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/alpine<br />
<br />
Alpine Linux uses the [https://musl.libc.org/ musl] libc implementation instead of the [https://www.gnu.org/software/libc/ glibc] libc implementation used by most Linux distributions. Because Arch Linux uses glibc, there are a number of functional differences between an Arch Linux host and an Alpine Linux container that can impact the performance and correctness of software. A list of these differences is documented [https://wiki.musl-libc.org/functional-differences-from-glibc.html here].<br />
<br />
Note that dynamically linked software built on Arch Linux (or any other system using glibc) may have bugs and performance problems when run on Alpine Linux (or any other system using a different libc). See [https://bugs.python.org/issue32307], [https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image] and [https://pythonspeed.com/articles/alpine-docker-python] for examples.<br />
<br />
=== CentOS ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/centos Centos] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/centos<br />
<br />
See the Docker Hub page for a full list of available tags for each CentOS release.<br />
<br />
=== Debian ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/debian Debian] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/debian<br />
<br />
See the Docker Hub page for a full list of available tags, including both standard and slim versions for each Debian release.<br />
<br />
== See also ==<br />
<br />
* [https://podman.io/ Official website]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Podman&diff=623212Podman2020-07-01T17:17:53Z<p>Scrumplex: Remove invalid character from podman build</p>
<hr />
<div>[[Category:Virtualization]]<br />
[[Category:Sandboxing]]<br />
[[pt:Podman]]<br />
{{Related articles start}}<br />
{{Related|systemd-nspawn}}<br />
{{Related|Linux Containers}}<br />
{{Related|Docker}}<br />
{{Related|Buildah}}<br />
{{Related|Vagrant}}<br />
{{Related articles end}}<br />
Podman is an alternative to [[Docker]], providing a similar interface.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|podman}} package. Additionally if you want to build container images look at [[Buildah]].<br />
<br />
Unlike [[Docker]], Podman doesn't require a daemon, but there is one providing an API for services like {{Pkg|cockpit}} via {{Pkg|cockpit-podman}}.<br />
<br />
By default it is only possible to run Podman containers as root. See [[#Rootless Podman|Rootless Podman]] to set up running containers as a non-root user.<br />
<br />
== Configuration ==<br />
<br />
Configuration files for configuring how containers behave are located at {{ic|/etc/containers}}. To configure the network bridge interface used by Podman see {{ic|/etc/cni/net.d/87-podman-bridge.conflist}}<br />
<br />
=== Rootless Podman ===<br />
<br />
To enable podman containers running as non-root users on the system, configure {{ic|/etc/subuid}} and {{ic|/etc/subgid}} with a username/group name, starting UID/GID and UID/GID range size to allocate to the remap user and group. This example allocates a range of 4096 UIDs and GIDs starting at 165536 to the podman user and group. <br />
<br />
{{hc|/etc/subuid|podman:165536:4096}}<br />
<br />
{{hc|/etc/subgid|podman:165536:4096}}<br />
<br />
After this the user/group podman is able to start and run podman containers.<br />
<br />
== Images ==<br />
<br />
=== Arch Linux ===<br />
<br />
The following command pulls the [https://hub.docker.com/_/archlinux/ Arch Linux] x86_64 image from [https://hub.docker.com/ Docker Hub]. This is a stripped down version of Arch core without network, etc.<br />
<br />
# podman pull docker.io/archlinux<br />
<br />
See also [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md].<br />
<br />
For a full Arch base, clone the repo from above and build your own image.<br />
<br />
$ git clone https://github.com/archlinux/archlinux-docker.git<br />
<br />
Make sure that the {{Pkg|devtools}} package is installed.<br />
<br />
Edit the {{ic|packages}} file so it only contains 'base'. Then run: <br />
<br />
# make rootfs<br />
# podman build -t archlinux .<br />
<br />
=== Alpine Linux ===<br />
<br />
[https://www.alpinelinux.org/ Alpine Linux] is a popular choice for small container images, especially for software compiled as static binaries. The following command pulls the latest Alpine Linux image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/alpine<br />
<br />
Alpine Linux uses the [https://musl.libc.org/ musl] libc implementation instead of the [https://www.gnu.org/software/libc/ glibc] libc implementation used by most Linux distributions. Because Arch Linux uses glibc, there are a number of functional differences between an Arch Linux host and an Alpine Linux container that can impact the performance and correctness of software. A list of these differences is documented [https://wiki.musl-libc.org/functional-differences-from-glibc.html here].<br />
<br />
Note that dynamically linked software built on Arch Linux (or any other system using glibc) may have bugs and performance problems when run on Alpine Linux (or any other system using a different libc). See [https://bugs.python.org/issue32307], [https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image] and [https://pythonspeed.com/articles/alpine-docker-python] for examples.<br />
<br />
=== CentOS ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/centos Centos] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/centos<br />
<br />
See the Docker Hub page for a full list of available tags for each CentOS release.<br />
<br />
=== Debian ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/debian Debian] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/debian<br />
<br />
See the Docker Hub page for a full list of available tags, including both standard and slim versions for each Debian release.<br />
<br />
== See also ==<br />
<br />
* [https://podman.io/ Official website]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Podman&diff=622221Podman2020-06-26T18:12:00Z<p>Scrumplex: Initial creation of Podman page</p>
<hr />
<div>[[Category:Virtualization]]<br />
[[Category:Sandboxing]]<br />
{{Related articles start}}<br />
{{Related|systemd-nspawn}}<br />
{{Related|Linux Containers}}<br />
{{Related|Docker}}<br />
{{Related|Buildah}}<br />
{{Related|Vagrant}}<br />
{{Related articles end}}<br />
Podman is an alternative to [[Docker]], providing a similar interface.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|podman}} package. Additionally if you want to build container images look at [[Buildah]].<br />
<br />
Unlike [[Docker]], Podman doesn't require a daemon, but there is one providing an API for services like {{Pkg|cockpit}} via {{Pkg|cockpit-podman}}.<br />
<br />
By default it is only possible to run Podman containers as root. See [[#Rootless Podman|Rootless Podman]] to set up running containers as a non-root user.<br />
<br />
== Configuration ==<br />
<br />
Configuration files for configuring how containers behave are located at {{ic|/etc/containers}}. To configure the network bridge interface used by Podman see {{ic|/etc/cni/net.d/87-podman-bridge.conflist}}<br />
<br />
=== Rootless Podman ===<br />
<br />
To enable podman containers running as non-root users on the system, configure /etc/subuid and /etc/subgid with a username/group name, starting UID/GID and UID/GID range size to allocate to the remap user and group. This example allocates a range of 4096 UIDs and GIDs starting at 165536 to the podman user and group. <br />
<br />
{{hc|/etc/subuid|podman:165536:4096}}<br />
<br />
{{hc|/etc/subgid|podman:165536:4096}}<br />
<br />
After this the user/group podman is able to start and run podman containers.<br />
<br />
== Images ==<br />
<br />
=== Arch Linux ===<br />
<br />
The following command pulls the [https://hub.docker.com/_/archlinux/ archlinux] x86_64 image from [https://hub.docker.com/ Docker Hub]. This is a stripped down version of Arch core without network, etc.<br />
<br />
# podman pull docker.io/archlinux<br />
<br />
See also [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md].<br />
<br />
For a full Arch base, clone the repo from above and build your own image.<br />
<br />
$ git clone https://github.com/archlinux/archlinux-docker.git<br />
<br />
Make sure that the {{Pkg|devtools}} package is installed.<br />
<br />
Edit the {{ic|packages}} file so it only contains 'base'. Then run: <br />
<br />
# make rootfs<br />
# podman build -t archlinux .+<br />
<br />
=== Alpine Linux ===<br />
<br />
[https://www.alpinelinux.org/ Alpine Linux] is a popular choice for small container images, especially for software compiled as static binaries. The following command pulls the latest Alpine Linux image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/alpine<br />
<br />
Alpine Linux uses the [https://musl.libc.org/ musl] libc implementation instead of the [https://www.gnu.org/software/libc/ glibc] libc implementation used by most Linux distributions. Because Arch Linux uses glibc, there are a number of functional differences between an Arch Linux host and an Alpine Linux container that can impact the performance and correctness of software. A list of these differences is documented [https://wiki.musl-libc.org/functional-differences-from-glibc.html here].<br />
<br />
Note that dynamically linked software built on Arch Linux (or any other system using glibc) may have bugs and performance problems when run on Alpine Linux (or any other system using a different libc). See [https://bugs.python.org/issue32307], [https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image] and [https://pythonspeed.com/articles/alpine-docker-python] for examples.<br />
<br />
=== CentOS ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/centos centos] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/centos<br />
<br />
See the Docker Hub page for a full list of available tags for each CentOS release.<br />
<br />
=== Debian ===<br />
<br />
The following command pulls the latest [https://hub.docker.com/_/debian debian] image from [https://hub.docker.com/ Docker Hub]:<br />
<br />
# podman pull docker.io/debian<br />
<br />
See the Docker Hub page for a full list of available tags, including both standard and slim versions for each Debian release.<br />
<br />
== See also ==<br />
<br />
* [https://podman.io/ Official website]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=USBGuard&diff=603941USBGuard2020-04-03T14:51:22Z<p>Scrumplex: Fix dead link, replaced with last available version of the file</p>
<hr />
<div>[[Category:Hardware detection and troubleshooting]]<br />
[[Category:Security]]<br />
[[ja:Usbguard]]<br />
[https://github.com/dkopecek/usbguard USBGuard] offers a white/black-listing mechanism for USB-devices. Inspiration for this is drawn from exploits like BadUSB.<br />
It makes use of a device blocking infrastructure included in the Linux kernel and consists of a daemon and some front-ends.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|usbguard}} package, or {{Aur|usbguard-git}} for the development version.<br />
Qt applet was removed in USBGuard 0.7.5 and it is going to be maintained in a simplified form as a separate project later. [https://github.com/USBGuard/usbguard/releases/tag/usbguard-0.7.5]<br />
<br />
== Configuration ==<br />
<br />
The main configuration file is found in {{ic|/etc/usbguard/usbguard-daemon.conf}}. To edit it, you need root privileges.<br />
<br />
If you want to control the daemon via IPC, be sure to add your username to {{ic|IPCAllowedUsers}} or your group to {{ic|IPCAllowedGroups}} to make rules persistent. In most cases, you want this.<br />
<br />
By default, USBGuard blocks all newly connected devices, and devices connected before daemon startup are left as is. This can be changed with the {{ic|PresentDevicePolicy}} option. Setting this key to {{ic|apply-policy}} is the most secure setting, which ensures security even when the daemon hits a restart.<br />
<br />
With the key {{ic|ImplicitPolicyTarget}} you can configure the default treatment of devices, if no rules match. The most secure option here is {{ic|block}}.<br />
<br />
For an in-depth documentation of configuration see the very well commented configuration file.<br />
<br />
== Usage ==<br />
<br />
USBGuard has a core daemon, a CLI, a DBUS interface and an API via libusbguard.<br />
<br />
{{Warning|Make sure to actually configure the daemon before starting/enabling it or all USB devices will immediately be blocked!}}<br />
<br />
If you want to use the Qt GUI or another program communicating via DBUS, [[enable]] and [[start]] {{ic|usbguard-dbus.service}}.<br />
<br />
If you only want to communicate via API (with the CLI tool or another software using libusbguard) [[enable]] and [[start]] {{ic|usbguard.service}}.<br />
<br />
The CLI is available via {{ic|usbguard}}.<br />
<br />
See the according man pages for more info.<br />
<br />
=== Rules ===<br />
<br />
To configure USBGuard to your needs, you can edit {{ic|/etc/usbguard/rules.conf}}. However manual editing of the rules is normally not necessary. You can generate a ruleset based on your currently attached USB devices by executing {{ic|usbguard generate-policy > /etc/usbguard/rules.conf}} as root.<br />
<br />
The rules syntax is formally explained [https://github.com/USBGuard/usbguard/blob/master/doc/man/usbguard-rules.conf.5.adoc here].<br />
An example for a hp printer connected via USB can look like this:<br />
<br />
allow id 03f0:0c17 serial "00CNFD234631" name "hp LaserJet 2020" hash "a0ef07fceb6fb77698f79a44a450121m" parent-hash "69d19c1a5733a31e7e6d9530e6k434a6" with-interface { 07:01:03 07:01:02 07:01:01 }<br />
<br />
A rule begins with a policy. {{ic|allow}} whitelists a device, {{ic|block}} stops the device from being processed now and {{ic|reject}} removes the device from the system.<br />
Then follows a set of attributes with their options, as detailed below.<br />
<br />
{| class="wikitable"<br />
! Attribute || Description<br />
|-<br />
| id usb-device-id || Match a USB device ID. <br />
|-<br />
| id [operator] { usb-device-id ... } || Match a set of USB device IDs.<br />
|-<br />
| hash "value" || Match a hash computed from the device attribute values and the USB descriptor data. The hash is computed for every device by USBGuard.<br />
|-<br />
| hash [operator] { "value" ... } || Match a set of device hashes.<br />
|-<br />
| parent-hash "value" || Match a hash of the parent device.<br />
|-<br />
| parent-hash [operator] { "value" ... } || Match a set of parent device hashes.<br />
|-<br />
| name "device-name" || Match the USB device name attribute.<br />
|-<br />
| name [operator] { "device-name" ... } || Match a set of USB device names.<br />
|-<br />
| serial "serial-number" || Match the USB iSerial device attribute.<br />
|-<br />
| serial [operator] { "serial-number" ... } || Match a set of USB iSerial device attributes.<br />
|-<br />
| via-port "port-id" || Match the USB port through which the device is connected. Note that some systems have unstable port numbering which change after the system reboots or certain kernel modules are reloaded (and maybe in other cases). Use the parent-hash attribute if you want to ensure that a device is connected via a specific parent device. <br />
|-<br />
| via-port [operator] { "port-id" ... } || Match a set of USB ports.<br />
|-<br />
| with-interface interface-type || Match an interface type that the USB device provides.<br />
|-<br />
| with-interface [operator] { interface-type interface-type ... } || Match a set of interface types against the set of interfaces that the USB device provides.<br />
<br />
|}<br />
<br />
== See also ==<br />
<br />
* [https://github.com/dkopecek/usbguard/ USBGuard Website]<br />
* [https://raw.githubusercontent.com/USBGuard/usbguard/8b76c935f019facd362e2f12a4db5e24f6e58e62/doc/usbguard-component-diagram.png USBGuard component diagram]<br />
* [https://srlabs.de/bites/usb-peripherals-turn/ BadUSB background info]<br />
* [https://www.kernel.org/doc/Documentation/usb/authorization.txt Kernel interface for USB device control]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Unofficial_user_repositories&diff=590599Unofficial user repositories2019-11-30T16:24:25Z<p>Scrumplex: Remove ungoo, as I don't maintain it anymore</p>
<hr />
<div>[[Category:Package management]]<br />
[[Category:Lists]]<br />
[[ja:非公式ユーザーリポジトリ]]<br />
[[zh-hans:Unofficial user repositories]]<br />
{{Related articles start}}<br />
{{Related|pacman-key}}<br />
{{Related|Official repositories}}<br />
{{Related articles end}}<br />
This article lists binary repositories freely created and shared by the community, often providing pre-built versions of PKGBUILDS found in the [[AUR]].<br />
<br />
In order to use these repositories, add them to {{ic|/etc/pacman.conf}}, as explained in [[pacman#Repositories and mirrors]]. If a repository is signed, you must obtain and locally sign the associated key, as explained in [[pacman/Package signing#Adding unofficial keys]].<br />
<br />
If you want to create your own custom repository, follow [[pacman/Tips and tricks#Custom local repository]].<br />
<br />
{{Warning|The official Arch Linux Developers and the Trusted Users do not perform tests of any sort to verify the contents of these repositories. You must decide whether to trust their maintainers and you take full responsibility for any consequences of using any unofficial repository.}}<br />
<br />
== Adding your repository to this page ==<br />
<br />
If you have your own repository, please add it to this page, so that all the other users will know where to find your packages. Please keep the following rules when adding new repositories:<br />
<br />
* Keep the lists in alphabetical order.<br />
* Include some information about the maintainer: include at least a (nick)name and some form of contact information (web site, email address, user page on ArchWiki or the forums, etc.).<br />
* If the repository is of the ''signed'' variety, please include a key-id, possibly using it as the anchor for a link to its keyserver; if the key is not on a keyserver, include a link to the key file.<br />
* Include some short description (e.g. the category of packages provided in the repository).<br />
* If there is a page (either on ArchWiki or external) containing more information about the repository, include a link to it.<br />
* If possible, avoid using comments in code blocks. The formatted description is much more readable. Users who want some comments in their {{ic|pacman.conf}} can easily create it on their own.<br />
<br />
Some repositories may also have packages for architectures beside x86_64. The {{ic|$arch}} variable will be set automatically by pacman.<br />
<br />
== Signed ==<br />
<br />
=== andontie-aur ===<br />
<br />
* '''Maintainer:''' Holly M.<br />
* '''Description:''' A repo containing the most popular AUR packages, as well as some I use all the time. New packages can be requested on the upstream website.<br />
* '''Key-ID:''' EA50C866329648EE<br />
* '''Upstream page:''' https://aur.andontie.net<br />
<br />
{{bc|<nowiki><br />
[andontie-aur]<br />
Server = https://aur.andontie.net/$arch<br />
</nowiki>}}<br />
<br />
=== arcanisrepo ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#arcanis arcanis]<br />
* '''Description:''' A repository with some AUR packages including packages from VCS<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[arcanisrepo]<br />
Server = https://repo.arcanis.me/repo/$arch<br />
</nowiki>}}<br />
<br />
(It is also available via FTP with the same URL.)<br />
<br />
=== arch4edu ===<br />
<br />
* '''Maintainers:''' [https://github.com/petronny Jingbei Li (petronny)], and [https://github.com/arch4edu/arch4edu/graphs/contributors others]<br />
* '''Description:''' arch4edu is a community repository for Archlinux and ArchlinuxARM that strives to provide the latest versions of most software used by college students.<br />
* '''Git Repo:''' https://github.com/arch4edu/arch4edu<br />
* '''Issue tracking:''' https://github.com/arch4edu/arch4edu/issues for packaging issues, out-of-date notifications, package requests, and related questions<br />
* '''Mirrors:''' https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux<br />
* '''Key-ID:''' 7931B6D628C8D3BA<br />
<br />
{{bc|<nowiki><br />
[arch4edu]<br />
Server = https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch<br />
## or other mirrors in https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux<br />
</nowiki>}}<br />
<br />
=== archlinuxcn ===<br />
<br />
* '''Maintainers:''' [https://plus.google.com/+PhoenixNemo/ Phoenix Nemo (phoenixlzx)], [https://www.archlinux.org/people/developers/#fyan Felix Yan (felixonmars, dev)], [https://twitter.com/lilydjwg lilydjwg], [https://www.archlinux.org/people/trusted-users/#farseerfc farseerfc (TU)], and [https://github.com/archlinuxcn/repo/graphs/contributors others]<br />
* '''Description:''' Packages by the Chinese Arch Linux community, all signed. Be aware that i686 packages are not fully maintained and tested, create an issue if you find some problems.<br />
* '''Git Repo:''' https://github.com/archlinuxcn/repo<br />
* '''Issue tracking:''' https://github.com/archlinuxcn/repo/issues for packaging issues, out-of-date notifications, package requests, and related questions<br />
* '''Mirrors:''' https://github.com/archlinuxcn/mirrorlist-repo (Mostly for users in mainland China), or install ''archlinuxcn-mirrorlist-git'' from the repo.<br />
* '''Key-ID:''' Once the repo is added, ''archlinuxcn-keyring'' package must be installed before any other so you do not get errors about PGP signatures. ''archlinuxcn-keyring'' package itself is signed by TU.<br />
<br />
{{bc|<nowiki><br />
[archlinuxcn]<br />
Server = http://repo.archlinuxcn.org/$arch<br />
## or install archlinuxcn-mirrorlist-git and use the mirrorlist<br />
#Include = /etc/pacman.d/archlinuxcn-mirrorlist<br />
</nowiki>}}<br />
<br />
=== archstrike ===<br />
<br />
* '''Maintainer:''' [https://archstrike.org/team The ArchStrike Team]<br />
* '''Description:''' A repository for security professionals and enthusiasts<br />
* '''Upstream page:''' https://archstrike.org/<br />
* '''Key-ID:''' 9D5F1C051D146843CDA4858BDE64825E7CBC0D51<br />
<br />
{{Note|ArchStrike specific instructions can be found at https://archstrike.org/wiki/setup}}<br />
<br />
{{bc|<nowiki><br />
[archstrike]<br />
Server = https://mirror.archstrike.org/$arch/$repo<br />
</nowiki>}}<br />
<br />
=== archzfs ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/minextu Jan Houben (minextu)]<br />
* '''Description:''' Packages for ZFS on Arch Linux.<br />
* '''Upstream page:''' https://github.com/archzfs/archzfs<br />
* '''Key-ID:''' F75D9D76<br />
<br />
{{bc|<nowiki><br />
[archzfs]<br />
Server = http://archzfs.com/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== archzfs-kernels ===<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/endre/ Endre Szabo]<br />
* '''Description:''' Official kernel packages matching the most recent [[# archzfs|ZFS packages]] kernel version dependencies. Use this to be able to upgrade your kernel package every time whilst using ZFS packages above :)<br />
* '''Upstream page:''' https://end.re/archzfs-kernels/<br />
* '''Key-ID:''' Not needed as packages are from core repos and signed officially.<br />
<br />
{{bc|<nowiki><br />
[archzfs-kernels]<br />
Server = http://end.re/$repo/<br />
</nowiki>}}<br />
<br />
=== ashleyis ===<br />
<br />
* '''Maintainer:''' Ashley Towns ([https://aur.archlinux.org/account/ashleyis/ ashleyis])<br />
* '''Description:''' Debug versions of SDL, chipmunk, libtmx and other misc game libraries. also swift-lang and some other AUR packages <br />
* '''Key-ID:''' B1A4D311<br />
<br />
{{bc|<nowiki><br />
[ashleyis]<br />
Server = http://arch.ashleytowns.id.au/repo/$arch<br />
</nowiki>}}<br />
<br />
=== Bennix Repo ===<br />
<br />
* '''Maintainer:''' Ben P. Dorsi-Todaro ([https://techmeout.org Tech Me Out])<br />
* '''Description:''' Packages [http://ben-dorsi-todaro.com/ Ben P. Dorsi-Todaro] uses and are not listed in repos, or packages built by [http://www.bigbenshosting.com/ Big Ben's Web Hosting] <br />
* '''Key-ID:''' F14BB858F6253DA0<br />
<br />
{{bc|<nowiki><br />
[bigben-repo]<br />
SigLevel = Optional TrustAll<br />
Server = http://bennix.net/bigben-repo/<br />
</nowiki>}}<br />
<br />
=== blackeagle-pre-community ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#idevolder Ike Devolder]<br />
* '''Description:''' testing of the by me maintaned packages before moving to ''community'' repository<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[blackeagle-pre-community]<br />
Server = https://repo.herecura.be/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== chaotic-aur ===<br />
<br />
* '''Maintainer:''' [https://github.com/pedrohlc PedroHLC]<br />
* '''Description:''' Auto builds AUR packages the maintainer uses, update them hourly (a few are daily). Hosted in São Carlos, SP, Brazil. Has a mirror in Germany. x86_64 only. Has over 1400 packages.<br />
* '''Key-ID:''' [http://pool.sks-keyservers.net/pks/lookup?search=0x3056513887B78AEB&fingerprint=on&op=index], fingerprint {{ic|EF92 5EA6 0F33 D0CB 85C4 4AD1 3056 5138 87B7 8AEB }}<br />
* '''Note:''' See [https://lonewolf.pedrohlc.com/chaotic-aur maintainer's notes].<br />
{{bc|<nowiki><br />
[chaotic-aur]<br />
Server = http://lonewolf-builder.duckdns.org/$repo/x86_64<br />
Server = http://chaotic.bangl.de/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== catalyst ===<br />
<br />
* '''Maintainer:''' [[User:Vi0L0|Vi0l0]]<br />
* '''Description:''' ATI Catalyst proprietary drivers.<br />
* '''Key-ID:''' 653C3094<br />
<br />
{{bc|<nowiki><br />
[catalyst]<br />
Server = http://167.86.114.169/arch/catalyst/$arch<br />
</nowiki>}}<br />
<br />
=== catalyst-hd234k ===<br />
<br />
* '''Maintainer:''' [[User:Vi0L0|Vi0l0]]<br />
* '''Description:''' ATI Catalyst proprietary drivers.<br />
* '''Key-ID:''' 653C3094<br />
<br />
{{bc|<nowiki><br />
[catalyst-hd234k]<br />
Server = http://167.86.114.169/arch/catalyst-hd234k/$arch<br />
</nowiki>}}<br />
<br />
=== city ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#bgyorgy Balló György]<br />
* '''Description:''' Experimental/unpopular packages.<br />
* '''Upstream page:''' https://pkgbuild.com/~bgyorgy/city.html<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[city]<br />
Server = https://pkgbuild.com/~bgyorgy/$repo/os/$arch<br />
</nowiki>}}<br />
<br />
=== coderkun-aur ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/coderkun/ coderkun]<br />
* '''Description:''' AUR packages with random software. Supporting package deltas and package and database signing.<br />
* '''Upstream page:''' https://www.suruatoel.xyz/arch<br />
* '''Key-ID:''' 39E27199A6BEE374<br />
* '''Keyfile:''' [https://www.suruatoel.xyz/coderkun.asc https://www.suruatoel.xyz/coderkun.asc]<br />
<br />
{{bc|<nowiki><br />
[coderkun-aur]<br />
Server = http://arch.suruatoel.xyz/$repo/$arch/<br />
</nowiki>}}<br />
<br />
=== coderkun-aur-audio ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/coderkun/ coderkun]<br />
* '''Description:''' AUR packages with audio-related (realtime kernels, lv2-plugins, …) software. Supporting package deltas and package and database signing.<br />
* '''Upstream page:''' https://www.suruatoel.xyz/arch<br />
* '''Key-ID:''' 39E27199A6BEE374<br />
* '''Keyfile:''' [https://www.suruatoel.xyz/coderkun.key https://www.suruatoel.xyz/coderkun.key]<br />
<br />
{{bc|<nowiki><br />
[coderkun-aur-audio]<br />
Server = http://arch.suruatoel.xyz/$repo/$arch/<br />
</nowiki>}}<br />
<br />
=== devkitpro ===<br />
<br />
* '''Maintainer:''' [https://devkitpro.org/ wintermute]<br />
* '''Description:''' Provides Homebrew toolchains for the Nintendo Wii, Gamecube, DS, GBA, Gamepark gp32 and Nintendo Switch<br />
* '''Upstream page:''' https://devkitpro.org/wiki/devkitPro_pacman<br />
* '''Key-ID:''' F7FD5492264BB9D0<br />
<br />
{{Note|Repository has its own additional keyring at https://downloads.devkitpro.org/devkitpro-keyring-r1.787e015-2-any.pkg.tar.xz.}}<br />
<br />
{{bc|<nowiki><br />
[dkp-libs]<br />
Server = https://downloads.devkitpro.org/packages<br />
[dkp-linux]<br />
Server = https://downloads.devkitpro.org/packages/linux<br />
</nowiki>}}<br />
<br />
=== disastrousaur ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/TheGoliath TheGoliath]<br />
* '''Description:''' Well known AUR package managers, many of the most popular packages available on the AUR, as well as those that I favor myself<br />
* '''Upstream page:''' https://mirror.repohost.de/disastrousaur<br />
* '''Key-ID:''' CBAE582A876533FD<br />
* '''Keyfile:''' [https://mirror.repohost.de/disastrousaur.key https://mirror.repohost.de/disastrousaur.key]<br />
{{Warning|disastrousaur and disastrousarm have now been merged under the disastrousaur name Please make sure you have changed the Server URL for your repos accordingly. Builds for other architectures may come out as I got enough time getting things running. }}<br />
{{bc|<nowiki><br />
[disastrousaur]<br />
Server = https://mirror.repohost.de/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== dvzrv ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#dvzrv David Runge]<br />
* '''Description:''' [[Realtime kernel patchset]] (aka. {{AUR|linux-rt}} and {{AUR|linux-rt-lts}})<br />
* '''Key-ID:''' Not needed, as maintainer is a developer/TU<br />
<br />
{{bc|<nowiki><br />
[dvzrv]<br />
Server = https://pkgbuild.com/~dvzrv/repo/$arch<br />
</nowiki>}}<br />
<br />
=== ear ===<br />
<br />
* '''Maintainer:''' [https://wardsegers.be Ward Segers], <br />
* '''Description:''' Editicalu's ArchLinux Repository. Contains precompiled AUR packages (mostly the ones maintained by editicalu)<br />
* '''Homepage:''' https://ear.wardsegers.be/<br />
* '''Upstream page:''' https://gitlab.com/editicalu/ear<br />
* '''Keyfile:''' https://ear.wardsegers.be/signingkey.asc<br />
* '''Key-ID:''' A9C4E7734638ACF8<br />
<br />
{{Note|Instructions can be found at https://ear.wardsegers.be}}<br />
<br />
{{bc|<nowiki><br />
[ear]<br />
Server = https://ear.wardsegers.be/$arch<br />
</nowiki>}}<br />
<br />
=== eatabrick ===<br />
<br />
* '''Maintainer:''' bentglasstube<br />
* '''Description:''' Packages for software written by (and a few just compiled by) bentglasstube.<br />
<br />
{{bc|<nowiki><br />
[eatabrick]<br />
Server = http://repo.eatabrick.org/$arch<br />
</nowiki>}}<br />
<br />
=== eschwartz ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#eschwartz Eli Schwartz]<br />
* '''Description:''' Personal repo with AUR packages and some core packages from git (including glibc and pacman). Contains debug packages.<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[eschwartz]<br />
Server = https://pkgbuild.com/~eschwartz/repo/$arch<br />
</nowiki>}}<br />
<br />
=== ffy00 ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#FFY00 Filipe Laíns]<br />
* '''Description:''' Personal repo. Contains some packages related to the D language.<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[ffy00]<br />
Server = https://pkgbuild.com/~ffy00/repo<br />
</nowiki>}}<br />
<br />
=== fusion809 ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/fusion809|Brenton Horne]] (brentonhorne77 at gmail dot com).<br />
* '''Description:''' Provides a few AUR and other packages I like. Like CodeLite and bleeding-edge (latest release within 1 day of its release) GVim (GTK 2 interface).<br />
* '''Package list:''' http://download.opensuse.org/repositories/home:/fusion809/Arch_Extra/x86_64/<br />
* '''Key-ID:''' 03264DDCD606DC98<br />
* '''Keyfile:''' https://download.opensuse.org/repositories/home:/fusion809/Arch_Extra/x86_64/home_fusion809_Arch_Extra.key<br />
<br />
{{bc|<nowiki><br />
[home_fusion809_Arch_Extra]<br />
Server = https://download.opensuse.org/repositories/home:/fusion809/Arch_Extra/$arch<br />
</nowiki>}}<br />
<br />
=== grawlinson ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/grawlinson George Rawlinson]<br />
* '''Description:''' AUR packages maintained by the user as well as some experimental packages.<br />
* '''Package list:''' https://repo.nullpointer.io<br />
* '''Key-ID:''' 25ea6900d9ea5ebc<br />
* '''Keyfile:''' https://nullpointer.io/grawlinson.key<br />
<br />
{{bc|<nowiki><br />
[grawlinson]<br />
Server = https://repo.nullpointer.io<br />
</nowiki>}}<br />
<br />
=== gnome-devel ===<br />
<br />
* '''Maintainer:''' [https://plus.google.com/+AndresFernandezperonista Andres Fernandez], [https://plus.google.com/+FernandoFernandezBerel Fernando Fernandez]<br />
* '''Description:''' GNOME development releases. For testing purposes only.<br />
* '''Package list:''' https://softwareperonista.com.ar/repo/archlinux/gnome-devel/x86_64/<br />
* '''Key-ID:''' DDCE9FD63370080B<br />
<br />
{{Note|Must be put above {{ic|[testing]}} repository.}}<br />
<br />
{{bc|<nowiki><br />
[gnome-devel]<br />
Server = https://softwareperonista.com.ar/repo/archlinux/gnome-devel/$arch<br />
</nowiki>}}<br />
<br />
=== herecura ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#idevolder Ike Devolder]<br />
* '''Description:''' additional packages not found in the ''community'' repository<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[herecura]<br />
Server = https://repo.herecura.be/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== holo ===<br />
<br />
* '''Maintainer:''' Stefan Majewsky <holo-pacman@posteo.de> (please prefer to report issues at [https://github.com/majewsky/holo-pacman-repo/issues Github])<br />
* '''Description:''' Packages for [https://holocm.org Holo configuration management], including compatible plugins and tools.<br />
* '''Upstream page:''' https://github.com/majewsky/holo-pacman-repo<br />
* '''Package list:''' https://repo.holocm.org/archlinux/x86_64<br />
* '''Key-ID:''' 0xF7A9C9DC4631BD1A<br />
<br />
{{bc|<nowiki><br />
[holo]<br />
Server = https://repo.holocm.org/archlinux/x86_64<br />
</nowiki>}}<br />
<br />
=== ivasilev ===<br />
<br />
* '''Maintainer:''' [https://ivasilev.net Ianis G. Vasilev]<br />
* '''Description:''' A variety of packages, mostly my own software and AUR builds.<br />
* '''Upstream page:''' https://ivasilev.net/pacman<br />
* '''Key-ID:''' [https://pgp.mit.edu/pks/lookup?op=vindex&search=0xB77A3C8832838F1F80ADFD7E1D0507B417DAB671 17DAB671]<br />
<br />
{{bc|<nowiki><br />
[ivasilev]<br />
Server = https://ivasilev.net/pacman/$arch<br />
</nowiki>}}<br />
<br />
=== jlk ===<br />
<br />
* '''Maintainer:''' [[User:Lahwaacz|Jakub Klinkovský]]<br />
* '''Description:''' Various packages from the ABS and AUR. Modified packages are in the {{ic|modified}} group.<br />
* '''Upstream page:''' https://jlk.fjfi.cvut.cz/arch/repo/README.html<br />
* '''Key-ID:''' 932BA3FA0C86812A32D1F54DAB5964AEB9FEDDDC<br />
<br />
{{bc|<nowiki><br />
[jlk]<br />
Server = https://jlk.fjfi.cvut.cz/arch/repo<br />
</nowiki>}}<br />
<br />
=== llvm-svn ===<br />
<br />
* '''Maintainer:''' [[User:Kerberizer|Luchesar V. ILIEV (kerberizer)]]<br />
* '''Description:''' [https://aur.archlinux.org/pkgbase/llvm-svn llvm-svn] and [https://aur.archlinux.org/pkgbase/lib32-llvm-svn lib32-llvm-svn] from AUR: the LLVM compiler infrastructure, the Clang frontend, and the tools associated with it<br />
* '''Key-ID:''' [https://sks-keyservers.net/pks/lookup?op=vindex&search=0x76563F75679E4525&fingerprint=on&exact=on 0x76563F75679E4525], fingerprint {{ic|D16C F22D 27D1 091A 841C 4BE9 7656 3F75 679E 4525}}<br />
<br />
{{bc|<nowiki><br />
[llvm-svn]<br />
Server = https://repos.uni-plovdiv.net/archlinux/$repo/$arch<br />
</nowiki>}}<br />
<br />
<br />
=== markzz ===<br />
<br />
* '''Maintainer:''' [[User:Markzz|Mark Weiman (markzz)]]<br />
* '''Description:''' Packages that markzz maintains or uses on the AUR; this includes Linux with the vfio patchset ({{AUR|linux-vfio}} and {{AUR|linux-vfio-lts}}), and packages for analysis of network data.<br />
* '''Key ID:''' DEBB9EE4<br />
<br />
{{Note|If you want to add the key by installing the ''markzz-keyring'' package, temporarily add {{ic|1=SigLevel = Never}} into the repository section.}}<br />
<br />
{{bc|<nowiki><br />
[markzz]<br />
Server = https://repo.markzz.com/arch/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== maximbaz ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#maximbaz Maxim Baz]<br />
* '''Description:''' Personal repo with AUR packages.<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[maximbaz]<br />
Server = https://pkgbuild.com/~maximbaz/repo/<br />
</nowiki>}}<br />
<br />
=== me176c ===<br />
<br />
* '''Maintainer:''' [https://github.com/lambdadroid lambdadroid]<br />
* '''Description:''' Packages for [[ASUS MeMO Pad 7 (ME176C(X))]]<br />
* '''Key-ID:''' 2B1138A8BB59D786A3BF42AAD996DA70572407FB<br />
<br />
{{bc|<nowiki><br />
[me176c]<br />
Server = https://me176c.uber.space/archlinux<br />
</nowiki>}}<br />
<br />
=== miffe ===<br />
<br />
* '''Maintainer:''' [https://bbs.archlinux.org/profile.php?id=4059 miffe]<br />
* '''Description:''' AUR packages maintained by miffe, e.g. linux-mainline<br />
* '''Key ID:''' 313F5ABD<br />
<br />
{{bc|<nowiki><br />
[miffe]<br />
Server = https://arch.miffe.org/$arch/<br />
</nowiki>}}<br />
<br />
=== mikelpint ===<br />
<br />
* '''Maintainer:''' [[User:Mikelpint|Mikel Pintado (Mikelpint)]]<br />
* '''Description:''' Packages that mikelpint maintains in the AUR.<br />
* '''Key ID:''' 5CA78FC65B189E2B<br />
<br />
{{bc|<nowiki><br />
[mikelpint]<br />
Server = https://mikelpint.github.io/repository/archlinux/repo<br />
</nowiki>}}<br />
<br />
=== Minerva W Science ===<br />
<br />
* '''Maintainer:''' Minerva W<br />
* '''Description:''' [[OpenFOAM]] packages.<br />
* '''Key-ID:''' 3FF21B78117507DA<br />
* '''Keyfile:''' https://download.opensuse.org/repositories/home:/Minerva_W:/Science/Arch_Extra/x86_64/home_Minerva_W_Science_Arch_Extra.key<br />
<br />
{{bc|<nowiki><br />
[home_Minerva_W_Science_Arch_Extra]<br />
Server = https://download.opensuse.org/repositories/home:/Minerva_W:/Science/Arch_Extra/$arch <br />
</nowiki>}}<br />
<br />
=== mobile ===<br />
<br />
* '''Maintainer:''' [https://keybase.io/farwayer farwayer]<br />
* '''Description:''' React Native and Android development<br />
* '''Upstream page:''' https://keybase.pub/farwayer/arch/mobile/<br />
* '''Key ID:''' 7943315502A936D7<br />
<br />
{{bc|<nowiki><br />
[mobile]<br />
Server = https://farwayer.keybase.pub/arch/$repo<br />
</nowiki>}}<br />
<br />
=== nah ===<br />
<br />
* '''Maintainer:''' [https://yeah.nah.nz phillid]<br />
* '''Description:''' Pre-built versions of the (slow-to-build) graph-tool python libraries, mingw-w64<br />
* '''Key ID:''' 7BF3D17D0884BF5B<br />
<br />
{{bc|<nowiki><br />
[nah]<br />
Server = https://repo.nah.nz/$repo<br />
</nowiki>}}<br />
<br />
=== nickcao ===<br />
<br />
* '''Maintainer:''' [https://nichi.co/about NickCao]<br />
* '''Description:''' Some (useful for some) packages from me, and some aur packages I personally use.<br />
* '''Key-ID:''' 09CC69622E8D4EE343B4E8954D0BA456DF028C15<br />
<br />
{{bc|<nowiki><br />
[nickcao]<br />
Server = https://repo.nichi.co/$arch<br />
</nowiki>}}<br />
<br />
=== origincode ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/OriginCode OriginCode]<br />
* '''Description:''' A few staging or testing packages from [[#archlinuxcn]], and some daily use packages.<br />
* '''Key-ID:''' 0A5BAD445D80C1CC & 62BF97502AE10D22<br />
<br />
{{bc|<nowiki><br />
[origincode]<br />
Server = https://repo.origincode.me/repo/$arch<br />
</nowiki>}}<br />
<br />
=== pkgbuilder ===<br />
<br />
* '''Maintainer:''' [https://chriswarrick.com/ Chris Warrick]<br />
* '''Description:''' A repository for PKGBUILDer, a Python AUR helper.<br />
* '''Upstream page:''' https://github.com/Kwpolska/pkgbuilder<br />
* '''Key-ID:''' 5EAAEA16<br />
<br />
{{bc|<nowiki><br />
[pkgbuilder]<br />
Server = https://pkgbuilder-repo.chriswarrick.com/<br />
</nowiki>}}<br />
<br />
=== post-factum kernels ===<br />
<br />
* '''Maintainer''': [https://aur.archlinux.org/account/post-factum Oleksandr Natalenko aka post-factum]<br />
* '''Upstream page''': https://gitlab.com/post-factum/pf-kernel/wikis/README<br />
* '''Description''': [[Kernel#Major_patchsets|pf-kernel]] packages by its developer, post-factum<br />
* '''Key-ID:''': 95C357D2AF5DA89D<br />
* '''Keyfile''': https://download.opensuse.org/repositories/home:/post-factum:/kernels/Arch/x86_64/home_post-factum_kernels_Arch.key<br />
<br />
{{bc|<nowiki><br />
[home_post-factum_kernels_Arch]<br />
Server = https://download.opensuse.org/repositories/home:/post-factum:/kernels/Arch/$arch<br />
</nowiki>}}<br />
<br />
=== QOwnNotes ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/pbek Patrizio Bekerle] (pbek), QOwnNotes author<br />
* '''Description:''' QOwnNotes is a open source notepad and todo list manager with markdown support and [[ownCloud]] integration.<br />
* '''Key-ID:''' FFC43FC94539B8B0<br />
* '''Keyfile:''' https://download.opensuse.org/repositories/home:/pbek:/QOwnNotes/Arch_Extra/x86_64/home_pbek_QOwnNotes_Arch_Extra.key<br />
<br />
{{bc|<nowiki><br />
[home_pbek_QOwnNotes_Arch_Extra]<br />
Server = https://download.opensuse.org/repositories/home:/pbek:/QOwnNotes/Arch_Extra/$arch<br />
</nowiki>}}<br />
<br />
=== qt-debug ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/The-Compiler The Compiler]<br />
* '''Description:''' Qt/PyQt builds with debug symbols<br />
* '''Upstream page:''' https://github.com/qutebrowser/qt-debug-pkgbuild<br />
* '''Key-ID:''' D6A1C70FE80A0C82<br />
<br />
{{bc|<nowiki><br />
[qt-debug]<br />
Server = https://qutebrowser.org/qt-debug/$arch<br />
</nowiki>}}<br />
<br />
=== quarry ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#anatolik anatolik]<br />
* '''Description:''' Arch binary repository for [http://rubygems.org/ Rubygems] packages. See [https://bbs.archlinux.org/viewtopic.php?id=182729 forum announcement] for more information.<br />
* '''Sources:''' https://github.com/anatol/quarry<br />
* '''Key-ID:''' Not needed, as maintainer is a developer<br />
<br />
{{bc|<nowiki><br />
[quarry]<br />
Server = https://pkgbuild.com/~anatolik/quarry/x86_64/<br />
</nowiki>}}<br />
<br />
=== repo-ck ===<br />
<br />
Kernel and modules with Brain Fuck Scheduler and all the goodies in the ck1 patch set.<br />
<br />
See [[/Repo-ck]].<br />
<br />
=== seblu ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#seblu Sébastien Luttringer]<br />
* '''Description:''' All seblu useful pre-built packages, some homemade (linux-seblu-meta, zfs-dkms, spotify, masterpdfeditor, etc).<br />
* '''Key-ID:''' Not required, as maintainer is a Developer<br />
<br />
{{bc|<nowiki><br />
[seblu]<br />
Server = https://al1.seblu.net/$repo/$arch<br />
Server = https://al2.seblu.net/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== seiichiro ===<br />
<br />
* '''Maintainer:''' [https://www.seiichiro0185.org Stefan Brand (seiichiro0185)]<br />
* '''Description:''' AUR-packages I use frequently<br />
* '''Key-ID:''' 805517CC<br />
<br />
{{bc|<nowiki><br />
[seiichiro]<br />
Server = https://www.seiichiro0185.org/repo/$arch<br />
</nowiki>}}<br />
<br />
=== sergej-repo ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#spupykin Sergej Pupykin]<br />
* '''Description:''' psi-plus, owncloud-git, ziproxy, android, MySQL, and other stuff. Some packages also available for armv7h.<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[sergej-repo]<br />
Server = http://repo.p5n.pp.ru/$repo/os/$arch<br />
</nowiki>}}<br />
<br />
=== siosm-aur ===<br />
<br />
* '''Maintainer:''' [https://tim.siosm.fr/about/ Timothee Ravier]<br />
* '''Description:''' packages also available in the Arch User Repository, sometimes with minor fixes<br />
* '''Upstream page:''' https://tim.siosm.fr/repositories/<br />
* '''Key-ID:''' 78688F83<br />
<br />
{{bc|<nowiki><br />
[siosm-aur]<br />
Server = http://siosm.fr/repo/$repo/<br />
</nowiki>}}<br />
<br />
=== sublime-text ===<br />
<br />
* '''Maintainer:''' Sublime Text developer<br />
* '''Description:''' Sublime Text editor packages from developer's repository<br />
* '''Upstream page:''' https://www.sublimetext.com/docs/3/linux_repositories.html#pacman<br />
* '''Key-ID:''' 8A8F901A<br />
<br />
{{bc|<nowiki><br />
[sublime-text]<br />
Server = https://download.sublimetext.com/arch/stable/x86_64<br />
</nowiki>}}<br />
<br />
=== subtitlecomposer ===<br />
<br />
* '''Maintainer:''' Mladen Milinkovic (maxrd2)<br />
* '''Description:''' Subtitle Composer stable and nightly builds<br />
* '''Upstream page:''' https://github.com/maxrd2/subtitlecomposer<br />
* '''Key-ID:''' EF9D9B26<br />
<br />
{{bc|<nowiki><br />
[subtitlecomposer]<br />
Server = https://smoothware.net/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== trinity ===<br />
<br />
* '''Maintainer:''' Michael J. Manley <mmanley@ntge.net><br />
* '''Description:''' [[Trinity]] Desktop Environment<br />
* '''Key-ID:''' 5F710C1E<br />
<br />
{{bc|<nowiki><br />
[trinity]<br />
Server = https://repo.nasutek.com/arch/contrib/trinity/x86_64<br />
</nowiki>}}<br />
<br />
=== valveaur ===<br />
<br />
* '''Maintainer:''' John Schoenick <johns@valvesoftware.com> (https://valvesoftware.com)<br />
* '''Description:''' A repository by Valve Software Providing The Linux-fsync kernel and modules, including the futex-wait-multiple patchset for testing with Proton fsync & Mesa with the ACO compiler patchset. <br />
* '''Upstream page:''' https://steamcommunity.com/linux<br />
* '''Key-ID:''' 8DC2CE3A3D245E64<br />
<br />
{{bc|<nowiki><br />
[valveaur]<br />
Server = http://repo.steampowered.com/arch/valveaur<br />
</nowiki>}}<br />
<br />
=== xuanrui ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/xuanruiqi Xuanrui Qi (xuanruiqi)]<br />
* '''Description:''' xuanruiqi's own packages and frequently-used packages, mainly of interest to functional programmers.<br />
* '''Upstream Page:''' https://www.xuanruiqi.com/linux.html<br />
* '''Key-ID:''' 6E06FBC8<br />
<br />
{{bc|<nowiki><br />
[xuanrui]<br />
Server = https://arch.xuanruiqi.com/repo<br />
</nowiki>}}<br />
<br />
=== xyne-x86_64 ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#xyne Xyne]<br />
* '''Description:''' A repository for Xyne's own projects.<br />
* '''Upstream page:''' http://xyne.archlinux.ca/projects/<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[xyne-x86_64]<br />
# Server = https://xyne.archlinux.ca/repos/xyne # It returns error 404 or 406 (varying). Use the line below:<br />
Server = http://xyne.archlinux.ca/bin/repo.php?file=<br />
</nowiki>}}<br />
<br />
=== home-thaodan ===<br />
<br />
* '''Maintainer''': [https://aur.archlinux.org/account/Thaodan Thaodan]<br />
* '''Upstream page''': https://gitlab.com/Thaodan/linux-pf<br />
* '''Description''': [[Kernel#Major_patchsets|pf-kernel]] and other packages by pf-kernel fork developer, Thaodan<br />
* '''Gitlab Project''': https://gitlab.com/Thaodan/repo-home-thaodan-repo<br />
* '''Key-ID:''': BBFE2FD421597395E4FC8C8DF6C85FEE79D661A4<br />
<br />
{{bc|<nowiki><br />
[home-thaodan]<br />
Server = https://thaodan.de/public/archlinux/home-thaodan/$arch<br />
</nowiki>}}<br />
<br />
== Unsigned ==<br />
<br />
{{Note|Users will need to add the following to these entries: {{ic|1=SigLevel = PackageOptional}}}}<br />
<br />
=== alucryd ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#alucryd Maxime Gauduin]<br />
* '''Description:''' Various packages Maxime Gauduin maintains (or not) in the AUR.<br />
<br />
{{bc|<nowiki><br />
[alucryd]<br />
Server = https://pkgbuild.com/~alucryd/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== alucryd-multilib ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#alucryd Maxime Gauduin]<br />
* '''Description:''' Various packages needed to run Steam without its runtime environment.<br />
<br />
{{bc|<nowiki><br />
[alucryd-multilib]<br />
Server = https://pkgbuild.com/~alucryd/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== andrwe ===<br />
<br />
* '''Maintainer:''' Andrwe Lord Weber<br />
* '''Description:''' contains programs I'm using on many systems<br />
* '''Upstream page:''' http://andrwe.org/linux/repository<br />
<br />
{{bc|<nowiki><br />
[andrwe]<br />
Server = http://repo.andrwe.org/$arch<br />
</nowiki>}}<br />
<br />
=== archgeotux ===<br />
<br />
* '''Maintainer:''' Samuel Mesa<br />
* '''Description:''' Geospatial and geographic information system applications<br />
* '''Upstream page:''' https://archgeotux.sourceforge.io/<br />
<br />
{{bc|<nowiki><br />
[archgeotux]<br />
Server = https://downloads.sourceforge.net/project/archgeotux/$arch<br />
</nowiki>}}<br />
<br />
=== archlinuxfr ===<br />
<br />
* '''Maintainer:'''<br />
* '''Description:'''<br />
* '''Upstream page:''' http://afur.archlinux.fr<br />
<br />
{{bc|<nowiki><br />
[archlinuxfr]<br />
Server = http://repo.archlinux.fr/$arch<br />
</nowiki>}}<br />
<br />
=== archlinuxgr ===<br />
<br />
* '''Maintainer:'''<br />
* '''Description:''' many interesting packages provided by the Hellenic (Greek) Arch Linux community<br />
<br />
{{bc|<nowiki><br />
[archlinuxgr]<br />
Server = http://archlinuxgr.tiven.org/archlinux/$arch<br />
</nowiki>}}<br />
<br />
=== archlinuxgr-kde4 ===<br />
<br />
* '''Maintainer:'''<br />
* '''Description:''' KDE4 packages (plasmoids, themes etc) provided by the Hellenic (Greek) Arch Linux community<br />
<br />
{{bc|<nowiki><br />
[archlinuxgr-kde4]<br />
Server = http://archlinuxgr.tiven.org/archlinux-kde4/$arch<br />
</nowiki>}}<br />
<br />
=== craftdestiny ===<br />
<br />
* '''Maintainer:''' [https://craftdestiny.ovh LinuxVieLoisir]<br />
* '''Description:''' A Craft Destiny repository is there to avoid long compilation on some software. It also adds some very useful additional software.<br />
<br />
{{bc|<nowiki><br />
[craftdestiny]<br />
Server = https://miroir.craftdestiny.ovh/archlinux-repo/<br />
</nowiki>}}<br />
<br />
=== dx37essentials ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/DragonX256 DragonX256]<br />
* '''Description:''' Personal repository. Contains packages from AUR, which I using every day.<br />
* '''Git repo:''' https://gitlab.com/DX37/dx37essentials<br />
* '''Upstream page:''' https://dx37.gitlab.io/dx37essentials<br />
<br />
{{bc|<nowiki><br />
[dx37essentials]<br />
Server = https://dx37.gitlab.io/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== heftig ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#heftig Jan Steffens]<br />
* '''Description:''' Includes pulseaudio-git, pavucontrol-git, and firefox-developer-edition<br />
* '''Upstream page:''' https://bbs.archlinux.org/viewtopic.php?id=117157<br />
<br />
{{bc|<nowiki><br />
[heftig]<br />
Server = https://pkgbuild.com/~heftig/repo/$arch<br />
</nowiki>}}<br />
<br />
=== jkanetwork ===<br />
<br />
* '''Maintainer:''' kprkpr <kevin01010 at gmail dot com><br />
* '''Maintainer:''' Joselucross <jlgarrido97 at gmail dot com><br />
* '''Description:''' Packages of AUR like pimagizer,stepmania,yaourt,linux-mainline,wps-office,grub-customizer,some IDE.. Open for all that wants to contribute<br />
* '''Upstream page:''' http://repo.jkanetwork.com/<br />
<br />
{{bc|<nowiki><br />
[jkanetwork]<br />
Server = http://repo.jkanetwork.com/repo/$repo/<br />
</nowiki>}}<br />
<br />
=== kodi-devel-prebuilt ===<br />
<br />
* '''Maintainer:''' asm0dey <pavel.finkelshtein+AUR@gmail.com><br />
* '''Description:''' Prebuilt packages of kodi-devel from AUR<br />
* '''Upstream page:''' {{AUR|kodi-devel}}<br />
<br />
{{bc|<nowiki><br />
[kodi-devel-prebuilt]<br />
Server = https://asm0dey.github.io/$repo/$arch<br />
SigLevel = PackageOptional<br />
</nowiki>}}<br />
<br />
=== mesa-git ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#lcarlier Laurent Carlier]<br />
* '''Description:''' Mesa git builds for the ''testing'' and ''multilib-testing'' repositories<br />
<br />
{{bc|<nowiki><br />
[mesa-git]<br />
Server = https://pkgbuild.com/~lcarlier/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== Mountain ===<br />
<br />
* '''Maintainer:''' [https://mountainlinux.wordpress.com Minzord]<br />
* '''Description:''' Popular AUR Packages and some Driver Wifi. <br />
<br />
{{bc|<nowiki><br />
[Mountain]<br />
SigLevel = Never<br />
Server = https://mountain-linux.github.io/Mountain/$arch<br />
</nowiki>}}<br />
<br />
=== oracle ===<br />
<br />
* '''Maintainer:''' [[User:Malvineous]]<br />
* '''Description:''' [[Oracle Database client]] and associated tools, built from AUR packages and hosted on AWS S3 using [https://github.com/Malvineous/archlinux-pacman-repo Makefile scripts].<br />
* '''Conditions:''' By using this repository you agree to the [http://www.oracle.com/technetwork/licenses/instant-client-lic-152016.html Oracle Technology Network Development and Distribution License Terms for Instant Client].<br />
{{bc|<nowiki><br />
[oracle]<br />
Server = http://linux.shikadi.net/arch/$repo/$arch/<br />
</nowiki>}}<br />
<br />
=== ownstuff ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/Martchus Martchus]<br />
* '''Description:''' A lot of packages from the AUR, e.g. a great number of mingw-w64 packages, fonts, Perl modules, tools like {{AUR|tageditor}}, {{AUR|syncthingtray}}, {{AUR|subtitlecomposer}} and {{AUR|qmplay2}}<br />
* '''Upstream page''': https://github.com/Martchus/PKGBUILDs (sources beside the AUR) and https://martchus.no-ip.biz/repoindex (package browser/search)<br />
<br />
{{bc|<nowiki><br />
[ownstuff-testing]<br />
Server = https://ftp.f3l.de/~martchus/$repo/os/$arch<br />
Server = https://martchus.no-ip.biz/repo/arch/$repo/os/$arch<br />
<br />
[ownstuff]<br />
Server = https://ftp.f3l.de/~martchus/$repo/os/$arch<br />
Server = https://martchus.no-ip.biz/repo/arch/$repo/os/$arch<br />
</nowiki>}}<br />
<br />
{{Note|The testing repository is supposed to be used together with the official testing repositories.}}<br />
<br />
=== pantheon ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#alucryd Maxime Gauduin]<br />
* '''Description:''' Repository containing Pantheon-related packages<br />
<br />
{{bc|<nowiki><br />
[pantheon]<br />
Server = https://pkgbuild.com/~alucryd/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== pietma ===<br />
<br />
* '''Maintainer:''' MartiMcFly <martimcfly@autorisation.de><br />
* '''Description:''' Arch User Repository packages [https://aur.archlinux.org/packages/?K=martimcfly&SeB=m I create or maintain.].<br />
* '''Upstream page:''' http://pietma.com/tag/aur/<br />
<br />
{{bc|<nowiki><br />
[pietma]<br />
Server = http://repository.pietma.com/nexus/content/repositories/archlinux/$arch/$repo<br />
</nowiki>}}<br />
<br />
=== pnsft-pur ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/ponsfoot ponsfoot]<br />
* '''Description:''' Japanese input method packages Mozc (vanilla) and libkkc<br />
<br />
{{bc|<nowiki><br />
[pnsft-pur]<br />
Server = https://osdn.net/projects/ponsfoot-aur/storage/pur/x86_64/<br />
</nowiki>}}<br />
<br />
=== titanium ===<br />
<br />
* '''Maintainer:''' Pyrerune <pyrerune@gmail.com><br />
* '''Description:''' Repository containing software I develop.<br />
{{bc|<nowiki><br />
[titanium]<br />
Server = https://pyrerune.github.io/titanium/$arch<br />
</nowiki>}}<br />
<br />
=== userrepository ===<br />
<br />
* '''Maintainer:''' [https://twitter.com/brunomiguel Bruno Miguel] <brunoalexandremiguel@gmail.com><br />
* '''Description:''' Repository containing software from AUR<br />
{{bc|<nowiki><br />
[userrepository]<br />
Server = https://userrepository.eu<br />
</nowiki>}}</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Laptop/Acer&diff=588617Laptop/Acer2019-11-11T17:01:18Z<p>Scrumplex: Add Acer Aspire 3 A315-51-524S</p>
<hr />
<div>[[Category:Acer]]<br />
[[ja:ノートパソコン/Acer]]<br />
{{Laptops_navigation}}<br />
<br />
== Model List ==<br />
<br />
{{HCL/Laptops table header}}<br />
| Aspire 5100-3825<br />
| 0.8 (Voodoo)<br />
| ATI Radeon Xpress 1100<br />
| Intel<br />
| Realtek<br />
| Atheros<br />
| n/a<br />
| <br />
| untested<br />
| Hot keys: untested<br />
|<br />
|-<br />
| Aspire 1501LMi<br />
| 0.9 (Don't Panic)<br />
| ATI Radeon 9600: HW acceleration only with proprietary driver<br />
| VIA: OK <br />
| Broadcom: OK<br />
| untested<br />
| none<br />
| Suspend to RAM: ??<br>Disk: Yes<br/>Battery: Yes<br/>CPU frequency scaling: Yes <br />
| untested<br />
| Hot keys: untested<br />
|<br />
|-<br />
| Travelmate 6292<br />
| Core Dump,<br/>Overlord<br />
| Intel x3100: HW acceleration with Intel's open-source driver, ~1100 FPS in the glxgears<br />
| Intel HDA: OK (model=acer) <br />
| Broadcom BCM5787M: OK<br />
| Intel iwl4965: OK<br />
| Broadcom: OK<br />
| Suspend to RAM: ??<br>Disk: Ok<br/>Battery: Yes<br/>CPU frequency scaling: Yes <br />
| untested<br />
| Hot keys: untested<br/>FireWire (Texas Instruments) TSB43AB23: OK(?)<br />
| FireWire detects well but I haven't tested it yet<br />
|-<br />
| Aspire 5024<br />
| 0.7.2<br />
| ATI Radeon X700<br />Runs Compiz on both fglrx ({{AUR|catalyst}}) >= 8.02 and radeon driver<br />
| AC97: OK<br />
| Realtek: OK<br />
| Broadcom 4318<br />Needs ''acer_apci'' + firmware or ndiswrapper driver<br />
| N/A<br />
| Battery: Yes<br>Suspend: Video and Wi-Fi problems<br>CPU frequency scaling: powernow-k8 driver<br />
| untested<br />
| <br />
|<br />
|-<br />
| [[Acer Aspire 7720|Aspire 7720]]<br />
| 2009.02<br />
| Intel i965<br />
| ALC268: working OK<br />
| Broadcom BCM5787M (tg3): OK<br />
| Intel 3945: Needs microcode<br />
| Detected, works<br />
| Battery: Yes<br>Suspend: Seems to work ok<br>Hibernation: still flaky (often hangs in the middle of restoring)<br />
| With linuxant drivers, might work<br />
| Web cam driver: ''uvcvideo''; card reader: only SD cards seem to work; special keys (Acer Arcade, direct access to browser/mail) seem to not work; volume knob at the side is seen as a multimedia key.<br />
| FireWire seems to be recognized, untested. For 64-bit, update BIOS to fix ACPI and wireless problems.<br />
|-<br />
| [[Acer Aspire E5-573|Aspire E5-573]]<br />
| 2015.12<br />
| Intel i965<br />
| OK<br />
| OK<br />
| OK<br />
| not detected<br />
| OK<br />
| not present<br />
| ...<br />
| ...<br />
|-<br />
| Aspire 7730<br />
| 2009.08 i686 & x86_64<br />
| Intel Mobile 4 Series<br />i810<br />Autoconfiguration works. Compiz OK, with indirect rendering.<br />
| ALC888<br />Playback & internal microphone: OK; microphone input socket: not tested<br />{{ic|1=options snd-hda-intel model=laptop}} added to {{ic|/etc/modprobe.d/sound.conf}} to get headphone output working<br />
| OK<br />
| OK, with iwlagn<br />
| None<br />
| Suspend to RAM: OK<br />Suspend to disk crashes on i686, OK on x86_64<br />CPU frequency scaling: OK<br />(using cpufreq)<br />
| Untested<br />
| Hot keys: OK<br />Web cam: OK<br />HDMI: untested<br />Card reader: untested<br />
| Problem booting install CD<br />Solved with {{ic|ln -sf /dev/sr0 /dev/archiso}} at ramfs<br />
|-<br />
| TravelMate 8371G (TM8371G-944G32n)<br />
| 2010.05 x86_64<br />
| Intel GM45, works with ''i915''. Radeon HD 4330 listed but cannot switch to it.<br />
| OK<br />
| OK, works with ''r8169''<br />
| OK, works with ''iwlagn''<br />
| OK, works with ''btusb''<br />
| s2ram works (see remarks), s2disk works, CPU scaling works, no fan control<br />
| No modem<br />
| Web cam works with ''uvcvideo''.<br />Card reader works.<br />Fingerprint reader does not seem to have a driver!<br />
| Suspend to RAM only works with the {{ic|1=i8042.reset=1}} kernel parameter. Otherwise, it fails to wake up, and ends up rebooting itself uncleanly!<br />Generally, this Acer seems to work quite well with Arch Linux :-)<br />
|-<br />
| Aspire 4935<br />
| 2009.08 x86_64<br />
| Nvidia GeForce 9300M GS<br />
| OK, Intel HDA<br />
| OK<br />
| OK<br />
| Untested<br />
| Suspend to RAM: OK<br />Suspend to disk: OK<br />Frequency scaling: OK<br />(using cpufreq)<br />
| Untested<br />
| Hot keys: OK<br />Audio touch panel NOT working <br />Web cam: OK<br />HDMI: OK<br />
| By "audio touch panel" I mean the illuminated plastic hot key touch panel on the right-hand side of the keyboard.<br />
|-<br />
| AspireOne D255e<br />
|<br />
| Intel GMA 3150<br />
| OK<br />
| OK, Atheros 8132 worked only with latest Archboot not official images<br />
| OK, Broadcom worked only with latest Archboot not official images<br />
| Untested<br />
| Untested<br />
| Untested<br />
| Hot keys: OK<br />Synaptic Touchpad: OK<br />
|-<br />
| Aspire 2920Z<br />
| 2009.2<br />
| Intel Mobile GM965/GL960 Integrated Graphics Controller<br />
| OK, Intel 82801H<br />
| OK, Broadcom NetLink BCM5787M Gigabit Ethernet PCI Express<br />
| OK, Broadcom BCM4311 802.11b/g WLAN<br />
| n/a<br />
| Suspend to RAM: OK.<br />Suspend to disk: OK.<br />CPU frequency scaling: untested<br />
| Untested<br />
| Hot keys: web, mail, and wireless work. Blue <i>e</i> on the left: not working<br />Synaptic touchpad: OK<br /><br />
| Not everything worked fine on fresh installation. Requires some work.<br />
|-<br />
| Aspire 5735z<br />
| archlinux-2014.09.03-dual<br />
| Intel GMA 4500M<br />
| OK<br />
| OK<br />
| OK<br />
| Untested<br />
| Suspend to RAM: OK.<br />Suspend to disk: OK.<br />CPU frequency scaling: untested<br />
| Untested<br />
| Hot keys: OK (except Bluetooth: untested)<br />Synaptic Touchpad: OK<br />
|<br />
|-<br />
| TravelMate TimelineX 8473T<br />
| archlinux-2016.02.01-dual<br />
| Intel HD 3000<br />
| OK<br />
| Untested<br />
| OK<br />
| Untested<br />
| Untested<br />
| Untested<br />
| Hot keys: Display/No Backlight/Disable Trackpad work <br /> Sound, sleep, wireless, brightness not working out of box<br />Synaptic Touchpad: OK<br />
|Live Media boots in Gummiboot and attempts to load EFI media, even though MOBO supports legacy boot ONLY. Delete the /EFI partition on the boot media to force Grub (this may cause other problems)<br />
|-<br />
| Acer Aspire E1-531<br />
| archlinux-2016.07.01-dual<br />
| Intel HD 2000<br />
| OK<br />
| OK<br />
| OK<br />
| OK<br />
| OK(Using laptop-mode-tools)<br />
| Untested<br />
| Hot keys: Sound, sleep, wireless, brightness hotkeys(fn+f1/f2/...) not working out of box<br />Synaptic Touchpad: OK<br />Webcam: OK<br />HDMI: untested<br />
|<br />
|-<br />
| Acer Aspire V3-572G<br />
| Current<br />
| Intel HD 5500<br />NVIDIA GeForce 840M working with bumblebee<br />
| OK<br />
| Realtek: OK<br />
| OK<br />
| OK<br />
| Suspend to RAM: Yes<br />Disk: Yes<br />Battery: Yes<br />CPU frequency scaling: untested<br />
| Untested<br />
| Webcam: OK<br />Hotkeys: OK<br />Synaptic Touchpad: OK<br />HDMI: OK<br />
| Ran into trouble with suspend/resume + nvidia prop. drivers ("gpu has fallen off the bus"). Fix/workaround: appended {{ic|1=rcutree.rcu_idle_gp_delay=1 acpi_osi=! acpi_osi="Windows 2009"}} to kernel parameters.<br />
|-<br />
| Acer Nitro VN7-791G-74DL<br />
| archlinux-2016.01.01-dual<br />
| Intel HD 530<br />Nvidia GeForce GTX 970M 3GB VRAM<br />
| OK<br />
| Realtek: OK<br />
| OK, Killer Wireless-AC 1535<br />
| OK<br />
| Suspend to RAM: Yes<br />Disk: Yes<br />Battery: Yes<br />CPU frequency scaling: Yes<br />
| N/A<br />
| Webcam: Yes<br />Hotkeys: OK<br />Synaptic Touchpad: OK<br />HDMI: Yes<br/>Booting from NVME: Yes<br />
| Ran into trouble with with fan control, porting driver from windows is required.<br />
|-<br />
| Acer Nitro VN7-792G-710p<br />
| archlinux-2016.10.01-dual<br />
| Intel HD 530<br />Nvidia GeForce GTX 960M 2GB VRAM<br />
| OK<br />
| Realtek: OK<br />
| OK<br />
| OK<br />
| Suspend to RAM: Yes<br />Disk: Yes<br />Battery: Yes<br />CPU frequency scaling: untested<br />
| Untested<br />
| Webcam: untested<br />Hotkeys: OK<br />Synaptic Touchpad: OK<br />HDMI: untested<br />
|<br />
|-<br />
| Acer Nitro VN7-792G-751Y<br />
| archlinux-2016-12-01-dual<br />
| Intel HD 530<br />Nvidia GeForce GTX 960M 4GB VRAM<br />
| OK<br />
| Realtek: OK<br />
| OK<br />
| OK<br />
| Suspend to RAM: Yes<br />Disk: Yes<br />Battery: Yes<br />CPU frequency scaling: untested<br />
| Untested<br />
| Webcam: Yes<br />Hotkeys: OK<br />Synaptic Touchpad: OK<br />HDMI: '''Does not work'''<br />Microphone: '''Does not work'''<br />
|<br />
|-<br />
| [[Acer Cloudbook|Aspire One Cloudbook 11]]<br />
| archlinux-201608<br />
| Intel HD Graphics 400<br />
| OK, HDA-Intel<br />
| N/A<br />
| OK, Qualcomm Atheros<br />
| OK<br />
| Suspend to RAM: Yes<br />Disk: Not tested<br />Battery: Yes<br />CPU frequency scaling: Ok<br />
| N/A<br />
| Webcam: Ok<br />Hotkeys: Some<br />Synaptic Touchpad: OK (Set to Basic in BIOS)<br />HDMI: untested<br />
| First boot after a UEFI install will typically stop with a "No media found" message. Go into BIOS and navigate to "Select an UEFI file as trusted". Note that a Supervisor password must be set to change these parameters.<br />
|<br />
|-<br />
| Acer Aspire F5-573G-7791<br />
| 2016.12.01<br />
| OK, NVIDIA GeForce 940MX (NVIDIA Device 179c), [[Bumblebee]] 2016.02.05<br />
| OK, Intel Device 9d71<br />Driver: snd_hda_intel<br />
| OK, Realtek RTL8111/8168/8411<br />
| OK, Intel Wireless 3165<br />
| OK<br />
| Suspend to RAM: Yes<br />Disk: Not tested<br />Battery: Yes<br />CPU frequency scaling: Unknown<br />
| Untested (not present?)<br />
| Webcam: Untested<br />Hot keys: OK<br />Synaptic Touchpad: OK<br />HDMI: Untested<br />USB: <ul><li>1x USB 2.0: OK</li><li>2x USB 3.0: OK</li><li>1x USB 3.1 Type-C: Untested</li></ul><br />
| (BIOS v1.15) After UEFI installation, must set Supervisor password, add bootloader as trusted, and boot with SecureBoot. BIOS v1.25 reportedly has problems on similar E5 models that were fixed in 1.31 onward.<br />
|-<br />
| Acer Aspire E5-575G-5538<br />
| 2017.02.01<br />
| OK, Nvidia GeForce 940MX (NVIDIA Device 179c), <ul><li>works with proprietary [[NVIDIA]] drivers dkms version, [[Bumblebee]] dkms version, </li><li>[[Nouveau]] works too, gives better battery life but significantly less performance as of 10 Aug 2017</li></ul><br />
| OK, HDA-Intel<br />
| OK, Realtek, needed to set MAC in a profile in NetworkManager settings<br />
| OK, Qualcomm Atheros<br />
| <ul><li>Pairing works</li><li>Sending files works</li><li> Receiving files works</li><li>Bluetooth PAN works</li></ul> <br />
| <ul><li>Suspend to RAM: Yes</li><li>Disk: Untested</li><li>Battery: Yes, but battery life is not great, needs [[TLP]] installed for better battery life</li><li>CPU frequency scaling: Yes</li></ul><br />
| Untested, USB modems should work out of the box<br />
| <ul><li>Webcam: OK</li><li>Hot keys: OK</li><li>Touchpad: Works with [[synaptics]]/[[Libinput]]. [[Libinput]] works the best (and supports gestures).</li><li>HDMI: OK</li><li>USB: <ul><li>1x USB 2.0: OK</li><li>2x USB 3.0: OK</li><li>1x USB 3.1 Type-C: OK</li></ul></ul><br />
| USB drive detection took some work (looking in the BIOS, disabling secure boot). Installation was not successful on the first try. In order to boot I enabled secureboot, cleared trusted bootloaders at secureboot settings, saved, rebooted, entered BIOS, added GRUB as trusted UEFI file, saved, rebooted, entered BIOS, disabled secureboot. Grub will appear in the boot order list even if secureboot is disabled. Must be done at each firmware update.<br />
|-<br />
|Acer Aspire E5-553-T337<br />
|2018.08.07<br />
|Perfectly OK,Amd radeon R5<br />
|OK<br />
|OK<br />
|OK<br />
|OK<br />
|OK<br />
|OK<br />
|OK<br />
|Everything works fine.no complaints<br />
|-<br />
|Acer Aspire 3 A315-41-R09T<br />
|2019.03.01<br />
|Vega 8: Works out-of-the-box with open source drivers.<br />
|Intel HDA; OK. <br />
|Works OK with r8168 module installed.<br />
|QCA9377, OK.<br />
|OK<br />
|Suspend to RAM: OK < /br>Suspend to disk: OK< /br>CPU Frequency Scaling: OK <br />
|Not present<br />
|Webcam: Yes<br />Hotkeys: OK<br />Synaptic Touchpad: OK (supports libinput-gestures)<br />HDMI: OK<br />Microphone: OK<br />
|Everything works fine, but you have to stick to a modern kernel. Also, it's important to add ivrs_ioapic[4]=00:14.0 ivrs_ioapic[5]=00:00.2 as a kernel parameter on grub (or whatever boot loader of your choice), because it otherwise works erratically and gets stuck either on boot or at shutdown. To properly install Arch Linux, it's a good idea to use noapic as boot parameter, it will run smoothly. Don't use it later, though, as it will disable the I2C touchpad and some other relevant stuff.<br />
|-<br />
|Acer Aspire 3 A315-51-524S<br />
|2019.11.11<br />
|Intel HD Graphics 620; OK<br />
|Intel HDA; OK. <br />
|OK<br />
|QCA9377, OK.<br />
|OK<br />
|<li>Suspend to RAM: OK</li><li>Suspend to disk: OK</li><li>CPU Frequency Scaling: OK</li><li>Battery: OK</li><br />
|N/A<br />
|<li>Webcam: OK</li><li>Hotkeys: OK</li><li>Touchpad: OK (supports libinput-gestures)</li><li>HDMI: OK</li><li>Microphone: OK</li><br />
|Everything works fine. "Advanced" touchpad mode in UEFI works with a modern kernel.<br />
|-<br />
|Acer Aspire E5-476G<br />
|2019.06.01<br />
|<ul><li>Intel UHD: Works</li><li>Nvidia MX150: Untested</li></ul><br />
|OK<br />
|Untested<br />
|OK<br />
|Not detected<br />
|<ul><li>Suspend to RAM: OK</li><li>Hibernate: OK</li><li>Battery: OK</li></ul><br />
|Untested<br />
|<ul><li>Webcam: OK</li><li>Hotkeys: OK</li><li>Synaptic Touchpad: OK, Support Gestures</li></ul><br />
|...<br />
|-<br />
|[[Acer Swift 5|Swift 5]] SF515-51T<br />
|2019.06.01<br />
|OK, Intel UHD 620<br />
|OK, Intel HDA {{ic|1=options snd-hda-intel model=dell-headset-multi}} added to {{ic|/etc/modprobe.d/sound.conf}} to get headset micro input working<br />
|Not present<br />
|OK<br />
|Not tested<br />
|<ul><li>Suspend to RAM: OK</li><li>Hibernate: OK</li><li>Battery: OK</li></ul><br />
|Not present<br />
|<ul><li>Webcam: OK</li><li>Hotkeys: OK</li><li>Synaptic Touchpad: OK, Support Gestures</li></ul><br />
|...<br />
|}</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=USBGuard&diff=573388USBGuard2019-05-17T13:48:46Z<p>Scrumplex: Moved warning above the service configuration</p>
<hr />
<div>[[Category:Hardware detection and troubleshooting]]<br />
[[Category:Security]]<br />
[[ja:Usbguard]]<br />
[https://github.com/dkopecek/usbguard USBGuard] offers a white/black-listing mechanism for USB-devices. Inspiration for this is drawn from exploits like BadUSB.<br />
It makes use of a device blocking infrastructure included in the Linux kernel and consists of a daemon and some front-ends.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|usbguard}} package, or {{Aur|usbguard-git}} for the development version.<br />
For the applet [[Install]] {{Pkg|usbguard-qt}}.<br />
<br />
== Configuration ==<br />
<br />
The main configuration file is found in {{ic|/etc/usbguard/usbguard-daemon.conf}}. To edit it, you need root privileges.<br />
<br />
If you want to control the daemon via IPC, be sure to add your username to {{ic|IPCAllowedUsers}} or your group to {{ic|IPCAllowedGroups}} to make rules persistent. In most cases, you want this.<br />
<br />
Per default, usbguard blocks all newly connected devices and devices connected before daemon startup are left as is. This can be changed with the {{ic|PresentDevicePolicy}} option. Setting this key to {{ic|apply-policy}} is the most secure setting, which ensures security even when the daemon hits a restart.<br />
<br />
With the key {{ic|ImplicitPolicyTarget}} you can configure the default treatment of devices, if no rules match. The most secure option here is {{ic|block}}.<br />
<br />
For an in-depth documentation of configuration see the very well commented configuration file.<br />
<br />
== Usage ==<br />
<br />
USBGuard has a core daemon, a CLI, a Qt GUI, a DBUS interface and an API via libusbguard.<br />
<br />
{{Warning|Make sure to actually configure the daemon before starting/enabling it or all USB devices will immediately be blocked!}}<br />
<br />
If you want to use the Qt GUI or another program communicating via DBUS, [[enable]] and [[start]] {{ic|usbguard-dbus.service}}.<br />
<br />
If you only want to communicate via API (with the CLI tool or another software using libusbguard) [[enable]] and [[start]] {{ic|usbguard.service}}.<br />
<br />
The CLI is available via {{ic|usbguard}}.<br />
<br />
See the according man pages for more info.<br />
<br />
A Qt applet can be started with {{ic|usbguard-applet-qt}} and provides an interactive graphical interface.<br />
<br />
=== Rules ===<br />
<br />
To configure usbguard to your needs, you can edit {{ic|/etc/usbguard/rules.conf}}. However manual editing of the rules is normally not necessary. You can generate a ruleset based on your currently attached USB devices by executing {{ic|usbguard generate-policy > /etc/usbguard/rules.conf}} as root.<br />
<br />
The rules syntax is formally explained [https://github.com/USBGuard/usbguard/blob/master/doc/man/usbguard-rules.conf.5.adoc here].<br />
An example for a hp printer connected via USB can look like this:<br />
<br />
allow id 03f0:0c17 serial "00CNFD234631" name "hp LaserJet 2020" hash "a0ef07fceb6fb77698f79a44a450121m" parent-hash "69d19c1a5733a31e7e6d9530e6k434a6" with-interface { 07:01:03 07:01:02 07:01:01 }<br />
<br />
A rule begins with a policy. {{ic|allow}} whitelists a device, {{ic|block}} stops the device from being processed now and {{ic|reject}} removes the device from the system.<br />
Then follows a set of attributes with their options, as detailed below.<br />
<br />
{| class="wikitable"<br />
! Attribute || Description<br />
|-<br />
| id usb-device-id || Match a USB device ID. <br />
|-<br />
| id [operator] { usb-device-id ... } || Match a set of USB device IDs.<br />
|-<br />
| hash "value" || Match a hash computed from the device attribute values and the USB descriptor data. The hash is computed for every device by USBGuard.<br />
|-<br />
| hash [operator] { "value" ... } || Match a set of device hashes.<br />
|-<br />
| parent-hash "value" || Match a hash of the parent device.<br />
|-<br />
| parent-hash [operator] { "value" ... } || Match a set of parent device hashes.<br />
|-<br />
| name "device-name" || Match the USB device name attribute.<br />
|-<br />
| name [operator] { "device-name" ... } || Match a set of USB device names.<br />
|-<br />
| serial "serial-number" || Match the USB iSerial device attribute.<br />
|-<br />
| serial [operator] { "serial-number" ... } || Match a set of USB iSerial device attributes.<br />
|-<br />
| via-port "port-id" || Match the USB port through which the device is connected. Note that some systems have unstable port numbering which change after the system reboots or certain kernel modules are reloaded (and maybe in other cases). Use the parent-hash attribute if you want to ensure that a device is connected via a specific parent device. <br />
|-<br />
| via-port [operator] { "port-id" ... } || Match a set of USB ports.<br />
|-<br />
| with-interface interface-type || Match an interface type that the USB device provides.<br />
|-<br />
| with-interface [operator] { interface-type interface-type ... } || Match a set of interface types against the set of interfaces that the USB device provides.<br />
<br />
|}<br />
<br />
== See also ==<br />
<br />
* [https://github.com/dkopecek/usbguard/ USBGuard Website]<br />
* [https://raw.githubusercontent.com/dkopecek/usbguard/master/doc/usbguard-component-diagram.png USBGuard component diagram]<br />
* [https://srlabs.de/bites/usb-peripherals-turn/ BadUSB background info]<br />
* [https://www.kernel.org/doc/Documentation/usb/authorization.txt Kernel interface for USB device control]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Capabilities&diff=570190Capabilities2019-03-30T11:42:32Z<p>Scrumplex: Add mtr to benefitting programs</p>
<hr />
<div>[[Category:Security]]<br />
[[ja:ケイパビリティ]]<br />
[[zh-hans:Capabilities]]<br />
Capabilities (POSIX 1003.1e, {{man|7|capabilities}}) provide fine-grained control over superuser permissions, allowing use of the root user to be avoided. Software developers are encouraged to replace uses of the powerful [[wikipedia:Setuid|setuid]] attribute in a system binary with a more minimal set of capabilities. Many packages make use of capabilities, such as {{ic|CAP_NET_RAW}} being used for the {{ic|ping}} binary provided by {{pkg|iputils}}. This enables e.g. {{ic|ping}} to be run by a normal user (as with the '''setuid''' method), while at the same time limiting the security consequences of a potential vulnerability in {{ic|ping}}.<br />
<br />
== Implementation ==<br />
<br />
Capabilities are implemented on Linux using [[extended attributes]] ({{man|7|xattr}}) in the ''security'' namespace. Extended attributes are supported by all major Linux [[file systems]], including Ext2, Ext3, Ext4, Btrfs, JFS, XFS, and Reiserfs. The following example prints the capabilities of ping with {{ic|getcap}}, and then prints the same data in its encoded form using {{ic|getfattr}}:<br />
<br />
{{hc|$ getcap /usr/bin/ping|2=<br />
/usr/bin/ping = cap_net_raw+ep<br />
}}<br />
<br />
{{hc|$ getfattr -d -m "^security\\." /usr/bin/ping|2=<br />
# file: usr/bin/ping<br />
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=<br />
}}<br />
<br />
Extended attributes are copied automatically by {{ic|cp -a}}, but some other programs require a special flag: {{ic|rsync -X}}.<br />
<br />
Capabilities are set by package install scripts on Arch (e.g. {{ic|iputils.install}}).<br />
<br />
== Administration and maintenance ==<br />
<br />
It is considered a bug if a package has overly permissive capabilities, so these cases should be reported rather than listed here. A capability essentially equivalent to root access ({{ic|CAP_SYS_ADMIN}}) or trivially allowing root access ({{ic|CAP_DAC_OVERRIDE}}) does not count as a bug since Arch does not support any [[Security#Mandatory access control|MAC/RBAC]] systems.<br />
<br />
{{Warning|Many capabilities enable trivial privilege escalation. For examples and explanations see Brad Spengler's post [http://forums.grsecurity.net/viewtopic.php?f&#61;7&t&#61;2522&sid&#61;c6fbcf62fd5d3472562540a7e608ce4e#p10271 False Boundaries and Arbitrary Code Execution].}}<br />
<br />
== Other programs that benefit from capabilities ==<br />
<br />
The following packages do not have files with the setuid attribute but require root privileges to work. By enabling some capabilities, regular users can use the program without privilege elevation.<br />
<br />
=== beep ===<br />
<br />
# setcap cap_dac_override,cap_sys_tty_config+ep /usr/bin/beep<br />
<br />
=== chvt ===<br />
<br />
# setcap cap_dac_read_search,cap_sys_tty_config+ep /usr/bin/chvt<br />
<br />
=== iftop ===<br />
<br />
# setcap cap_net_raw+ep /usr/bin/iftop<br />
<br />
=== mii-tool ===<br />
<br />
# setcap cap_net_admin+ep /usr/bin/mii-tool<br />
<br />
=== mtr ===<br />
<br />
# setcap cap_net_raw+ep /usr/bin/mtr-packet<br />
<br />
== Useful commands ==<br />
<br />
Find setuid-root files:<br />
<br />
$ find /usr/bin /usr/lib -perm /4000 -user root<br />
<br />
Find setgid-root files:<br />
<br />
$ find /usr/bin /usr/lib -perm /2000 -group root<br />
<br />
== See also ==<br />
<br />
* Man pages: {{man|7|capabilities}}, {{man|8|setcap}}, {{man|8|getcap}}<br />
* [https://en.wikibooks.org/wiki/Grsecurity/Appendix/Capability_Names_and_Descriptions Grsecurity Appendix: Capability Names and Descriptions]<br />
* [https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt The Linux Kernel Archives: SECure COMPuting with filters]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Unofficial_user_repositories&diff=566701Unofficial user repositories2019-02-16T15:24:33Z<p>Scrumplex: Add ungoo repository containing ungoogled-chromium builds</p>
<hr />
<div>[[Category:Package management]]<br />
[[Category:Lists]]<br />
[[ja:非公式ユーザーリポジトリ]]<br />
[[zh-hans:Unofficial user repositories]]<br />
{{Related articles start}}<br />
{{Related|pacman-key}}<br />
{{Related|Official repositories}}<br />
{{Related articles end}}<br />
This article lists binary repositories freely created and shared by the community, often providing pre-built versions of PKGBUILDS found in the [[AUR]].<br />
<br />
In order to use these repositories, add them to {{ic|/etc/pacman.conf}}, as explained in [[pacman#Repositories and mirrors]]. If a repository is signed, you must obtain and locally sign the associated key, as explained in [[Pacman-key#Adding unofficial keys]].<br />
<br />
If you want to create your own custom repository, follow [[pacman tips#Custom local repository]].<br />
<br />
{{Warning|The official Arch Linux Developers and the Trusted Users do not perform tests of any sort to verify the contents of these repositories. You must decide whether to trust their maintainers and you take full responsibility for any consequences of using any unofficial repository.}}<br />
<br />
== Adding your repository to this page ==<br />
<br />
If you have your own repository, please add it to this page, so that all the other users will know where to find your packages. Please keep the following rules when adding new repositories:<br />
<br />
* Keep the lists in alphabetical order.<br />
* Include some information about the maintainer: include at least a (nick)name and some form of contact information (web site, email address, user page on ArchWiki or the forums, etc.).<br />
* If the repository is of the ''signed'' variety, please include a key-id, possibly using it as the anchor for a link to its keyserver; if the key is not on a keyserver, include a link to the key file.<br />
* Include some short description (e.g. the category of packages provided in the repository).<br />
* If there is a page (either on ArchWiki or external) containing more information about the repository, include a link to it.<br />
* If possible, avoid using comments in code blocks. The formatted description is much more readable. Users who want some comments in their {{ic|pacman.conf}} can easily create it on their own.<br />
<br />
Some repositories may also have packages for architectures beside x86_64. The {{ic|$arch}} variable will be set automatically by pacman.<br />
<br />
== Signed ==<br />
<br />
=== arcanisrepo ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#arcanis arcanis]<br />
* '''Description:''' A repository with some AUR packages including packages from VCS<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[arcanisrepo]<br />
Server = https://repo.arcanis.me/repo/$arch<br />
</nowiki>}}<br />
<br />
(It is also available via FTP with the same URL.)<br />
<br />
=== archlinuxcn ===<br />
<br />
* '''Maintainers:''' [https://plus.google.com/+PhoenixNemo/ Phoenix Nemo (phoenixlzx)], [https://www.archlinux.org/people/developers/#fyan Felix Yan (felixonmars, dev)], [https://twitter.com/lilydjwg lilydjwg], [https://www.archlinux.org/people/trusted-users/#farseerfc farseerfc (TU)], and [https://github.com/archlinuxcn/repo/graphs/contributors others]<br />
* '''Description:''' Packages by the Chinese Arch Linux community, all signed. Be aware that i686 packages are not fully maintained and tested, create an issue if you find some problems.<br />
* '''Git Repo:''' https://github.com/archlinuxcn/repo<br />
* '''Issue tracking:''' https://github.com/archlinuxcn/repo/issues for packaging issues, out-of-date notifications, package requests, and related questions<br />
* '''Mirrors:''' https://github.com/archlinuxcn/mirrorlist-repo (Mostly for users in mainland China), or install ''archlinuxcn-mirrorlist-git'' from the repo.<br />
* '''Key-ID:''' Once the repo is added, ''archlinuxcn-keyring'' package must be installed before any other so you do not get errors about PGP signatures. ''archlinuxcn-keyring'' package itself is signed by TU.<br />
<br />
{{bc|<nowiki><br />
[archlinuxcn]<br />
Server = http://repo.archlinuxcn.org/$arch<br />
## or use a CDN (beta)<br />
#Server = https://cdn.repo.archlinuxcn.org/$arch<br />
## or install archlinuxcn-mirrorlist-git and use the mirrorlist<br />
#Include = /etc/pacman.d/archlinuxcn-mirrorlist<br />
</nowiki>}}<br />
<br />
=== archstrike ===<br />
<br />
* '''Maintainer:''' [https://archstrike.org/team The ArchStrike Team]<br />
* '''Description:''' A repository for security professionals and enthusiasts<br />
* '''Upstream page:''' https://archstrike.org/<br />
* '''Key-ID:''' 9D5F1C051D146843CDA4858BDE64825E7CBC0D51<br />
<br />
{{Note|ArchStrike specific instructions can be found at https://archstrike.org/wiki/setup}}<br />
<br />
{{bc|<nowiki><br />
[archstrike]<br />
Server = https://mirror.archstrike.org/$arch/$repo<br />
</nowiki>}}<br />
<br />
=== archzfs ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/minextu Jan Houben (minextu)]<br />
* '''Description:''' Packages for ZFS on Arch Linux.<br />
* '''Upstream page:''' https://github.com/archzfs/archzfs<br />
* '''Key-ID:''' F75D9D76<br />
<br />
{{bc|<nowiki><br />
[archzfs]<br />
Server = http://archzfs.com/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== ashleyis ===<br />
<br />
* '''Maintainer:''' Ashley Towns ([https://aur.archlinux.org/account/ashleyis/ ashleyis])<br />
* '''Description:''' Debug versions of SDL, chipmunk, libtmx and other misc game libraries. also swift-lang and some other AUR packages <br />
* '''Key-ID:''' B1A4D311<br />
<br />
{{bc|<nowiki><br />
[ashleyis]<br />
Server = http://arch.ashleytowns.id.au/repo/$arch<br />
</nowiki>}}<br />
<br />
=== Bennix Repo ===<br />
<br />
* '''Maintainer:''' Ben P. Dorsi-Todaro ([https://techmeout.org Tech Me Out])<br />
* '''Description:''' Packages [http://ben-dorsi-todaro.com/ Ben P. Dorsi-Todaro] uses and aren't listed in repos, or packages built by [http://www.bigbenshosting.com/ Big Ben's Web Hosting] <br />
* '''Key-ID:''' F14BB858F6253DA0<br />
<br />
{{bc|<nowiki><br />
[bigben-repo]<br />
SigLevel = Optional TrustAll<br />
Server = http://bennix.net/bigben-repo/<br />
</nowiki>}}<br />
<br />
=== blackeagle-pre-community ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#idevolder Ike Devolder]<br />
* '''Description:''' testing of the by me maintaned packages before moving to ''community'' repository<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[blackeagle-pre-community]<br />
Server = https://repo.herecura.be/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== chaotic-aur ===<br />
<br />
* '''Maintainer:''' [https://github.com/pedrohlc PedroHLC]<br />
* '''Description:''' Auto builds AUR packages the maintainer uses, update them hourly (a few are daily). Hosted in São Carlos, SP, Brazil. x86_64 only.<br />
* '''Key-ID:''' [http://pool.sks-keyservers.net/pks/lookup?search=0x3056513887B78AEB&fingerprint=on&op=index], fingerprint {{ic|EF92 5EA6 0F33 D0CB 85C4 4AD1 3056 5138 87B7 8AEB }}<br />
* '''Note:''' See [https://lonewolf.pedrohlc.com/chaotic-aur maintainer's notes].<br />
{{bc|<nowiki><br />
[chaotic-aur]<br />
Server = http://lonewolf-builder.duckdns.org/$repo/x86_64<br />
Server = http://lonewolf-ipfs.pedrohlc.com/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== catalyst ===<br />
<br />
* '''Maintainer:''' [[User:Vi0L0|Vi0l0]]<br />
* '''Description:''' ATI Catalyst proprietary drivers.<br />
* '''Key-ID:''' 653C3094<br />
<br />
{{bc|<nowiki><br />
[catalyst]<br />
Server = https://mirror.hactar.xyz/Vi0L0/catalyst/$arch<br />
</nowiki>}}<br />
<br />
=== catalyst-hd234k ===<br />
<br />
* '''Maintainer:''' [[User:Vi0L0|Vi0l0]]<br />
* '''Description:''' ATI Catalyst proprietary drivers.<br />
* '''Key-ID:''' 653C3094<br />
<br />
{{bc|<nowiki><br />
[catalyst-hd234k]<br />
Server = https://mirror.hactar.xyz/Vi0L0/catalyst-hd234k/$arch<br />
</nowiki>}}<br />
<br />
=== city ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#bgyorgy Balló György]<br />
* '''Description:''' Experimental/unpopular packages.<br />
* '''Upstream page:''' https://pkgbuild.com/~bgyorgy/city.html<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[city]<br />
Server = https://pkgbuild.com/~bgyorgy/$repo/os/$arch<br />
</nowiki>}}<br />
<br />
=== coderkun-aur ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/coderkun/ coderkun]<br />
* '''Description:''' AUR packages with random software. Supporting package deltas and package and database signing.<br />
* '''Upstream page:''' https://www.suruatoel.xyz/arch<br />
* '''Key-ID:''' 39E27199A6BEE374<br />
* '''Keyfile:''' [https://www.suruatoel.xyz/coderkun.asc https://www.suruatoel.xyz/coderkun.asc]<br />
<br />
{{bc|<nowiki><br />
[coderkun-aur]<br />
Server = http://arch.suruatoel.xyz/$repo/$arch/<br />
</nowiki>}}<br />
<br />
=== coderkun-aur-audio ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/coderkun/ coderkun]<br />
* '''Description:''' AUR packages with audio-related (realtime kernels, lv2-plugins, …) software. Supporting package deltas and package and database signing.<br />
* '''Upstream page:''' https://www.suruatoel.xyz/arch<br />
* '''Key-ID:''' 39E27199A6BEE374<br />
* '''Keyfile:''' [https://www.suruatoel.xyz/coderkun.key https://www.suruatoel.xyz/coderkun.key]<br />
<br />
{{bc|<nowiki><br />
[coderkun-aur-audio]<br />
Server = http://arch.suruatoel.xyz/$repo/$arch/<br />
</nowiki>}}<br />
<br />
=== devkitpro ===<br />
<br />
* '''Maintainer:''' [https://devkitpro.org/ wintermute]<br />
* '''Description:''' Provides Homebrew toolchains for the Nintendo Wii, Gamecube, DS, GBA, Gamepark gp32 and Nintendo Switch<br />
* '''Upstream page:''' https://devkitpro.org/wiki/devkitPro_pacman<br />
* '''Key-ID:''' F7FD5492264BB9D0<br />
<br />
{{Note|Repository has its own additional keyring at https://downloads.devkitpro.org/devkitpro-keyring-r1.787e015-2-any.pkg.tar.xz.}}<br />
<br />
{{bc|<nowiki><br />
[dkp-libs]<br />
Server = https://downloads.devkitpro.org/packages<br />
[dkp-linux]<br />
Server = https://downloads.devkitpro.org/packages<br />
</nowiki>}}<br />
<br />
=== disastrousaur ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/TheGoliath/ TheGoliath]<br />
* '''Description:''' AUR packages mostly useful for daily use. Supporting package and database signing.<br />
* '''Upstream page:''' https://mirror.repohost.de/disastrousaur<br />
* '''Key-ID:''' CBAE582A876533FD<br />
* '''Keyfile:''' [https://mirror.xdfr.de/disastrousaur.key https://mirror.xdfr.de/disastrousaur.key]<br />
<br />
{{bc|<nowiki><br />
[disastrousaur]<br />
Server = https://mirror.repohost.de/$repo<br />
</nowiki>}}<br />
<br />
=== eatabrick ===<br />
<br />
* '''Maintainer:''' bentglasstube<br />
* '''Description:''' Packages for software written by (and a few just compiled by) bentglasstube.<br />
<br />
{{bc|<nowiki><br />
[eatabrick]<br />
Server = http://repo.eatabrick.org/$arch<br />
</nowiki>}}<br />
<br />
=== eschwartz ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#eschwartz Eli Schwartz]<br />
* '''Description:''' Personal repo with AUR packages and some core packages from git (including glibc and pacman). Contains debug packages.<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[eschwartz]<br />
Server = https://pkgbuild.com/~eschwartz/repo/$arch<br />
</nowiki>}}<br />
<br />
=== ffy00 ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#FFY00 Filipe Laíns]<br />
* '''Description:''' Personal repo. Contains some packages related to the D language.<br />
* '''Key-ID:''' Not needed, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[ffy00]<br />
Server = https://pkgbuild.com/~ffy00/repo<br />
</nowiki>}}<br />
<br />
=== fusion809 ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/fusion809|Brenton Horne]] (brentonhorne77 at gmail dot com).<br />
* '''Description:''' Provides a few AUR and other packages I like. Like CodeLite and bleeding-edge (latest release within 1 day of its release) GVim (GTK+2 interface).<br />
* '''Package list:''' http://download.opensuse.org/repositories/home:/fusion809/Arch_Extra/x86_64/<br />
* '''Key-ID:''' 03264DDCD606DC98<br />
* '''Keyfile:''' https://download.opensuse.org/repositories/home:/fusion809/Arch_Extra/x86_64/home_fusion809_Arch_Extra.key<br />
<br />
{{bc|<nowiki><br />
[home_fusion809_Arch_Extra]<br />
Server = https://download.opensuse.org/repositories/home:/fusion809/Arch_Extra/$arch<br />
</nowiki>}}<br />
<br />
=== gnome-devel ===<br />
<br />
* '''Maintainer:''' [https://plus.google.com/+AndresFernandezperonista Andres Fernandez], [https://plus.google.com/+FernandoFernandezBerel Fernando Fernandez]<br />
* '''Description:''' GNOME development releases. For testing purposes only.<br />
* '''Package list:''' https://softwareperonista.com.ar/repo/archlinux/gnome-devel/x86_64/<br />
* '''Key-ID:''' DDCE9FD63370080B<br />
<br />
{{Note|Must be put above {{ic|[testing]}} repository.}}<br />
<br />
{{bc|<nowiki><br />
[gnome-devel]<br />
Server = https://softwareperonista.com.ar/repo/archlinux/gnome-devel/$arch<br />
</nowiki>}}<br />
<br />
=== herecura ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#idevolder Ike Devolder]<br />
* '''Description:''' additional packages not found in the ''community'' repository<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[herecura]<br />
Server = https://repo.herecura.be/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== holo ===<br />
<br />
* '''Maintainer:''' Stefan Majewsky <holo-pacman@posteo.de> (please prefer to report issues at [https://github.com/majewsky/holo-pacman-repo/issues Github])<br />
* '''Description:''' Packages for [https://holocm.org Holo configuration management], including compatible plugins and tools.<br />
* '''Upstream page:''' https://github.com/majewsky/holo-pacman-repo<br />
* '''Package list:''' https://repo.holocm.org/archlinux/x86_64<br />
* '''Key-ID:''' 0xF7A9C9DC4631BD1A<br />
<br />
{{bc|<nowiki><br />
[holo]<br />
Server = https://repo.holocm.org/archlinux/x86_64<br />
</nowiki>}}<br />
<br />
=== ivasilev ===<br />
<br />
* '''Maintainer:''' [https://ivasilev.net Ianis G. Vasilev]<br />
* '''Description:''' A variety of packages, mostly my own software and AUR builds.<br />
* '''Upstream page:''' https://ivasilev.net/pacman<br />
* '''Key-ID:''' [https://pgp.mit.edu/pks/lookup?op=vindex&search=0xB77A3C8832838F1F80ADFD7E1D0507B417DAB671 17DAB671]<br />
<br />
{{bc|<nowiki><br />
[ivasilev]<br />
Server = https://ivasilev.net/pacman/$arch<br />
</nowiki>}}<br />
<br />
=== jlk ===<br />
<br />
* '''Maintainer:''' [[User:Lahwaacz|Jakub Klinkovský]]<br />
* '''Description:''' Various packages from the ABS and AUR. Modified packages are in the {{ic|modified}} group.<br />
* '''Upstream page:''' https://jlk.fjfi.cvut.cz/arch/repo/README.html<br />
* '''Key-ID:''' 932BA3FA0C86812A32D1F54DAB5964AEB9FEDDDC<br />
<br />
{{bc|<nowiki><br />
[jlk]<br />
Server = https://jlk.fjfi.cvut.cz/arch/repo<br />
</nowiki>}}<br />
<br />
=== linux-macbook ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/m3thodic Tony Lambiris]<br />
* '''Description:''' AUR builds for the linux-macbook kernel by its developer, m3thodic<br />
* '''Upstream page:''' https://aur.archlinux.org/pkgbase/linux-macbook/<br />
* '''Key-ID:''' A55A1B6C098962D84AE9B57016A33C9959A40DED<br />
<br />
{{bc|<nowiki><br />
[linux-macbook]<br />
Server = http://libpcap.net/repo/linux-macbook<br />
</nowiki>}}<br />
<br />
=== llvm-svn ===<br />
<br />
* '''Maintainer:''' [[User:Kerberizer|Luchesar V. ILIEV (kerberizer)]]<br />
* '''Description:''' [https://aur.archlinux.org/pkgbase/llvm-svn llvm-svn] and [https://aur.archlinux.org/pkgbase/lib32-llvm-svn lib32-llvm-svn] from AUR: the LLVM compiler infrastructure, the Clang frontend, and the tools associated with it<br />
* '''Key-ID:''' [https://sks-keyservers.net/pks/lookup?op=vindex&search=0x76563F75679E4525&fingerprint=on&exact=on 0x76563F75679E4525], fingerprint {{ic|D16C F22D 27D1 091A 841C 4BE9 7656 3F75 679E 4525}}<br />
<br />
{{bc|<nowiki><br />
[llvm-svn]<br />
Server = https://repos.uni-plovdiv.net/archlinux/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== markzz ===<br />
<br />
* '''Maintainer:''' [[User:Markzz|Mark Weiman (markzz)]]<br />
* '''Description:''' Packages that markzz maintains or uses on the AUR; this includes Linux with the vfio patchset ({{AUR|linux-vfio}} and {{AUR|linux-vfio-lts}}), and packages for analysis of network data.<br />
* '''Key ID:''' DEBB9EE4<br />
<br />
{{Note|If you want to add the key by installing the ''markzz-keyring'' package, temporarily add {{ic|1=SigLevel = Never}} into the repository section.}}<br />
<br />
{{bc|<nowiki><br />
[markzz]<br />
Server = https://repo.markzz.com/arch/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== maximbaz ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#maximbaz Maxim Baz]<br />
* '''Description:''' Personal repo with AUR packages (notably {{AUR|chromium-vaapi}}).<br />
* '''Key-ID:''' 12C87A28FEAC6B20<br />
<br />
{{bc|<nowiki><br />
[maximbaz]<br />
Server = https://pkgbuild.com/~maximbaz/repo/<br />
</nowiki>}}<br />
<br />
=== miffe ===<br />
<br />
* '''Maintainer:''' [https://bbs.archlinux.org/profile.php?id=4059 miffe]<br />
* '''Description:''' AUR packages maintained by miffe, e.g. linux-mainline<br />
* '''Key ID:''' 313F5ABD<br />
<br />
{{bc|<nowiki><br />
[miffe]<br />
Server = https://arch.miffe.org/$arch/<br />
</nowiki>}}<br />
<br />
=== mikelpint ===<br />
<br />
* '''Maintainer:''' [[User:Mikelpint|Mikel Pintado (Mikelpint)]]<br />
* '''Description:''' Packages that mikelpint maintains in the AUR.<br />
* '''Key ID:''' 5CA78FC65B189E2B<br />
<br />
{{bc|<nowiki><br />
[mikelpint]<br />
Server = https://mikelpint.github.io/repository/archlinux/repo<br />
</nowiki>}}<br />
<br />
=== Minerva W Science ===<br />
<br />
* '''Maintainer:''' Minerva W<br />
* '''Description:''' [[OpenFOAM]] packages.<br />
* '''Key-ID:''' 3FF21B78117507DA<br />
* '''Keyfile:''' https://download.opensuse.org/repositories/home:/Minerva_W:/Science/Arch_Extra/x86_64/home_Minerva_W_Science_Arch_Extra.key<br />
<br />
{{bc|<nowiki><br />
[home_Minerva_W_Science_Arch_Extra]<br />
Server = https://download.opensuse.org/repositories/home:/Minerva_W:/Science/Arch_Extra/$arch <br />
</nowiki>}}<br />
<br />
=== mobile ===<br />
<br />
* '''Maintainer:''' [https://keybase.io/farwayer farwayer]<br />
* '''Description:''' React Native and Android development<br />
* '''Upstream page:''' https://keybase.pub/farwayer/arch/mobile/<br />
* '''Key ID:''' 7943315502A936D7<br />
<br />
{{bc|<nowiki><br />
[mobile]<br />
Server = https://farwayer.keybase.pub/arch/$repo<br />
</nowiki>}}<br />
<br />
=== nah ===<br />
<br />
* '''Maintainer:''' [https://yeah.nah.nz phillid]<br />
* '''Description:''' Pre-built versions of the (slow-to-build) graph-tool python libraries, mingw-w64<br />
* '''Key ID:''' 7BF3D17D0884BF5B<br />
<br />
{{bc|<nowiki><br />
[nah]<br />
Server = https://repo.nah.nz/$repo<br />
</nowiki>}}<br />
<br />
=== pkgbuilder ===<br />
<br />
* '''Maintainer:''' [https://chriswarrick.com/ Chris Warrick]<br />
* '''Description:''' A repository for PKGBUILDer, a Python AUR helper.<br />
* '''Upstream page:''' https://github.com/Kwpolska/pkgbuilder<br />
* '''Key-ID:''' 5EAAEA16<br />
<br />
{{bc|<nowiki><br />
[pkgbuilder]<br />
Server = https://pkgbuilder-repo.chriswarrick.com/<br />
</nowiki>}}<br />
<br />
=== post-factum kernels ===<br />
<br />
* '''Maintainer''': [https://aur.archlinux.org/account/post-factum Oleksandr Natalenko aka post-factum]<br />
* '''Upstream page''': https://gitlab.com/post-factum/pf-kernel/wikis/README<br />
* '''Description''': [[Kernel#Major_patchsets|pf-kernel]] packages by its developer, post-factum<br />
* '''Key-ID:''': 95C357D2AF5DA89D<br />
* '''Keyfile''': https://download.opensuse.org/repositories/home:/post-factum:/kernels/Arch/x86_64/home_post-factum_kernels_Arch.key<br />
<br />
{{bc|<nowiki><br />
[home_post-factum_kernels_Arch]<br />
Server = https://download.opensuse.org/repositories/home:/post-factum:/kernels/Arch/$arch<br />
</nowiki>}}<br />
<br />
=== QOwnNotes ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/pbek Patrizio Bekerle] (pbek), QOwnNotes author<br />
* '''Description:''' QOwnNotes is a open source notepad and todo list manager with markdown support and [[ownCloud]] integration.<br />
* '''Key-ID:''' FFC43FC94539B8B0<br />
* '''Keyfile:''' https://download.opensuse.org/repositories/home:/pbek:/QOwnNotes/Arch_Extra/x86_64/home_pbek_QOwnNotes_Arch_Extra.key<br />
<br />
{{bc|<nowiki><br />
[home_pbek_QOwnNotes_Arch_Extra]<br />
Server = https://download.opensuse.org/repositories/home:/pbek:/QOwnNotes/Arch_Extra/$arch<br />
</nowiki>}}<br />
<br />
=== qt-debug ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/The-Compiler The Compiler]<br />
* '''Description:''' Qt/PyQt builds with debug symbols<br />
* '''Upstream page:''' https://github.com/qutebrowser/qt-debug-pkgbuild<br />
* '''Key-ID:''' D6A1C70FE80A0C82<br />
<br />
{{bc|<nowiki><br />
[qt-debug]<br />
Server = https://qutebrowser.org/qt-debug/$arch<br />
</nowiki>}}<br />
<br />
=== quarry ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#anatolik anatolik]<br />
* '''Description:''' Arch binary repository for [http://rubygems.org/ Rubygems] packages. See [https://bbs.archlinux.org/viewtopic.php?id=182729 forum announcement] for more information.<br />
* '''Sources:''' https://github.com/anatol/quarry<br />
* '''Key-ID:''' Not needed, as maintainer is a developer<br />
<br />
{{bc|<nowiki><br />
[quarry]<br />
Server = https://pkgbuild.com/~anatolik/quarry/x86_64/<br />
</nowiki>}}<br />
<br />
=== repo-ck ===<br />
<br />
Kernel and modules with Brain Fuck Scheduler and all the goodies in the ck1 patch set.<br />
<br />
See [[/Repo-ck]].<br />
<br />
=== seblu ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#seblu Sébastien Luttringer]<br />
* '''Description:''' All seblu useful pre-built packages, some homemade (linux-seblu-meta, virtualbox-ext-oracle, spotify, masterpdfeditor, yaourt, zfs-dkms, etc).<br />
* '''Key-ID:''' Not required, as maintainer is a Developer<br />
<br />
{{bc|<nowiki><br />
[seblu]<br />
Server = https://al.seblu.net/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== seiichiro ===<br />
<br />
* '''Maintainer:''' [https://www.seiichiro0185.org Stefan Brand (seiichiro0185)]<br />
* '''Description:''' AUR-packages I use frequently<br />
* '''Key-ID:''' 805517CC<br />
<br />
{{bc|<nowiki><br />
[seiichiro]<br />
Server = https://www.seiichiro0185.org/repo/$arch<br />
</nowiki>}}<br />
<br />
=== sergej-repo ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#spupykin Sergej Pupykin]<br />
* '''Description:''' psi-plus, owncloud-git, ziproxy, android, MySQL, and other stuff. Some packages also available for armv7h.<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[sergej-repo]<br />
Server = http://repo.p5n.pp.ru/$repo/os/$arch<br />
</nowiki>}}<br />
<br />
=== siosm-aur ===<br />
<br />
* '''Maintainer:''' [https://tim.siosm.fr/about/ Timothee Ravier]<br />
* '''Description:''' packages also available in the Arch User Repository, sometimes with minor fixes<br />
* '''Upstream page:''' https://tim.siosm.fr/repositories/<br />
* '''Key-ID:''' 78688F83<br />
<br />
{{bc|<nowiki><br />
[siosm-aur]<br />
Server = http://siosm.fr/repo/$repo/<br />
</nowiki>}}<br />
<br />
=== sublime-text ===<br />
<br />
* '''Maintainer:''' Sublime Text developer<br />
* '''Description:''' Sublime Text editor packages from developer's repository<br />
* '''Upstream page:''' https://www.sublimetext.com/docs/3/linux_repositories.html#pacman<br />
* '''Key-ID:''' 8A8F901A<br />
<br />
{{bc|<nowiki><br />
[sublime-text]<br />
Server = https://download.sublimetext.com/arch/stable/x86_64<br />
</nowiki>}}<br />
<br />
=== subtitlecomposer ===<br />
<br />
* '''Maintainer:''' Mladen Milinkovic (maxrd2)<br />
* '''Description:''' Subtitle Composer stable and nightly builds<br />
* '''Upstream page:''' https://github.com/maxrd2/subtitlecomposer<br />
* '''Key-ID:''' EF9D9B26<br />
<br />
{{bc|<nowiki><br />
[subtitlecomposer]<br />
Server = https://smoothware.net/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== trinity ===<br />
<br />
* '''Maintainer:''' Michael Manley <mmanley@nasutek.com><br />
* '''Description:''' [[Trinity]] Desktop Environment<br />
* '''Key-ID:''' 65A4AC99<br />
<br />
{{bc|<nowiki><br />
[trinity]<br />
Server = https://repo.nasutek.com/arch/contrib/trinity/x86_64<br />
</nowiki>}}<br />
<br />
=== ungoo ===<br />
<br />
* '''Maintainer:''' [[User:Scrumplex|Sefa Eyeoglu]] <contact@scrumplex.net> (https://scrumplex.net)<br />
* '''Description:''' Latest ungoogled-chromium build<br />
* '''Upstream page:''' https://arch.scrumplex.net/ungoo<br />
* '''Key-ID:''' AF1FB107E188CB979A94FD7FC10411294912A422<br />
<br />
{{bc|<nowiki><br />
[ungoo]<br />
Server = https://arch.scrumplex.net/$repo/os/x86_64<br />
</nowiki>}}<br />
<br />
=== Webkit2Gtk-unstable ===<br />
<br />
* '''Maintainer:''' [[User:Mrmariusz|Mariusz Wojcik]]<br />
* '''Description:''' Latest Webkit2Gtk build for early adopters.<br />
* '''Upstream Page:''' https://webkitgtk.org/<br />
* '''Key-ID:''' 346854B5<br />
<br />
{{bc|<nowiki><br />
[home_mrmariusz_ArchLinux]<br />
Server = https://download.opensuse.org/repositories/home:/mrmariusz/ArchLinux/$arch<br />
</nowiki>}}<br />
<br />
=== xyne-x86_64 ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#xyne Xyne]<br />
* '''Description:''' A repository for Xyne's own projects.<br />
* '''Upstream page:''' http://xyne.archlinux.ca/projects/<br />
* '''Key-ID:''' Not required, as maintainer is a TU<br />
<br />
{{bc|<nowiki><br />
[xyne-x86_64]<br />
Server = https://xyne.archlinux.ca/repos/xyne<br />
</nowiki>}}<br />
<br />
== Unsigned ==<br />
<br />
{{Note|Users will need to add the following to these entries: {{ic|1=SigLevel = PackageOptional}}}}<br />
<br />
=== alucryd ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#alucryd Maxime Gauduin]<br />
* '''Description:''' Various packages Maxime Gauduin maintains (or not) in the AUR.<br />
<br />
{{bc|<nowiki><br />
[alucryd]<br />
Server = https://pkgbuild.com/~alucryd/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== alucryd-multilib ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#alucryd Maxime Gauduin]<br />
* '''Description:''' Various packages needed to run Steam without its runtime environment.<br />
<br />
{{bc|<nowiki><br />
[alucryd-multilib]<br />
Server = https://pkgbuild.com/~alucryd/$repo/x86_64<br />
</nowiki>}}<br />
<br />
=== andrwe ===<br />
<br />
* '''Maintainer:''' Andrwe Lord Weber<br />
* '''Description:''' contains programs I'm using on many systems<br />
* '''Upstream page:''' http://andrwe.org/linux/repository<br />
<br />
{{bc|<nowiki><br />
[andrwe]<br />
Server = http://repo.andrwe.org/$arch<br />
</nowiki>}}<br />
<br />
=== archgeotux ===<br />
<br />
* '''Maintainer:''' Samuel Mesa<br />
* '''Description:''' Geospatial and geographic information system applications<br />
* '''Upstream page:''' https://archgeotux.sourceforge.io/<br />
<br />
{{bc|<nowiki><br />
[archgeotux]<br />
Server = https://downloads.sourceforge.net/project/archgeotux/$arch<br />
</nowiki>}}<br />
<br />
=== archlinuxfr ===<br />
<br />
* '''Maintainer:'''<br />
* '''Description:'''<br />
* '''Upstream page:''' http://afur.archlinux.fr<br />
<br />
{{bc|<nowiki><br />
[archlinuxfr]<br />
Server = http://repo.archlinux.fr/$arch<br />
</nowiki>}}<br />
<br />
=== archlinuxgr ===<br />
<br />
* '''Maintainer:'''<br />
* '''Description:''' many interesting packages provided by the Hellenic (Greek) Arch Linux community<br />
<br />
{{bc|<nowiki><br />
[archlinuxgr]<br />
Server = http://archlinuxgr.tiven.org/archlinux/$arch<br />
</nowiki>}}<br />
<br />
=== archlinuxgr-kde4 ===<br />
<br />
* '''Maintainer:'''<br />
* '''Description:''' KDE4 packages (plasmoids, themes etc) provided by the Hellenic (Greek) Arch Linux community<br />
<br />
{{bc|<nowiki><br />
[archlinuxgr-kde4]<br />
Server = http://archlinuxgr.tiven.org/archlinux-kde4/$arch<br />
</nowiki>}}<br />
<br />
=== craftdestiny ===<br />
<br />
* '''Maintainer:''' [https://craftdestiny.ovh LinuxVieLoisir]<br />
* '''Description:''' A Craft Destiny repository is there to avoid long compilation on some software. It also adds some very useful additional software.<br />
<br />
{{bc|<nowiki><br />
[craftdestiny]<br />
Server = https://miroir.craftdestiny.ovh/archlinux-repo/<br />
</nowiki>}}<br />
<br />
=== dx37essentials ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/DragonX256 DragonX256]<br />
* '''Description:''' Personal repository. Contains packages from AUR, which I using every day.<br />
* '''Git repo:''' https://gitlab.com/DX37/dx37essentials<br />
* '''Upstream page:''' https://dx37.gitlab.io/dx37essentials<br />
<br />
{{bc|<nowiki><br />
[dx37essentials]<br />
Server = https://dx37.gitlab.io/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== heftig ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/developers/#heftig Jan Steffens]<br />
* '''Description:''' Includes pulseaudio-git, pavucontrol-git, and firefox-developer-edition<br />
* '''Upstream page:''' https://bbs.archlinux.org/viewtopic.php?id=117157<br />
<br />
{{bc|<nowiki><br />
[heftig]<br />
Server = https://pkgbuild.com/~heftig/repo/$arch<br />
</nowiki>}}<br />
<br />
=== home-thaodan ===<br />
<br />
* '''Maintainer''': [https://aur.archlinux.org/account/Thaodan Thaodan]<br />
* '''Upstream page''': https://gitlab.com/Thaodan/linux-pf<br />
* '''Description''': [[Kernel#Major_patchsets|pf-kernel]] and other packages by pf-kernel fork developer, Thaodan<br />
<br />
{{bc|<nowiki><br />
[home-thaodan]<br />
Server = https://thaodan.de/home/bidar/home-thaodan/$arch<br />
</nowiki>}}<br />
<br />
=== jkanetwork ===<br />
<br />
* '''Maintainer:''' kprkpr <kevin01010 at gmail dot com><br />
* '''Maintainer:''' Joselucross <jlgarrido97 at gmail dot com><br />
* '''Description:''' Packages of AUR like pimagizer,stepmania,yaourt,linux-mainline,wps-office,grub-customizer,some IDE.. Open for all that wants to contribute<br />
* '''Upstream page:''' http://repo.jkanetwork.com/<br />
<br />
{{bc|<nowiki><br />
[jkanetwork]<br />
Server = http://repo.jkanetwork.com/repo/$repo/<br />
</nowiki>}}<br />
<br />
=== mesa-git ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#lcarlier Laurent Carlier]<br />
* '''Description:''' Mesa git builds for the ''testing'' and ''multilib-testing'' repositories<br />
<br />
{{bc|<nowiki><br />
[mesa-git]<br />
Server = https://pkgbuild.com/~lcarlier/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== minzord===<br />
<br />
* '''Maintainer:''' Minzord<br />
* '''Description:''' A Minzord repository is there to avoid long compilation on some software. It also adds some very useful additional software.<br />
<br />
{{bc|<nowiki><br />
[minzord]<br />
Server = https://minzordos.000webhostapp.com/Repo/<br />
</nowiki>}}<br />
<br />
=== ownstuff ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/Martchus Martchus]<br />
* '''Description:''' A lot of packages from the AUR, eg. a great number of mingw-w64 packages, fonts, tools like [https://aur.archlinux.org/packages/tageditor Tag Editor], [https://aur.archlinux.org/packages/syncthingtray Syncthing Tray] and [https://aur.archlinux.org/packages/subtitlecomposer Subtitle Composer]<br />
* '''Upstream page''': https://github.com/Martchus/PKGBUILDs (sources beside the AUR) and https://martchus.no-ip.biz/repoindex (package browser/search)<br />
<br />
{{bc|<nowiki><br />
[ownstuff]<br />
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch<br />
</nowiki>}}<br />
<br />
=== pantheon ===<br />
<br />
* '''Maintainer:''' [https://www.archlinux.org/people/trusted-users/#alucryd Maxime Gauduin]<br />
* '''Description:''' Repository containing Pantheon-related packages<br />
<br />
{{bc|<nowiki><br />
[pantheon]<br />
Server = https://pkgbuild.com/~alucryd/$repo/$arch<br />
</nowiki>}}<br />
<br />
=== pietma ===<br />
<br />
* '''Maintainer:''' MartiMcFly <martimcfly@autorisation.de><br />
* '''Description:''' Arch User Repository packages [https://aur.archlinux.org/packages/?K=martimcfly&SeB=m I create or maintain.].<br />
* '''Upstream page:''' http://pietma.com/tag/aur/<br />
<br />
{{bc|<nowiki><br />
[pietma]<br />
Server = http://repository.pietma.com/nexus/content/repositories/archlinux/$arch/$repo<br />
</nowiki>}}<br />
<br />
=== pnsft-pur ===<br />
<br />
* '''Maintainer:''' [https://aur.archlinux.org/account/ponsfoot ponsfoot]<br />
* '''Description:''' Japanese input method packages Mozc (vanilla) and libkkc<br />
<br />
{{bc|<nowiki><br />
[pnsft-pur]<br />
Server = https://osdn.net/projects/ponsfoot-aur/storage/pur/x86_64/<br />
</nowiki>}}</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Pacman/Tips_and_tricks&diff=547832Pacman/Tips and tricks2018-10-15T16:42:45Z<p>Scrumplex: Promote programs already in the official repositories.</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Package management]]<br />
[[es:Pacman/Tips and tricks]]<br />
[[fa:Pacman tips]]<br />
[[fr:Astuces Pacman]]<br />
[[it:Pacman/Tips and tricks]]<br />
[[ja:Pacman ヒント]]<br />
[[pt:Pacman/Tips and tricks]]<br />
[[ru:Pacman/Tips and tricks]]<br />
[[zh-hans:Pacman/Tips and tricks]]<br />
{{Related articles start}}<br />
{{Related|Mirrors}}<br />
{{Related|Creating packages}}<br />
{{Related articles end}}<br />
For general methods to improve the flexibility of the provided tips or ''pacman'' itself, see [[Core utilities]] and [[Bash]].<br />
<br />
== Maintenance ==<br />
<br />
{{Expansion|{{ic|1=Usage=}} introduced with pacman 4.2, see [http://allanmcrae.com/2014/12/pacman-4-2-released/]}}<br />
<br />
{{Note|Instead of using ''comm'' (which requires sorted input with ''sort'') in the sections below, you may also use {{ic|grep -Fxf}} or {{ic|grep -Fxvf}}.}}<br />
<br />
See also [[System maintenance]].<br />
<br />
=== Listing packages ===<br />
<br />
You may want to get the list of installed packages with their version, which is useful when reporting bugs or discussing installed packages.<br />
<br />
* List all explicitly installed packages: {{ic|pacman -Qe}}.<br />
* List all packages in the group named {{ic|group}}: {{ic|pacman -Sg group}}<br />
* List all explicitly installed native packages (i.e. present in the sync database) that are not direct or optional dependencies: {{ic|pacman -Qent}}.<br />
* List all foreign packages (typically manually downloaded and installed or packages removed from the repositories): {{ic|pacman -Qm}}.<br />
* List all native packages (installed from the sync database(s)): {{ic|pacman -Qn}}.<br />
* List packages by regex: {{ic|pacman -Qs ''regex''}}.<br />
* List packages by regex with custom output format: {{ic|expac -s "%-30n %v" ''regex''}} (needs {{Pkg|expac}}).<br />
<br />
==== With size ====<br />
<br />
Figuring out which packages are largest can be useful when trying to free space on your hard drive. There are two options here: get the size of individual packages, or get the size of packages and their dependencies.<br />
<br />
===== Individual packages =====<br />
<br />
The following command will list all installed packages and their individual sizes:<br />
<br />
$ pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h<br />
<br />
===== Packages and dependencies =====<br />
<br />
To list package sizes with their dependencies,<br />
<br />
* Install {{Pkg|expac}} and run {{ic|<nowiki>expac -H M '%m\t%n' | sort -h</nowiki>}}.<br />
* Run {{Pkg|pacgraph}} with the {{ic|-c}} option.<br />
<br />
To list the download size of several packages (leave {{ic|''packages''}} blank to list all packages):<br />
<br />
$ expac -S -H M '%k\t%n' ''packages''<br />
<br />
To list explicitly installed packages not in {{Grp|base}} nor {{Grp|base-devel}} with size and description:<br />
<br />
$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <(pacman -Qqg base base-devel | sort)) | sort -n<br />
<br />
To list the packages marked for upgrade with their download size<br />
<br />
$ pacman -Quq|xargs expac -S -H M '%k\t%n' | sort -sh<br />
<br />
==== By date ====<br />
<br />
To list the 20 last installed packages with {{Pkg|expac}}, run:<br />
<br />
$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20<br />
<br />
or, with seconds since the epoch (1970-01-01 UTC):<br />
<br />
$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20<br />
<br />
==== Not in a specified group or repository ====<br />
<br />
{{Note|To get a list of packages installed as dependencies but no longer required by any installed package, see [[#Removing unused packages (orphans)]].}}<br />
<br />
List explicitly installed packages not in the {{Grp|base}} or {{Grp|base-devel}} groups:<br />
<br />
$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)<br />
<br />
List all installed packages unrequired by other packages, and which are not in the {{Grp|base}} or {{Grp|base-devel}} groups:<br />
<br />
$ comm -23 <(pacman -Qqt | sort) <(pacman -Sqg base base-devel | sort)<br />
<br />
As above, but with descriptions:<br />
<br />
$ expac -HM '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <(pacman -Qqg base base-devel | sort))<br />
<br />
List all installed packages that are ''not'' in the specified repository ''repo_name''<br />
<br />
$ comm -23 <(pacman -Qq | sort) <(pacman -Slq ''repo_name'' | sort)<br />
<br />
List all installed packages that are in the ''repo_name'' repository:<br />
<br />
$ comm -12 <(pacman -Qq | sort) <(pacman -Slq ''repo_name'' | sort)<br />
<br />
List all packages on the Arch Linux ISO that are not in the base group:<br />
<br />
<nowiki>$ comm -23 <(curl https://git.archlinux.org/archiso.git/plain/configs/releng/packages.both) <(pacman -Qqg base | sort)</nowiki><br />
<br />
==== Development packages ====<br />
<br />
To list all development/unstable packages, run:<br />
<br />
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'<br />
<br />
=== Listing files owned by a package with size ===<br />
<br />
This one might come in handy if you have found that a specific package uses a huge amount of space and you want to find out which files make up the most of that.<br />
<br />
$ pacman -Qlq ''package'' | grep -v '/$' | xargs du -h | sort -h<br />
<br />
=== Identify files not owned by any package ===<br />
<br />
If your system has stray files not owned by any package (a common case if you do not [[Enhance system stability#Use the package manager to install software|use the package manager to install software]]), you may want to find such files in order to clean them up. The general process for doing so is:<br />
<br />
# Create a sorted list of the files you want to check ownership of: {{bc|<nowiki>$ find /etc /opt /usr | sort > all_files.txt</nowiki>}}<br />
# Create a sorted list of the files tracked by ''pacman'' (and remove the trailing slashes from directories): {{bc|<nowiki>$ pacman -Qlq | sed 's|/$||' | sort > owned_files.txt</nowiki>}}<br />
# Find lines in the first list that are not in the second: {{bc|$ comm -23 all_files.txt owned_files.txt}}<br />
<br />
This process is tricky in practice because many important files are not part of any package (e.g. files generated at runtime, custom configs) and so will be included in the final output, making it difficult to pick out the files that can be safely deleted.<br />
<br />
{{Tip|The {{Pkg|lostfiles}} script performs similar steps, but also includes an extensive blacklist to remove common false positives from the output. [https://github.com/CyberShadow/aconfmgr aconfmgr] ({{AUR|aconfmgr-git}}) also allows tracking orphaned files using a configuration script.}}<br />
<br />
=== Removing unused packages (orphans) ===<br />
<br />
For recursively removing orphans and their configuration files:<br />
<br />
# pacman -Rns $(pacman -Qtdq)<br />
<br />
If no orphans were found ''pacman'' outputs {{ic|error: no targets specified}}. This is expected as no arguments were passed to {{ic|pacman -Rns}}.<br />
<br />
{{Note|The arguments {{ic|-Qt}} list only true orphans. To include packages which are ''optionally'' required by another package, pass the {{ic|-t}} flag twice (''i.e.'', {{ic|-Qtt}}).}}<br />
<br />
=== Removing everything but base group ===<br />
<br />
If it is ever necessary to remove all packages except the base group, try this one-liner (requires {{Pkg|pacman-contrib}}):<br />
<br />
# pacman -R $(comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base); do pactree -ul "$i"; done) | sort -u))<br />
<br />
The one-liner was originally devised in [https://bbs.archlinux.org/viewtopic.php?id=130176 this discussion], and later improved in this article.<br />
<br />
=== Getting the dependencies list of several packages ===<br />
<br />
Dependencies are alphabetically sorted and doubles are removed.<br />
<br />
{{Note|To only show the tree of local installed packages, use {{ic|pacman -Qi}}.}}<br />
<br />
$ pacman -Si ''packages'' | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u<br />
<br />
Alternatively, with {{Pkg|expac}}: <br />
<br />
$ expac -l '\n' %E -S ''packages'' | sort -u<br />
<br />
=== Listing changed backup files ===<br />
<br />
If you want to backup your system configuration files you could copy all files in {{ic|/etc/}}, but usually you are only interested in the files that you have changed. Modified [[Pacnew_and_Pacsave_files#Package_backup_files|backup files]] can be viewed with the following command:<br />
<br />
# pacman -Qii | awk '/^MODIFIED/ {print $2}'<br />
<br />
Running this command with root permissions will ensure that files readable only by root (such as {{ic|/etc/sudoers}}) are included in the output.<br />
<br />
{{Tip|See [[#Listing all changed files from packages]] to list all changed files ''pacman'' knows about, not only backup files.}}<br />
<br />
=== Backup the pacman database ===<br />
<br />
The following command can be used to backup the local ''pacman'' database:<br />
<br />
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local<br />
<br />
Store the backup ''pacman'' database file on one or more offline media, such as a USB stick, external hard drive, or CD-R.<br />
<br />
The database can be restored by moving the {{ic|pacman_database.tar.bz2}} file into the {{ic|/}} directory and executing the following command:<br />
<br />
# tar -xjvf pacman_database.tar.bz2<br />
<br />
{{Note|If the ''pacman'' database files are corrupted, and there is no backup file available, there exists some hope of rebuilding the ''pacman'' database. Consult [[#Restore pacman's local database]].}}<br />
<br />
{{Tip|The {{AUR|pakbak-git}} package provides a script and a [[systemd]] service to automate the task. Configuration is possible in {{ic|/etc/pakbak.conf}}.}}<br />
<br />
=== Check changelogs easily ===<br />
<br />
When maintainers update packages, commits are often commented in a useful fashion. Users can quickly check these from the command line by installing {{AUR|pacolog}}. This utility lists recent commit messages for packages from the official repositories or the AUR, by using {{ic|pacolog <package>}}.<br />
<br />
== Installation and recovery ==<br />
<br />
Alternative ways of getting and restoring packages.<br />
<br />
=== Installing packages from a CD/DVD or USB stick ===<br />
<br />
{{Merge|#Custom local repository|Use as an example and avoid duplication}}<br />
<br />
To download packages, or groups of packages:<br />
<br />
# cd ~/Packages<br />
# pacman -Syw base base-devel grub-bios xorg gimp --cachedir .<br />
# repo-add ./custom.db.tar.gz ./*<br />
<br />
Then you can burn the "Packages" folder to a CD/DVD or transfer it to a USB stick, external HDD, etc.<br />
<br />
To install:<br />
<br />
'''1.''' Mount the media:<br />
<br />
# mkdir /mnt/repo<br />
# mount /dev/sr0 /mnt/repo #For a CD/DVD.<br />
# mount /dev/sdxY /mnt/repo #For a USB stick.<br />
<br />
'''2.''' Edit {{ic|pacman.conf}} and add this repository ''before'' the other ones (e.g. extra, core, etc.). This is important. Do not just uncomment the one on the bottom. This way it ensures that the files from the CD/DVD/USB take precedence over those in the standard repositories:<br />
<br />
{{hc|/etc/pacman.conf|2=<br />
[custom]<br />
SigLevel = PackageRequired<br />
Server = file:///mnt/repo/Packages}}<br />
<br />
'''3.''' Finally, synchronize the ''pacman'' database to be able to use the new repository:<br />
<br />
# pacman -Syu<br />
<br />
=== Custom local repository ===<br />
<br />
Use the ''repo-add'' script included with ''pacman'' to generate a database for a personal repository. Use {{ic|repo-add --help}} for more details on its usage. To add a new package to the database, or to replace the old version of an existing package in the database, run:<br />
<br />
$ repo-add ''/path/to/repo.db.tar.gz /path/to/package-1.0-1-x86_64.pkg.tar.xz''<br />
<br />
{{Note|A package database is a tar file, optionally compressed. Valid extensions are ''.db'' or ''.files'' followed by an archive extension of ''.tar'', ''.tar.gz'', ''.tar.bz2'', ''.tar.xz'', or ''.tar.Z''. The file does not need to exist, but all parent directories must exist.}}<br />
<br />
The database and the packages do not need to be in the same directory when using ''repo-add'', but keep in mind that when using ''pacman'' with that database, they should be together. Storing all the built packages to be included in the repository in one directory also allows to use shell glob expansion to add or update multiple packages at once:<br />
<br />
$ repo-add ''/path/to/repo.db.tar.gz /path/to/*.pkg.tar.xz''<br />
<br />
{{Warning|''repo-add'' adds the entries into the database in the same order as passed on the command line. If multiple versions of the same package are involved, care must be taken to ensure that the correct version is added last. In particular, note that lexical order used by the shell depends on the locale and differs from the [https://www.archlinux.org/pacman/vercmp.8.html vercmp] ordering used by ''pacman''.}}<br />
<br />
''repo-remove'' is used to remove packages from the package database, except that only package names are specified on the command line.<br />
<br />
$ repo-remove ''/path/to/repo.db.tar.gz pkgname''<br />
<br />
Once the local repository database has been created, add the repository to {{ic|pacman.conf}} for each system that is to use the repository. An example of a custom repository is in {{ic|pacman.conf}}. The repository's name is the database filename with the file extension omitted. In the case of the example above the repository's name would simply be ''repo''. Reference the repository's location using a {{ic|file://}} url, or via FTP using ftp://localhost/path/to/directory.<br />
<br />
If willing, add the custom repository to the [[Unofficial user repositories|list of unofficial user repositories]], so that the community can benefit from it.<br />
<br />
=== Network shared pacman cache ===<br />
<br />
If you happen to run several Arch boxes on your LAN, you can share packages so that you can greatly decrease your download times. Keep in mind you should not share between different architectures (i.e. i686 and x86_64) or you will run into problems.<br />
<br />
==== Read-only cache ====<br />
<br />
If you are looking for a quick solution, you can simply run a standalone webserver which other computers can use as a first mirror:<br />
# ln -s /var/lib/pacman/sync/*.db /var/cache/pacman/pkg<br />
$ sudo -u http darkhttpd /var/cache/pacman/pkg --no-server-id<br />
You could also run darkhttpd as a systemd service for convenience. Just add this server at the top of your {{ic|/etc/pacman.d/mirrorlist}} in client machines with {{ic|1=Server = http&#58;//mymirror:8080}}. Make sure to keep your mirror updated.<br />
<br />
If you're already running a web server for some other purpose, you might wish to reuse that as your local repo server instead of darkhttpd. For example, say you already serve a site with [[nginx]], you can add an nginx server block listening on port 8080:<br />
<br />
{{hc|/etc/nginx/nginx.conf|<br />
http {<br />
# ... other nginx server configs up here<br />
<br />
server {<br />
listen 8080;<br />
root /var/cache/pacman/pkg;<br />
server_name myarchrepo.localdomain;<br />
try_files $uri $uri/;<br />
}<br />
}<br />
}}<br />
<br />
Remember to restart nginx after making this change.<br />
<br />
Whichever web server you use, remember to open port 8080 to local traffic (and you probably want to deny anything not local), so add a rule like the following to [[iptables]]:<br />
<br />
{{hc|/etc/iptables/iptables.rules|<br />
-A TCP -s 192.168.0.0/16 -p tcp -m tcp --dport 8080 -j ACCEPT<br />
}}<br />
<br />
Remember to restart iptables after making this change.<br />
<br />
==== Distributed read-only cache ====<br />
<br />
There are Arch-specific tools for automatically discovering other computers on your network offering a package cache. Try {{Pkg|pacredir}}, [[pacserve]], {{AUR|pkgdistcache}}, or {{AUR|paclan}}. pkgdistcache uses Avahi instead of plain UDP which may work better in certain home networks that route instead of bridge between WiFi and Ethernet.<br />
<br />
Historically, there was [https://bbs.archlinux.org/viewtopic.php?id=64391 PkgD] and [https://github.com/toofishes/multipkg multipkg], but they are no longer maintained.<br />
<br />
==== Read-write cache ====<br />
<br />
In order to share packages between multiple computers, simply share {{ic|/var/cache/pacman/}} using any network-based mount protocol. This section shows how to use [[shfs]] or [[SSHFS]] to share a package cache plus the related library-directories between multiple computers on the same local network. Keep in mind that a network shared cache can be slow depending on the file-system choice, among other factors.<br />
<br />
First, install any network-supporting filesystem packages: {{pkg|shfs-utils}}, {{pkg|sshfs}}, {{pkg|curlftpfs}}, {{pkg|samba}} or {{pkg|nfs-utils}}.<br />
<br />
{{Tip|<br />
* To use ''sshfs'' or ''shfs'', consider reading [[Using SSH Keys]].<br />
* By default, ''smbfs'' does not serve filenames that contain colons, which results in the client downloading the offending package afresh. To prevent this, use the {{ic|mapchars}} mount option on the client.<br />
}}<br />
<br />
Then, to share the actual packages, mount {{ic|/var/cache/pacman/pkg}} from the server to {{ic|/var/cache/pacman/pkg}} on every client machine.<br />
<br />
{{Warning|Do not make {{ic|/var/cache/pacman/pkg}} or any of its ancestors (e.g., {{ic|/var}}) a symlink. ''Pacman'' expects these to be directories. When ''pacman'' re-installs or upgrades itself, it will remove the symlinks and create empty directories instead. However during the transaction ''pacman'' relies on some files residing there, hence breaking the update process. Refer to {{bug|50298}} for further details.}}<br />
<br />
==== two-way with rsync ====<br />
<br />
Another approach in a local environment is [[rsync]]. Choose a server for caching and enable the [[Rsync#rsync daemon]]. On clients synchronize two-way with this share via rsync protocol. Filenames that contain colons are no problem for the rsync protocol.<br />
<br />
Draft example for a client, using {{ic|uname -m}} within the share name ensures an architecture dependant sync:<br />
# rsync rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/ ...<br />
# pacman ...<br />
# paccache ...<br />
# rsync /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/ ...<br />
<br />
==== Dynamic reverse proxy cache using nginx ====<br />
<br />
[[nginx]] can be used to proxy requests to official upstream mirrors and cache the results to local disk. All subsequent requests for that file will be served directly from the local cache, minimizing the amount of internet traffic needed to update a large number of servers with minimal effort. <br />
<br />
{{Warning| This method has a limitation. You must use mirrors that use the same relative path to package files and you must configure your cache to use that same path. In this example, we are using mirrors that use the relative path {{ic|/archlinux/$repo/os/$arch}} and our cache's {{ic|Server}} setting in {{ic|mirrorlist}} is configured similarly.}}<br />
<br />
In this example, we will run the cache server on {{ic|<nowiki>http://cache.domain.local:8080/</nowiki>}} and storing the packages in {{ic|/srv/http/pacman-cache/}}. <br />
<br />
Create the directory for the cache and adjust the permissions so nginx can write files to it:<br />
<br />
# mkdir /srv/http/pacman-cache<br />
# chown http:http /srv/http/pacman-cache<br />
<br />
Next, configure nginx as the [https://gist.github.com/anonymous/97ec4148f643de925e433bed3dc7ee7d dynamic cache] (read the comments for an explanation of the commands).<br />
<br />
Finally, update your other Arch Linux servers to use this new cache by adding the following line to the {{ic|mirrorlist}} file:<br />
<br />
{{hc|/etc/pacman.d/mirrorlist|<nowiki><br />
Server = http://cache.domain.local:8080/archlinux/$repo/os/$arch<br />
...<br />
</nowiki>}}<br />
<br />
{{Note| You will need to create a method to clear old packages, as this directory will continue to grow over time. {{ic|paccache}} (which is provided by {{pkg|pacman-contrib}}) can be used to automate this using retention criteria of your choosing. For example, {{ic|find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \;}} will keep the last 2 versions of packages in your cache directory.}}<br />
<br />
==== Synchronize pacman package cache using synchronization programs ====<br />
<br />
Use [[Syncthing]] or [[Resilio Sync]] to synchronize the ''pacman'' cache folders (i.e. {{ic|/var/cache/pacman/pkg}}).<br />
<br />
==== Preventing unwanted cache purges ====<br />
<br />
By default, {{Ic|pacman -Sc}} removes package tarballs from the cache that correspond to packages that are not installed on the machine the command was issued on. Because ''pacman'' cannot predict what packages are installed on all machines that share the cache, it will end up deleting files that should not be.<br />
<br />
To clean up the cache so that only ''outdated'' tarballs are deleted, add this entry in the {{ic|[options]}} section of {{ic|/etc/pacman.conf}}:<br />
<br />
CleanMethod = KeepCurrent<br />
<br />
=== Recreate a package from the file system ===<br />
<br />
{{Out of date|''bacman'' does not exist in {{Pkg|pacman}} 5.1.0.}}<br />
<br />
To recreate a package from the file system, use ''bacman'' (included with ''pacman''). Files from the system are taken as they are, hence any modifications will be present in the assembled package. Distributing the recreated package is therefore discouraged; see [[ABS]] and [[Arch Linux Archive]] for alternatives.<br />
<br />
{{Tip|''bacman'' honours the {{ic|PACKAGER}}, {{ic|PKGDEST}} and {{ic|PKGEXT}} options from {{ic|makepkg.conf}}. Bacman does not currently honor the {{ic|COMPRESS}} options in {{ic|makepkg.conf}}.}}<br />
<br />
An alternative tool would be {{AUR|fakepkg}}. It supports parallelization and can handle multiple input packages in one command, which ''bacman'' both does not support.<br />
<br />
=== List of installed packages ===<br />
<br />
Keeping a list of all the explicitly installed packages can be useful, to backup a system for example or speed up installation on a new system:<br />
<br />
$ pacman -Qqe > pkglist.txt<br />
<br />
{{Note|<br />
* With option {{ic|-t}}, the packages already required by other explicitly installed packages are not mentioned. If reinstalling from this list they will be installed but as dependencies only.<br />
* With option {{ic|-n}}, foreign packages (e.g. from [[AUR]]) would be omitted from the list.<br />
* Use {{ic|comm -13 <(pacman -Qqdt {{!}} sort) < (pacman -Qqdtt {{!}} sort) > optdeplist.txt}} to also create a list of the installed optional dependencies which can be reinstalled with {{ic|--asdeps}}.<br />
* Use {{ic|pacman -Qqem > foreignpkglist.txt}} to create the list of AUR and other foreign packages that have been explicitly installed.}}<br />
<br />
To keep an up-to-date list of explicitly installed packages (e.g. in combination with a versioned {{ic|/etc/}}), you can set up a [[Pacman#Hooks|hook]]. Example:<br />
<br />
[Trigger]<br />
Operation = Install<br />
Operation = Remove<br />
Type = Package<br />
Target = *<br />
<br />
[Action]<br />
When = PostTransaction<br />
Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /etc/pkglist.txt'<br />
<br />
=== Install packages from a list ===<br />
<br />
To install packages from a previously saved list of packages, while not reinstalling previously installed packages that are already up-to-date, run:<br />
<br />
# pacman -S --needed - < pkglist.txt<br />
<br />
However, it is likely foreign packages such as from the AUR or installed locally are present in the list. To filter out from the list the foreign packages, the previous command line can be enriched as follows:<br />
<br />
# pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))<br />
<br />
Eventually, to make sure the installed packages of your system match the list and remove all the packages that are not mentioned in it:<br />
<br />
# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))<br />
<br />
{{Tip|These tasks can be automated. See {{AUR|bacpac}}, {{AUR|packup}}, {{AUR|pacmanity}}, and {{AUR|pug}} for examples.}}<br />
<br />
=== Listing all changed files from packages ===<br />
<br />
If you are suspecting file corruption (e.g. by software/hardware failure), but are unsure if files were corrupted, you might want to compare with the hash sums in the packages. This can be done with {{Pkg|pacutils}}:<br />
<br />
# paccheck --md5sum --quiet<br />
<br />
For recovery of the database see [[#Restore pacman's local database]]. The {{ic|mtree}} files can also be [[#Viewing a single file inside a .pkg file|extracted as {{ic|.MTREE}} from the respective package files]].<br />
<br />
{{Note|This should '''not''' be used as is when suspecting malicious changes! In this case security precautions such as using a live medium and an independent source for the hash sums are advised.}}<br />
<br />
=== Reinstalling all packages ===<br />
To reinstall all native packages, use:<br />
<br />
# pacman -Qqn | pacman -S -<br />
<br />
Foreign (AUR) packages must be reinstalled separately; you can list them with {{ic|pacman -Qqm}}.<br />
<br />
''Pacman'' preserves the [[installation reason]] by default.<br />
<br />
=== Restore pacman's local database ===<br />
<br />
See [[Pacman/Restore local database]].<br />
<br />
=== Recovering a USB key from existing install ===<br />
<br />
If you have Arch installed on a USB key and manage to mess it up (e.g. removing it while it is still being written to), then it is possible to re-install all the packages and hopefully get it back up and working again (assuming USB key is mounted in {{ic|/newarch}})<br />
<br />
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman<br />
<br />
=== Viewing a single file inside a .pkg file ===<br />
<br />
For example, if you want to see the contents of {{ic|/etc/systemd/logind.conf}} supplied within the {{Pkg|systemd}} package:<br />
<br />
$ tar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf<br />
<br />
Or you can use {{pkg|vim}} to browse the archive:<br />
<br />
$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz<br />
<br />
=== Find applications that use libraries from older packages ===<br />
<br />
Even if you installed a package the existing long-running programs (like daemons and servers) still keep using code from old package libraries. And it is a bad idea to let these programs running if the old library contains a security bug.<br />
<br />
Here is a way how to find all the programs that use old packages code:<br />
<br />
# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u<br />
It will print running program name and old library that was removed or replaced with newer content.<br />
<br />
== Performance ==<br />
<br />
=== Download speeds ===<br />
<br />
{{Note|If your download speeds have been reduced to a crawl, ensure you are using one of the many [[mirrors]] and not ftp.archlinux.org, which is [https://www.archlinux.org/news/302/ throttled since March 2007].}}<br />
<br />
When downloading packages ''pacman'' uses the mirrors in the order they are in {{ic|/etc/pacman.d/mirrorlist}}. The mirror which is at the top of the list by default however may not be the fastest for you. To select a faster mirror, see [[Mirrors]].<br />
<br />
''Pacman''<nowiki>'</nowiki>s speed in downloading packages can also be improved by using a different application to download packages, instead of ''pacman''<nowiki>'</nowiki>s built-in file downloader.<br />
<br />
In all cases, make sure you have the latest ''pacman'' before doing any modifications.<br />
<br />
# pacman -Syu<br />
<br />
==== Powerpill ====<br />
<br />
[[Powerpill]] is a ''pacman'' wrapper that uses parallel and segmented downloading to try to speed up downloads for ''pacman''.<br />
<br />
==== wget ====<br />
<br />
This is also very handy if you need more powerful proxy settings than ''pacman''<nowiki>'</nowiki>s built-in capabilities. <br />
<br />
To use {{ic|wget}}, first [[install]] the {{Pkg|wget}} package then modify {{ic|/etc/pacman.conf}} by uncommenting the following line in the {{ic|[options]}} section:<br />
<br />
XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u<br />
<br />
Instead of uncommenting the {{ic|wget}} parameters in {{ic|/etc/pacman.conf}}, you can also modify the {{ic|wget}} configuration file directly (the system-wide file is {{ic|/etc/wgetrc}}, per user files are {{ic|$HOME/.wgetrc}}.<br />
<br />
==== aria2 ====<br />
<br />
[[aria2]] is a lightweight download utility with support for resumable and segmented HTTP/HTTPS and FTP downloads. aria2 allows for multiple and simultaneous HTTP/HTTPS and FTP connections to an Arch mirror, which should result in an increase in download speeds for both file and package retrieval.<br />
<br />
{{Note|Using aria2c in ''pacman''<nowiki>'</nowiki>s XferCommand will '''not''' result in parallel downloads of multiple packages. ''Pacman'' invokes the XferCommand with a single package at a time and waits for it to complete before invoking the next. To download multiple packages in parallel, see [[Powerpill]].}}<br />
<br />
Install {{Pkg|aria2}}, then edit {{ic|/etc/pacman.conf}} by adding the following line to the {{ic|[options]}} section:<br />
<br />
XferCommand = /usr/bin/aria2c --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 --timeout=5 --dir=/ --out %o %u<br />
<br />
{{Tip|1=[https://bbs.archlinux.org/viewtopic.php?pid=1491879#p1491879 This alternative configuration for using ''pacman'' with aria2] tries to simplify configuration and adds more configuration options.}}<br />
<br />
See [http://aria2.sourceforge.net/manual/en/html/aria2c.html#options OPTIONS] in {{man|1|aria2c}} for used aria2c options.<br />
<br />
* {{ic|-d, --dir}}: The directory to store the downloaded file(s) as specified by ''pacman''.<br />
* {{ic|-o, --out}}: The output file name(s) of the downloaded file(s). <br />
* {{ic|%o}}: Variable which represents the local filename(s) as specified by ''pacman''.<br />
* {{ic|%u}}: Variable which represents the download URL as specified by ''pacman''.<br />
<br />
==== Other applications ====<br />
<br />
There are other downloading applications that you can use with ''pacman''. Here they are, and their associated XferCommand settings:<br />
<br />
* {{ic|snarf}}: {{ic|1=XferCommand = /usr/bin/snarf -N %u}}<br />
* {{ic|lftp}}: {{ic|1=XferCommand = /usr/bin/lftp -c pget %u}}<br />
* {{ic|axel}}: {{ic|1=XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u}}<br />
* {{ic|hget}}: {{ic|1=XferCommand = /usr/bin/hget %u -n 2 -skip-tls false}} (please read the [https://github.com/huydx/hget documentation on the Github project page] for more info)<br />
<br />
== Utilities ==<br />
<br />
* {{App|Lostfiles|Script that identifies files not owned by any package.|https://github.com/graysky2/lostfiles|{{Pkg|lostfiles}}}}<br />
* {{App|Pacmatic|''Pacman'' wrapper to check Arch News before upgrading, avoid partial upgrades, and warn about configuration file changes.|http://kmkeen.com/pacmatic|{{Pkg|pacmatic}}}}<br />
* {{App|pacutils|Helper library for libalpm based programs.|https://github.com/andrewgregory/pacutils|{{Pkg|pacutils}}}}<br />
* {{App|[[pkgfile]]|Tool that finds what package owns a file.|http://github.com/falconindy/pkgfile|{{Pkg|pkgfile}}}}<br />
* {{App|pkgtools|Collection of scripts for Arch Linux packages.|https://github.com/Daenyth/pkgtools|{{AUR|pkgtools}}}}<br />
* {{App|[[Powerpill]]|Uses parallel and segmented downloading through [[aria2]] and [[Reflector]] to try to speed up downloads for ''pacman''.|https://xyne.archlinux.ca/projects/powerpill/|{{AUR|powerpill}}}}<br />
* {{App|repoctl|Tool to help manage local repositories.|https://github.com/cassava/repoctl|{{AUR|repoctl}}}}<br />
* {{App|repose|An Arch Linux repository building tool.|https://github.com/vodik/repose|{{Pkg|repose}}}}<br />
* {{App|[[Snapper#Wrapping_pacman_transactions_in_snapshots|snap-pac]]|Make ''pacman'' automatically use snapper to create pre/post snapshots like openSUSE's YaST.|https://github.com/wesbarnett/snap-pac|{{pkg|snap-pac}}}}<br />
<br />
=== Graphical ===<br />
<br />
{{Warning|PackageKit opens up system permissions by default, and is otherwise not recommended for general usage. See {{Bug|50459}} and {{Bug|57943}}.}}<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! Name !! Written in !! GUI toolkit !! Arch Linux packages via !! Specificity<br />
|-<br />
! {{Pkg|discover}}<br />
| C++/QML<br />
| Qt 5<br />
| {{Pkg|packagekit-qt5}}<br />
| [https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream], [[Flatpak]], [[fwupd]]<br />
|-<br />
! {{Pkg|gnome-software}}<br />
| C<br />
| GTK+ 3<br />
| {{Pkg|gnome-software-packagekit-plugin}}<br />
| [https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream], [[Flatpak]], [[fwupd]]<br />
|-<br />
! {{Pkg|apper}}<br />
| C++<br />
| Qt 5<br />
| {{Pkg|packagekit-qt5}}<br />
| [https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream]<br />
|-<br />
! {{Pkg|gnome-packagekit}}<br />
| C<br />
| GTK+ 3<br />
| {{Pkg|packagekit}}<br />
| {{-}}<br />
|-<br />
! {{Pkg|pcurses}}<br />
| C++<br />
| ncurses<br />
| pacman<br />
| {{-}}<br />
|-<br />
! {{AUR|tkpacman}}<br />
| Tcl<br />
| Tk<br />
| pacman<br />
| {{-}}<br />
|}</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Netboot&diff=542327Netboot2018-09-20T16:41:29Z<p>Scrumplex: Add link to systemd-boot page</p>
<hr />
<div>[[Category:Getting and installing Arch]]<br />
[[ja:Netboot]]<br />
[[lt:Netboot]]<br />
Netboot images are small (<1MB) images that can be used to download the latest Arch Linux release on the fly upon system boot. It is unnecessary to update the netboot image, the newest release will be available automatically. Netboot images can be downloaded from the [https://www.archlinux.org/releng/netboot/ Arch Linux website].<br />
<br />
== BIOS ==<br />
<br />
To use netboot on a BIOS-based computer, you need either the ipxe.lkrn or ipxe.pxe image.<br />
<br />
=== Using ipxe.lkrn ===<br />
<br />
The ipxe.lkrn image can be booted like a Linux kernel. Any Linux bootloader (like Grub or syslinux) can be used to load it from your hard drive, a CD or a USB drive.<br />
<br />
You can try the image with qemu by running the following command:<br />
<br />
qemu-system-x86_64 -enable-kvm -m 1G -kernel ipxe.lkrn<br />
<br />
=== Using ipxe.pxe ===<br />
<br />
The ipxe.pxe image is a PXE image. It can be chainloaded from an existing PXE environment. This allows configuring a DHCP server such that booting from the network will always boot into Arch Linux netboot.<br />
<br />
== UEFI ==<br />
<br />
The ipxe.efi image can be used to launch Arch Linux netboot in UEFI mode. Only 64 Bit UEFI is supported. The ipxe.efi image can be added as a boot option via efibootmgr, chainloaded from a boot manager like [[systemd-boot]] or launched directly from the UEFI shell.<br />
<br />
=== Installation with efibootmgr ===<br />
<br />
First install the {{Pkg|efibootmgr}} package, then download the [https://www.archlinux.org/releng/netboot/ UEFI netboot image].<br />
<br />
Assuming your [[EFI system partition]] (ESP) is mounted under {{ic|''esp''}}, you should move it as follows - let's also give it a more friendly name:<br />
<br />
# mkdir ''esp''/EFI/arch_netboot<br />
# mv ipxe.*.efi ''esp''/EFI/arch_netboot/arch_netboot.efi<br />
<br />
Then you can create a boot entry as follows:<br />
<br />
# efibootmgr --create --disk /dev/sda --part 1 --loader /EFI/arch_netboot/arch_netboot.efi --label "Arch Linux Netboot"</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=NVIDIA/Tips_and_tricks&diff=542164NVIDIA/Tips and tricks2018-09-19T16:37:31Z<p>Scrumplex: Change KDM to SDDM</p>
<hr />
<div>[[Category:Graphics]]<br />
[[Category:X server]]<br />
[[ja:NVIDIA/ヒントとテクニック]]<br />
[[ru:NVIDIA/Tips and tricks]]<br />
== Fixing terminal resolution ==<br />
<br />
Transitioning from nouveau may cause your startup terminal to display at a lower resolution. For GRUB, see [[GRUB/Tips and tricks#Setting the framebuffer resolution]] for details.<br />
<br />
== Using TV-out ==<br />
<br />
A good article on the subject can be found [http://en.wikibooks.org/wiki/NVidia/TV-OUT here].<br />
<br />
== X with a TV (DFP) as the only display ==<br />
<br />
The X server falls back to CRT-0 if no monitor is automatically detected. This can be a problem when using a DVI connected TV as the main display, and X is started while the TV is turned off or otherwise disconnected.<br />
<br />
To force NVIDIA to use DFP, store a copy of the EDID somewhere in the filesystem so that X can parse the file instead of reading EDID from the TV/DFP.<br />
<br />
To acquire the EDID, start nvidia-settings. It will show some information in tree format, ignore the rest of the settings for now and select the GPU (the corresponding entry should be titled "GPU-0" or similar), click the {{ic|DFP}} section (again, {{ic|DFP-0}} or similar), click on the {{ic|Acquire Edid}} Button and store it somewhere, for example, {{ic|/etc/X11/dfp0.edid}}.<br />
<br />
If in the front-end mouse and keyboard are not attached, the EDID can be acquired using only the command line. Run an X server with enough verbosity to print out the EDID block:<br />
$ startx -- -logverbose 6<br />
After the X Server has finished initializing, close it and your log file will probably be in {{ic|/var/log/Xorg.0.log}}. Extract the EDID block using nvidia-xconfig:<br />
$ nvidia-xconfig --extract-edids-from-file=/var/log/Xorg.0.log --extract-edids-output-file=/etc/X11/dfp0.bin<br />
<br />
Edit {{ic|xorg.conf}} by adding to the {{ic|Device}} section:<br />
Option "ConnectedMonitor" "DFP"<br />
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.edid"<br />
The {{ic|ConnectedMonitor}} option forces the driver to recognize the DFP as if it were connected. The {{ic|CustomEDID}} provides EDID data for the device, meaning that it will start up just as if the TV/DFP was connected during X the process.<br />
<br />
This way, one can automatically start a display manager at boot time and still have a working and properly configured X screen by the time the TV gets powered on.<br />
<br />
If the above changes did not work, in the {{ic|xorg.conf}} under {{ic|Device}} section you can try to remove the {{ic|Option "ConnectedMonitor" "DFP"}} and add the following lines:<br />
Option "ModeValidation" "NoDFPNativeResolutionCheck"<br />
Option "ConnectedMonitor" "DFP-0"<br />
<br />
The {{ic|NoDFPNativeResolutionCheck}} prevents NVIDIA driver from disabling all the modes that do not fit in the native resolution.<br />
<br />
== Check the power source ==<br />
<br />
The NVIDIA X.org driver can also be used to detect the GPU's current source of power. To see the current power source, check the 'GPUPowerSource' read-only parameter (0 - AC, 1 - battery):<br />
<br />
{{hc|$ nvidia-settings -q GPUPowerSource -t|1}}<br />
<br />
== Listening to ACPI events ==<br />
<br />
NVIDIA drivers automatically try to connect to the [[acpid]] daemon and listen to ACPI events such as battery power, docking, some hotkeys, etc. If connection fails, X.org will output the following warning:<br />
<br />
{{hc|~/.local/share/xorg/Xorg.0.log|<br />
NVIDIA(0): ACPI: failed to connect to the ACPI event daemon; the daemon<br />
NVIDIA(0): may not be running or the "AcpidSocketPath" X<br />
NVIDIA(0): configuration option may not be set correctly. When the<br />
NVIDIA(0): ACPI event daemon is available, the NVIDIA X driver will<br />
NVIDIA(0): try to use it to receive ACPI event notifications. For<br />
NVIDIA(0): details, please see the "ConnectToAcpid" and<br />
NVIDIA(0): "AcpidSocketPath" X configuration options in Appendix B: X<br />
NVIDIA(0): Config Options in the README.<br />
}}<br />
<br />
While completely harmless, you may get rid of this message by disabling the {{ic|ConnectToAcpid}} option in your {{ic|/etc/X11/xorg.conf.d/20-nvidia.conf}}:<br />
<br />
Section "Device"<br />
...<br />
Driver "nvidia"<br />
Option "ConnectToAcpid" "0"<br />
...<br />
EndSection<br />
<br />
If you are on laptop, it might be a good idea to install and enable the [[acpid]] daemon instead.<br />
<br />
== Displaying GPU temperature in the shell ==<br />
<br />
There are three methods to query the GPU temperature. ''nvidia-settings'' requires that you are using X, ''nvidia-smi'' or ''nvclock'' do not. Also note that ''nvclock'' currently does not work with newer NVIDIA cards such as GeForce 200 series cards as well as embedded GPUs such as the Zotac IONITX's 8800GS.<br />
<br />
=== nvidia-settings ===<br />
<br />
To display the GPU temp in the shell, use ''nvidia-settings'' as follows:<br />
$ nvidia-settings -q gpucoretemp<br />
<br />
This will output something similar to the following:<br />
Attribute 'GPUCoreTemp' (hostname:0.0): 41.<br />
'GPUCoreTemp' is an integer attribute.<br />
'GPUCoreTemp' is a read-only attribute.<br />
'GPUCoreTemp' can use the following target types: X Screen, GPU.<br />
<br />
The GPU temps of this board is 41 C.<br />
<br />
In order to get just the temperature for use in utilities such as ''rrdtool'' or ''conky'':<br />
<br />
{{hc|$ nvidia-settings -q gpucoretemp -t|41}}<br />
<br />
=== nvidia-smi ===<br />
<br />
Use ''nvidia-smi'' which can read temps directly from the GPU without the need to use X at all, e.g. when running Wayland or on a headless server. <br />
To display the GPU temperature in the shell, use ''nvidia-smi'' as follows:<br />
<br />
$ nvidia-smi<br />
<br />
This should output something similar to the following:<br />
<br />
{{hc|$ nvidia-smi|<nowiki><br />
Fri Jan 6 18:53:54 2012 <br />
+------------------------------------------------------+ <br />
| NVIDIA-SMI 2.290.10 Driver Version: 290.10 | <br />
|-------------------------------+----------------------+----------------------+<br />
| Nb. Name | Bus Id Disp. | Volatile ECC SB / DB |<br />
| Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. |<br />
|===============================+======================+======================|<br />
| 0. GeForce 8500 GT | 0000:01:00.0 N/A | N/A N/A |<br />
| 30% 62 C N/A N/A / N/A | 17% 42MB / 255MB | N/A Default |<br />
|-------------------------------+----------------------+----------------------|<br />
| Compute processes: GPU Memory |<br />
| GPU PID Process name Usage |<br />
|=============================================================================|<br />
| 0. ERROR: Not Supported |<br />
+-----------------------------------------------------------------------------+<br />
</nowiki>}}<br />
<br />
Only for temperature:<br />
<br />
{{hc|$ nvidia-smi -q -d TEMPERATURE|<nowiki><br />
<br />
====NVSMI LOG====<br />
<br />
Timestamp : Sun Apr 12 08:49:10 2015<br />
Driver Version : 346.59<br />
<br />
Attached GPUs : 1<br />
GPU 0000:01:00.0<br />
Temperature<br />
GPU Current Temp : 52 C<br />
GPU Shutdown Temp : N/A<br />
GPU Slowdown Temp : N/A<br />
<br />
</nowiki>}}<br />
<br />
In order to get just the temperature for use in utilities such as ''rrdtool'' or ''conky'':<br />
<br />
{{hc|<nowiki>$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits</nowiki>|52}}<br />
<br />
Reference: http://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli.<br />
<br />
=== nvclock ===<br />
<br />
Use {{AUR|nvclock}} which is available from the [[AUR]].<br />
<br />
{{Note|''nvclock'' cannot access thermal sensors on newer NVIDIA cards such as Geforce 200 series cards.}}<br />
<br />
There can be significant differences between the temperatures reported by ''nvclock'' and ''nvidia-settings''/''nv-control''. According to [http://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 this post] by the author (thunderbird) of ''nvclock'', the ''nvclock'' values should be more accurate.<br />
<br />
== Set fan speed at login ==<br />
<br />
{{Style|Refer to [[#Enabling overclocking]] for description of ''Coolbits''.}}<br />
<br />
You can adjust the fan speed on your graphics card with ''nvidia-settings''' console interface. First ensure that your Xorg configuration sets the Coolbits option to {{ic|4}}, {{ic|5}} or {{ic|12}} for fermi and above in your {{ic|Device}} section to enable fan control.<br />
<br />
Option "Coolbits" "4"<br />
<br />
{{Note|GeForce 400/500 series cards cannot currently set fan speeds at login using this method. This method only allows for the setting of fan speeds within the current X session by way of nvidia-settings.}}<br />
<br />
Place the following line in your [[xinitrc]] file to adjust the fan when you launch Xorg. Replace {{ic|''n''}} with the fan speed percentage you want to set.<br />
<br />
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''"<br />
<br />
You can also configure a second GPU by incrementing the GPU and fan number.<br />
<br />
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" \<br />
-a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUCurrentFanSpeed=''n''" &<br />
<br />
If you use a login manager such as [[GDM]] or [[SDDM]], you can create a desktop entry file to process this setting. Create {{ic|~/.config/autostart/nvidia-fan-speed.desktop}} and place this text inside it. Again, change {{ic|''n''}} to the speed percentage you want.<br />
<br />
[Desktop Entry]<br />
Type=Application<br />
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''"<br />
X-GNOME-Autostart-enabled=true<br />
Name=nvidia-fan-speed<br />
<br />
{{Note|Since the drivers version 349.16, {{ic|GPUCurrentFanSpeed}} has to be replaced with {{ic|GPUTargetFanSpeed}}.[https://devtalk.nvidia.com/default/topic/821563/linux/can-t-control-fan-speed-with-beta-driver-349-12/post/4526208/#4526208]}}<br />
<br />
To make it possible to adjust the fanspeed of more than one graphics card, run:<br />
$ nvidia-xconfig --enable-all-gpus<br />
$ nvidia-xconfig --cool-bits=4<br />
<br />
== Manual configuration ==<br />
<br />
Several tweaks (which cannot be enabled [[NVIDIA#Automatic configuration|automatically]] or with the [[NVIDIA#NVIDIA Settings|GUI]]) can be performed by editing your [[NVIDIA#Minimal configuration|config]] file. The Xorg server will need to be restarted before any changes are applied.<br />
<br />
See [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/README.txt NVIDIA Accelerated Linux Graphics Driver README and Installation Guide] for additional details and options.<br />
<br />
=== Disabling the logo on startup ===<br />
<br />
Add the {{ic|"NoLogo"}} option under section {{ic|Device}}:<br />
Option "NoLogo" "1"<br />
<br />
=== Overriding monitor detection ===<br />
<br />
The {{ic|"ConnectedMonitor"}} option under section {{ic|Device}} allows to override monitor detection when X server starts, which may save a significant amount of time at start up. The available options are: {{ic|"CRT"}} for analog connections, {{ic|"DFP"}} for digital monitors and {{ic|"TV"}} for televisions.<br />
<br />
The following statement forces the NVIDIA driver to bypass startup checks and recognize the monitor as DFP:<br />
Option "ConnectedMonitor" "DFP"<br />
{{Note| Use "CRT" for all analog 15 pin VGA connections, even if the display is a flat panel. "DFP" is intended for DVI, HDMI, or DisplayPort digital connections only.}}<br />
<br />
=== Enabling brightness control ===<br />
<br />
Add under section {{ic|Device}}:<br />
Option "RegistryDwords" "EnableBrightnessControl=1"<br />
<br />
If brightness control still does not work with this option, try installing {{AUR|nvidia-bl}} or {{AUR|nvidiabl}}.<br />
<br />
{{Note|Installing either {{AUR|nvidia-bl}} or {{AUR|nvidiabl}} will provide a {{ic|/sys/class/backlight/nvidia_backlight/}} interface to backlight brightness control, but your system may continue to issue backlight control changes on {{ic|/sys/class/backlight/acpi_video0/}}. One solution in this case is to watch for changes on, e.g. {{ic|acpi_video0/brightness}} with ''inotifywait'' and to translate and write to {{ic|nvidia_backlight/brightness}} accordingly. See [[Backlight#sysfs modified but no brightness change]].}}<br />
<br />
=== Enabling SLI ===<br />
<br />
{{Warning|As of May 7, 2011, you may experience sluggish video performance in GNOME 3 after enabling SLI.}}<br />
{{Warning|Since the GTX 10xx Series (1080, 1070, 1060, etc) only 2-way SLI is supported. 3-way and 4-way SLI may work for CUDA/OpenCL applications, but will most likely break all OpenGL applications.}}<br />
<br />
Taken from the NVIDIA driver's [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html README] Appendix B: ''This option controls the configuration of SLI rendering in supported configurations.'' A "supported configuration" is a computer equipped with an SLI-Certified Motherboard and 2 or 3 SLI-Certified GeForce GPUs. See NVIDIA's [http://www.slizone.com/page/home.html SLI Zone] for more information.<br />
<br />
Find the first GPU's PCI Bus ID using {{ic|lspci}}:<br />
{{hc|<nowiki>$ lspci | grep VGA</nowiki>|<br />
03:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)<br />
05:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)<br />
}}<br />
<br />
Add the BusID (3 in the previous example) under section {{ic|Device}}:<br />
BusID "PCI:3:0:0"<br />
<br />
{{Note|The format is important. The BusID value must be specified as {{ic|"PCI:<BusID>:0:0"}}}}<br />
<br />
Add the desired SLI rendering mode value under section {{ic|Screen}}:<br />
Option "SLI" "AA"<br />
<br />
The following table presents the available rendering modes.<br />
<br />
{| class="wikitable"<br />
! Value !! Behavior<br />
|-<br />
| 0, no, off, false, Single || Use only a single GPU when rendering.<br />
|-<br />
| 1, yes, on, true, Auto || Enable SLI and allow the driver to automatically select the appropriate rendering mode.<br />
|-<br />
| AFR || Enable SLI and use the alternate frame rendering mode.<br />
|-<br />
| SFR || Enable SLI and use the split frame rendering mode.<br />
|-<br />
| AA || Enable SLI and use SLI antialiasing. Use this in conjunction with full scene antialiasing to improve visual quality.<br />
|}<br />
<br />
Alternatively, you can use the {{ic|nvidia-xconfig}} utility to insert these changes into {{ic|xorg.conf}} with a single command:<br />
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA<br />
<br />
To verify that SLI mode is enabled from a shell:<br />
{{hc|<nowiki>$ nvidia-settings -q all | grep SLIMode</nowiki>|<br />
Attribute 'SLIMode' (arch:0.0): AA <br />
'SLIMode' is a string attribute.<br />
'SLIMode' is a read-only attribute.<br />
'SLIMode' can use the following target types: X Screen.<br />
}}<br />
<br />
{{Warning| After enabling SLI, your system may become frozen/non-responsive upon starting xorg. It is advisable that you disable your display manager before restarting.}}<br />
<br />
{{Tip|If this configuration does not work, you may need to use the PCI Bus ID provided by {{ic|nvidia-settings}},<br />
{{hc|<nowiki>$ nvidia-settings -q all | grep -i pcibus</nowiki>|<br />
Attribute 'PCIBus' (host:0[gpu:0]): 101.<br />
'PCIBus' is an integer attribute.<br />
'PCIBus' is a read-only attribute.<br />
'PCIBus' can use the following target types: GPU, SDI Input Device.<br />
Attribute 'PCIBus' (host:0[gpu:1]): 23.<br />
'PCIBus' is an integer attribute.<br />
'PCIBus' is a read-only attribute.<br />
'PCIBus' can use the following target types: GPU, SDI Input Device.}}<br />
<br />
and comment out the PrimaryGPU option in your xorg.d configuration,<br />
{{hc|/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf|<br />
...<br />
<br />
Section "OutputClass"<br />
...<br />
# Option "PrimaryGPU" "yes"<br />
...}}<br />
Using this configuration may also solve any graphical boot issues.<br />
}}<br />
<br />
=== Enabling overclocking ===<br />
<br />
{{Warning|Please note that overclocking may damage hardware and that no responsibility may be placed on the authors of this page due to any damage to any information technology equipment from operating products out of specifications set by the manufacturer.}}<br />
<br />
Overclocking is controlled via ''Coolbits'' option in the {{ic|Device}} section, which enables various unsupported features:<br />
Option "Coolbits" "''value''"<br />
<br />
{{Tip|The ''Coolbits'' option can be easily controlled with the ''nvidia-xconfig'', which manipulates the Xorg configuration files: {{bc|1=# nvidia-xconfig --cool-bits=''value''}}}}<br />
<br />
The ''Coolbits'' value is the sum of its component bits in the binary numeral system. The component bits are:<br />
<br />
* {{ic|1}} (bit 0) - Enables overclocking of older (pre-Fermi) cores on the ''Clock Frequencies'' page in ''nvidia-settings''.<br />
* {{ic|2}} (bit 1) - When this bit is set, the driver will "attempt to initialize SLI when using GPUs with different amounts of video memory".<br />
* {{ic|4}} (bit 2) - Enables manual configuration of GPU fan speed on the ''Thermal Monitor'' page in ''nvidia-settings''.<br />
* {{ic|8}} (bit 3) - Enables overclocking on the ''PowerMizer'' page in ''nvidia-settings''. Available since version 337.12 for the Fermi architecture and newer.[http://www.phoronix.com/scan.php?px=MTY1OTM&page=news_item]<br />
* {{ic|16}} (bit 4) - Enables overvoltage using ''nvidia-settings'' CLI options. Available since version 346.16 for the Fermi architecture and newer.[http://www.phoronix.com/scan.php?page=news_item&px=MTg0MDI]<br />
<br />
To enable multiple features, add the ''Coolbits'' values together. For example, to enable overclocking and overvoltage of Fermi cores, set {{ic|Option "Coolbits" "24"}}.<br />
<br />
The documentation of ''Coolbits'' can be found in {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}}. Driver version 346.16 documentation on ''Coolbits'' can be found online [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html here].<br />
<br />
{{Note|An alternative is to edit and reflash the GPU BIOS either under DOS (preferred), or within a Win32 environment by way of [http://www.mvktech.net/component/option,com_remository/Itemid,26/func,select/id,127/orderby,2/page,1/ nvflash]{{Dead link|2013|05|25}} and [http://www.mvktech.net/component/option,com_remository/Itemid,26/func,select/id,135/orderby,2/page,1/ NiBiTor 6.0]{{Dead link|2013|05|25}}. The advantage of BIOS flashing is that not only can voltage limits be raised, but stability is generally improved over software overclocking methods such as Coolbits. [http://ivanvojtko.blogspot.sk/2014/03/how-to-overclock-geforce-460gtx-fermi.html Fermi BIOS modification tutorial]}}<br />
<br />
==== Setting static 2D/3D clocks ====<br />
<br />
Set the following string in the {{ic|Device}} section to enable PowerMizer at its maximum performance level (VSync will not work without this line):<br />
Option "RegistryDwords" "PerfLevelSrc=0x2222"<br />
<br />
==== Allow change to highest Performance Mode====<br />
<br />
{{Accuracy|This section refers to the limits for [https://en.wikipedia.org/wiki/Kepler_(microarchitecture)#GPU_Boost GPU boost], which is unrelated to overclocking discussed above. The {{ic|nvidia-smi(1)}} man page says that it is "For Tesla devices from the Kepler+ family and Maxwell-based GeForce Titan." And as far as [[User:Lahwaacz|Lahwaacz]] is aware, the only GPU which supports this and does not have the default clocks equal to the maximum, is Tesla K40 [https://www.nvidia.com/content/PDF/kepler/nvidia-gpu-boost-tesla-k40-06767-001-v02.pdf]. Since the Pascal architecture, [http://www.anandtech.com/show/10325/the-nvidia-geforce-gtx-1080-and-1070-founders-edition-review/15 Boost 3.0] handles automatic clocking even differently.}}<br />
<br />
Since changing Performance Mode and Overclocking Memory Rate has little to no effect in nvidia-settings, try this:<br />
<br />
- Setting Coolbits to 24 or 28 and remove Powermizer RegistryDwords -> Restart X<br />
- find out max. Clock and Memory rate. (this can be LOWER than what your gfx card reports after booting!):<br />
nvidia-smi -q -d SUPPORTED_CLOCKS<br />
<br />
- set rates for GPU 0:<br />
sudo nvidia-smi -i 0 -ac memratemax,clockratemax<br />
<br />
After setting the rates the max. Performance Mode works in nvidia-settings and you can overclock graphics-clock and Memory Transfer Rate.</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=KDE&diff=537853KDE2018-08-26T19:46:09Z<p>Scrumplex: Update section about Qt4 theming as breeze-kde4 has been removed.</p>
<hr />
<div>[[Category:KDE]]<br />
[[ar:KDE]]<br />
[[cs:KDE]]<br />
[[de:Plasma]]<br />
[[es:KDE]]<br />
[[fa:KDE]]<br />
[[fr:KDE]]<br />
[[it:KDE]]<br />
[[ja:KDE]]<br />
[[pl:KDE]]<br />
[[ru:KDE]]<br />
[[zh-hans:KDE]]<br />
[[zh-hant:KDE]]<br />
{{Related articles start}}<br />
{{Related|Desktop environment}}<br />
{{Related|Display manager}}<br />
{{Related|Window manager}}<br />
{{Related|Qt}}<br />
{{Related|SDDM}}<br />
{{Related|Dolphin}}<br />
{{Related|KDE Wallet}}<br />
{{Related|KDevelop}}<br />
{{Related|Trinity}}<br />
{{Related|Uniform Look for Qt and GTK Applications}}<br />
{{Related articles end}}<br />
<br />
KDE is a software project currently comprising of a [[desktop environment]] known as Plasma, a collection of libraries and frameworks (KDE Frameworks) and several applications (KDE Applications) as well. KDE upstream has a well maintained [https://userbase.kde.org/ UserBase wiki]. Detailed information about most KDE applications can be found there.<br />
<br />
== Installation ==<br />
<br />
=== Plasma ===<br />
<br />
Before installing Plasma, make sure you have a working [[Xorg]] installation on your system.<br />
<br />
[[Install]] the {{Pkg|plasma-meta}} meta-package or the {{Grp|plasma}} group. For differences between {{Pkg|plasma-meta}} and {{Grp|plasma}} reference [[Creating packages#Meta packages and groups]]. Alternatively, for a more minimal Plasma installation, install the {{Pkg|plasma-desktop}} package.<br />
<br />
To enable support for [[Wayland]] in Plasma, also install the {{Pkg|plasma-wayland-session}} package.<br />
<br />
=== KDE applications ===<br />
<br />
To install the full set of KDE Applications, install the {{Grp|kde-applications}} group or the {{Pkg|kde-applications-meta}} meta-package. Note that this will only install applications, it will not install any version of Plasma.<br />
<br />
=== Unstable releases ===<br />
<br />
See [[Official repositories#kde-unstable]]<br />
<br />
== Starting Plasma ==<br />
{{Note|Although it is possible to launch Plasma under [[Wayland]], there are some missing features and known problems as of Plasma 5.13. See the [https://community.kde.org/Plasma/5.13_Errata#Wayland Plasma 5.13 Errata] for a list of issues and the [https://phabricator.kde.org/project/board/99/ Plasma on Wayland workboard] for the current state of development. Use [[Xorg]] for the most complete and stable experience.}}<br />
<br />
Plasma can be started either using a [[display manager]], or from the console.<br />
<br />
=== Using a display manager ===<br />
<br />
* Select ''Plasma'' to launch a new session in [[Xorg]].<br />
* [[Install]] {{Pkg|plasma-wayland-session}} and select ''Plasma (Wayland)'' to launch a new session in [[Wayland]].<br />
<br />
{{Note|The [[NVIDIA]] proprietary driver implementation for Wayland requires EGLStreams. KDE have not implemented EGLStreams in their Wayland [https://blog.martin-graesslin.com/blog/2016/09/to-eglstream-or-not implementation]. The following workarounds are available:<br />
*Using the [[Nouveau]] driver.<br />
*Using the (default) Xorg session.<br />
}}<br />
<br />
=== From the console ===<br />
<br />
To start Plasma with [[xinit|xinit/startx]], append {{ic|exec startkde}} to your {{ic|.xinitrc}} file. If you want to start Xorg at login, please see [[Start X at login]]. To start a Plasma on Wayland session from a console, run {{ic|1=export XDG_SESSION_TYPE=wayland && export $(dbus-launch) && startplasmacompositor}}.[https://community.kde.org/KWin/Wayland#Start_a_Plasma_session_on_Wayland]<br />
<br />
== Configuration ==<br />
<br />
Most settings for KDE applications are stored in {{ic|~/.config}}. However, configuring KDE is primarily done through the '''System Settings''' application. It can be started from a terminal by executing {{ic|systemsettings5}}.<br />
<br />
=== Personalization ===<br />
<br />
==== Plasma desktop ====<br />
<br />
===== Themes =====<br />
<br />
[https://store.kde.org/browse/cat/104/ Plasma themes] define the look of panels and plasmoids. For easy system-wide installation, some themes are available in both the official repositories and the [https://aur.archlinux.org/packages.php?K=plasma+theme AUR].<br />
<br />
Plasma themes can also be installed through ''System Settings > Workspace Theme > Desktop Theme > Get new Themes''.<br />
<br />
The [https://store.kde.org/ KDE-Store] offers more Plasma customization's, like [[SDDM]] themes and splash-screens.<br />
<br />
====== Qt and GTK+ Applications Appearance ======<br />
<br />
{{Tip|For Qt and GTK theme consistency, see [[Uniform look for Qt and GTK applications]].}}<br />
<br />
; Qt4<br />
Breeze is not directly available for Qt4 since it can't be built without KDE 4 packages, which have been dropped from the extra repository in August 2018 [https://bugs.archlinux.org/task/59784].<br />
However you can install {{Pkg|breeze-gtk}} and pick GTK+ as GUI Style by running {{ic|qtconfig-qt4}}.<br />
<br />
; GTK+<br />
<br />
The recommended theme for a pleasant appearance in GTK+ applications is {{Pkg|breeze-gtk}} or {{AUR|gnome-breeze-git}}, a GTK+ theme designed to mimic the appearance of Plasma's Breeze theme.<br />
Install {{Pkg|kde-gtk-config}} (part of the {{grp|plasma}} group) and select the installed GTK-theme for GTK2/GTK3-Theme in ''System Settings > Application Style > GNOME Application Style''.<br />
<br />
In some themes, tooltips in GTK+ applications have white text on white backgrounds making it difficult to read. To change the colors in GTK2 applications, find the section for tooltips in the {{ic|.gtkrc-2.0}} file and change it. For GTK3 application two files need to be changed, {{ic|gtk.css}} and {{ic|settings.ini}}.<br />
It might also help to uncheck the option to ''Apply colors to non-Qt applications'' under ''System Settings'' > ''Colors''.<br />
<br />
Some GTK2 programs like {{AUR|vuescan-bin}} still look hardly usable due to invisible checkboxes with the Breeze or Adwaita skin in a Plasma session. To workaround this, install and select e.g. the Numix-Frost-Light skin of the {{AUR|numix-frost-themes}} under ''System Settings'' > ''Application Style'' > ''GNOME Application Style (GTK)'' > ''Select a GTK2 Theme:''. Numix-Frost-Light looks similar to Breeze.<br />
<br />
===== Widgets =====<br />
<br />
Plasmoids are little scripted (plasmoid scripts) or coded (plasmoid binaries) KDE applications designed to enhance the functionality of your desktop.<br />
<br />
The easiest way to install plasmoid scripts is by right-clicking onto a panel or the desktop and choosing ''Add Widgets > Get new widgets > Download New Plasma Widgets''. This will present a nice frontend for https://store.kde.org/ that allows you to install, uninstall, or update third-party plasmoid scripts with literally just one click.<br />
<br />
Many Plasmoid binaries are available from the [https://aur.archlinux.org/packages.php?K=plasmoid AUR].<br />
<br />
===== Sound applet in the system tray =====<br />
<br />
[[Install]] {{Pkg|plasma-pa}} or {{Pkg|kmix}} (start Kmix from the Application Launcher). {{Pkg|plasma-pa}} is now installed by default with {{Grp|plasma}}, no further configuration needed.<br />
<br />
{{Note|1=To adjust the [https://bugs.kde.org/show_bug.cgi?id=313579#c28 step size of volume increments/decrements], add e.g. {{ic|1=VolumePercentageStep=1}} in the {{ic|[Global]}} section of {{ic|~/.config/kmixrc}}.}}<br />
<br />
===== Disable panel shadow =====<br />
<br />
As the Plasma panel is on top of other windows, its shadow is drawn over them. [https://bbs.archlinux.org/viewtopic.php?pid=1228394#p1228394] To disable this behaviour without impacting other shadows, [[install]] {{Pkg|xorg-xprop}} and run:<br />
<br />
$ xprop -remove _KDE_NET_WM_SHADOW<br />
<br />
then select the panel with the plus-sized cursor. [https://forum.kde.org/viewtopic.php?f=285&t=121592] For automation, install {{Pkg|xorg-xwininfo}} and create the following script:<br />
<br />
{{hc|/usr/local/bin/kde-no-shadow|<nowiki><br />
#!/bin/bash<br />
for WID in $(xwininfo -root -tree | sed '/"Plasma": ("plasmashell" "plasmashell")/!d; s/^ *\([^ ]*\) .*/\1/g'); do<br />
xprop -id $WID -remove _KDE_NET_WM_SHADOW<br />
done<br />
</nowiki>}}<br />
<br />
Set execution permissions for the script:<br />
<br />
# chmod 755 /usr/local/bin/kde-no-shadow<br />
<br />
The script can be run on login with ''Add Script'' in ''Autostart'':<br />
<br />
$ kcmshell5 autostart<br />
<br />
==== Window decorations ====<br />
<br />
[https://store.kde.org/browse/cat/114/ Window decorations] can be changed in ''System Settings > Application Style > Window Decorations''.<br />
<br />
There you can also directly download and install more themes with one click, and some are available in the [https://aur.archlinux.org/packages.php?K=kde+window+decoration AUR].<br />
<br />
==== Icon themes ====<br />
<br />
Icon themes can be installed and changed on ''System Settings > Icons''.<br />
<br />
{{Note|Although all modern Linux desktops share the same icon theme format, desktops like [[GNOME]] use fewer icons (esp. in menus and toolbars). Themes developed for such desktops usually lack icons required by Plasma and KDE apps. It is recommended to install Plasma compatible icon themes instead.}}<br />
<br />
{{Tip|Since some icon themes do not inherit from the default icon theme, some icons may be missing. <br />
To inherit from the Breeze, add {{ic|breeze}} to the {{ic|1=Inherits=}} array in {{ic|/usr/share/icon/''theme-name''/index.theme}}, for example: {{ic|1=Inherits=breeze,hicolor}}. You need to reapply this patch after every update to the icon theme, consider using [[Pacman hooks]] to automate the process.}}<br />
<br />
==== Space efficiency ====<br />
<br />
The Plasma Netbook shell has been dropped from Plasma 5, see the following [https://forum.kde.org/viewtopic.php?f=289&t=126631&p=335947&hilit=plasma+netbook#p335899 KDE forum post]<br />
However, you can achieve something similar by editing the file {{ic|~/.config/kwinrc}} adding <br />
{{ic|1=BorderlessMaximizedWindows=true}} in the {{ic|[Windows]}} section.<br />
<br />
==== Thumbnail generation ====<br />
To allow thumbnail generation for media or document files on the desktop and in Dolphin, install {{Pkg|kdegraphics-thumbnailers}}, {{Pkg|ffmpegthumbs}} and {{AUR|kde-thumbnailer-odf}}.<br />
<br />
Then enable the thumbnail categories for the desktop via ''right click'' on the ''desktop background'' > ''Configure Desktop'' > ''Icons'' > ''More Preview Options...''.<br />
<br />
In ''Dolphin'', navigate to ''Control'' > ''General'' > ''Previews''.<br />
<br />
=== Printing ===<br />
<br />
{{Tip|Use the [[CUPS]] web interface for faster configuration. Printers configured in this way can be used in KDE applications. }}<br />
<br />
You can also configure printers in ''System Settings > Printers''. To use this method, you must first install {{Pkg|print-manager}} and {{Pkg|cups}}. See [[CUPS#Configuration]].<br />
<br />
=== Samba/Windows support ===<br />
<br />
If you want to have access to Windows services, install [[Samba]] (package {{Pkg|samba}}).<br />
<br />
The Dolphin share functionality requires the package {{Pkg|kdenetwork-filesharing}} and usershares, which the stock {{ic|smb.conf}} does not have enabled. Instructions to add them are in [[Samba#Enable usershares]], after which sharing in Dolphin should work out of the box after restarting Samba.<br />
<br />
{{Tip|Use {{ic|*}} (asterisk) for both username and password when accessing a Windows share without authentification in Dolphin's prompt.}}<br />
<br />
Unlike GTK file browsers which utilize GVfs also for the launched program, opening files from Samba shares in Dolphin via KIO makes Plasma copy the whole file to the local system first with most programs (VLC is an exception).<br />
To workaround this, you can use a GTK based file browser like {{Pkg|thunar}} with {{Pkg|gvfs}} and {{Pkg|gvfs-smb}} (and {{Pkg|gnome-keyring}} for saving login credentials) to access SMB shares in a more able way.<br />
<br />
Another possibility is to [[mount]] a Samba share via {{Pkg|cifs-utils}} to make it look to Plasma like if the SMB share was just a normal local folder and thus can be accessed normally.<br />
See [[Samba#Manual mounting]] and [[Samba#Automatic mounting]].<br />
<br />
An GUI solution is available with {{AUR|samba-mounter-git}}, which offers basically the same functionality via an easy to use option located at ''System Settings'' > ''Network Drivers''. However, it might break with new KDE Plasma versions.<br />
<br />
=== KDE Desktop activities ===<br />
<br />
[https://userbase.kde.org/Plasma#Activities KDE Desktop Activities] are special workspaces where you can select specific settings for each activity that apply only when you are using said activity.<br />
<br />
=== Power saving ===<br />
<br />
[[Install]] {{Pkg|powerdevil}} for an integrated power saving service called "'''Powerdevil Power Management'''", that may adjust the power saving profile of the system and/or the brightness of the screen (if supported).<br />
<br />
{{Accuracy|Regarding the note below, it might be that the problem is the logind setting ''LidSwitchIgnoreInhibited'' which defaults to ''yes''. [https://bbs.archlinux.org/viewtopic.php?pid&#61;1649022#p1649022]}}<br />
<br />
{{Note|Powerdevil may not [[Power management#Power managers|inhibit]] all logind settings (such as the lid close action for laptops). In these cases, the logind setting itself will need to be changed - see [[Power management#Power management with systemd]].}}<br />
<br />
=== Autostart ===<br />
<br />
Plasma can autostart applications and run scripts on startup and shutdown. To autostart an application, navigate to ''System Settings > Startup and Shutdown > Autostart'' and add the program or shell script of your choice. For applications, a ''.desktop'' file will be created, for shell scripts, a symlink will be created.<br />
<br />
{{Note|<br />
* Programs can be autostarted on login only, whilst shell scripts can also be run on shutdown or even before Plasma itself starts.<br />
* Shell scripts will only be run if they are marked [[executable]].<br />
}}<br />
<br />
* Place [[Desktop entries]] (i.e. ''.desktop'' files) in the appropriate [[XDG Autostart]] directory.<br />
<br />
* Place or symlink shell scripts in one of the following directories:<br />
<br />
:; {{ic|~/.config/plasma-workspace/env/}}: for executing scripts at login before launching Plasma.<br />
:; {{ic|~/.config/autostart-scripts/}}: for executing scripts at login.<br />
:; {{ic|~/.config/plasma-workspace/shutdown/}}: for executing scripts on shutdown.<br />
<br />
=== Phonon ===<br />
<br />
From [[Wikipedia:Phonon (software)|Wikipedia]]:<br />
<br />
:Phonon is the multimedia API provided by KDE and is the standard abstraction for handling multimedia streams within KDE software and also used by several Qt applications.<br />
<br />
:Phonon was originally created to allow KDE and Qt software to be independent of any single multimedia framework such as GStreamer or xine and to provide a stable API for a major version's lifetime.<br />
<br />
Phonon is being widely used within KDE, for both audio (e.g., the System notifications or KDE audio apps) and video (e.g., the [[Dolphin]] video thumbnails).<br />
<br />
==== Which backend should I choose? ====<br />
<br />
You can choose between backends based on [[GStreamer]] and [[VLC]] – each available in versions for Qt4 applications and Qt5 applications ({{Pkg|phonon-qt4-gstreamer}}, {{Pkg|phonon-qt5-gstreamer}} – {{Pkg|phonon-qt4-vlc}}, {{Pkg|phonon-qt5-vlc}}).<br />
<br />
[https://www.phoronix.com/scan.php?page=news_item&px=MTUwNDM Upstream prefers VLC] but prominent Linux distributions (Kubuntu and Fedora-KDE for example) prefer GStreamer because that allows them to easily leave out patented MPEG codecs from the default installation. Both backends have a slightly different [https://community.kde.org/Phonon/FeatureMatrix features set]. The Gstreamer backend has some optional codec dependency, install them as needed:<br />
* {{Pkg|gst-libav}} — Libav codecs.<br />
* {{Pkg|gst-plugins-good}} — PulseAudio support and additional codecs.<br />
* {{Pkg|gst-plugins-ugly}} — additional codecs.<br />
* {{Pkg|gst-plugins-bad}} — additional codecs.<br />
<br />
In the past other backends were developed as well but are no longer maintained and their AUR packages have been deleted.<br />
<br />
{{Note|1=<br><br />
* Multiple backends can be installed at once and prioritized at ''System Settings > Multimedia > Audio and Video > Backend''.<br />
* According to the [https://forum.kde.org/viewtopic.php?f=250&t=126476&p=335080 KDE forums], the VLC backend lacks support for [[wikipedia:ReplayGain|ReplayGain]].<br />
* If using the VLC backend, you may experience crashes every time Plasma wants to send you an audible warning and in quite a number of other cases as well [https://forum.kde.org/viewtopic.php?f=289&t=135956]. A possible fix is to rebuild the VLC plugins cache:<br />
{{bc|# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins}}<br />
}}<br />
<br />
== Applications ==<br />
<br />
The KDE project provides a suite of applications that integrate with the Plasma desktop. See the {{Grp|kde-applications}} group for a full listing of the available applications. Also see [[:Category:KDE]] for related KDE application pages.<br />
<br />
Aside from the programs provided in KDE Applications, there are many other applications available that can complement the Plasma desktop. Some of these are discussed below.<br />
<br />
=== System administration ===<br />
<br />
==== Terminate Xorg server through KDE System Settings ====<br />
<br />
Navigate to the submenu ''System Settings > Input Devices > Keyboard > Advanced (tab) > "Key Sequence to kill the X server"'' and ensure that the checkbox is ticked.<br />
<br />
==== KCM ====<br />
<br />
KCM stands for '''KC'''onfig '''M'''odule. KCMs can help you configure your system by providing interfaces in System Settings, or through the command line with ''kcmshell5''.<br />
<br />
* {{App|kde-gtk-config|GTK2 and GTK3 Configurator for KDE.|https://cgit.kde.org/kde-gtk-config.git|{{Pkg|kde-gtk-config}}}}<br />
* {{App|System policies|Set of configuration modules which allows administrator to change [[PolicyKit]] settings.|https://cgit.kde.org/polkit-kde-kcmodules-1.git|{{AUR|kcm-polkit-kde-git}}}}<br />
* {{App|wacom tablet|KDE GUI for the Wacom Linux Drivers.|https://www.linux-apps.com/p/1127862/|{{Pkg|kcm-wacomtablet}}}}<br />
* {{App|Kcmsystemd|systemd control module for KDE.|https://github.com/rthomsen/kcmsystemd|{{AUR|systemd-kcm}}}}<br />
<br />
More KCMs can be found at [https://www.linux-apps.com/search?projectSearchText=KCM linux-apps.com].<br />
<br />
=== Desktop search ===<br />
<br />
KDE implements desktop search with a software called [[Baloo]], a file indexing and searching solution.<br />
<br />
=== Web browsers ===<br />
<br />
The following web browsers can integrate with Plasma:<br />
<br />
* {{App|[[Wikipedia:Konqueror|Konqueror]]|Part of the KDE project, supports two rendering engines – KHTML and the [[Chromium]]-based Qt WebEngine.|https://konqueror.org/|{{Pkg|konqueror}}}}<br />
* {{App|[[Wikipedia:Falkon|Falkon]]|A Qt web browser with Plasma integration features, previously known as Qupzilla. It uses Qt WebEngine.|https://userbase.kde.org/Falkon/|{{Pkg|falkon}}}}<br />
* {{App|[[Chromium]]|Chromium and its proprietary variant Google Chrome have limited Plasma integration. [[KDE Wallet#KDE Wallet for Chrome and Chromium|They can use KWallet]] and KDE Open/Save windows.|https://www.chromium.org/|{{Pkg|chromium}}}}<br />
* {{App|[[Firefox]]|Firefox can be configured to better integrate with Plasma. See [[Firefox#KDE/GNOME integration|Firefox KDE integration]] for details.|https://mozilla.org/firefox|{{Pkg|firefox}}}}<br />
<br />
{{Tip|Starting from Plasma 5.13, one can integrate [[Firefox]] or [[Chrome]] with Plasma: providing media playback control from the Plasma tray, download notifications and find open tabs in KRunner. [[Install]] {{pkg|plasma-browser-integration}} and the corresponding browser add-on. Chrome/Chromium support should already be included, for Firefox add-on see [[Firefox#KDE/GNOME integration]].}}<br />
<br />
=== PIM ===<br />
<br />
KDE offers its own stack for personal information management. This includes emails, contacts, calendar, etc. To install all the PIM packages, you could use the meta-package {{Pkg|kdepim-meta}}.<br />
<br />
==== Akonadi ====<br />
<br />
Akonadi is a system meant to act as a local cache for PIM data, regardless of its origin, which can be then used by other applications. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, and so on. Akonadi does not store any data by itself: the storage format depends on the nature of the data (for example, contacts may be stored in vCard format).<br />
<br />
Install {{Pkg|akonadi}}. For additional addons, install {{Pkg|kdepim-addons}}.<br />
<br />
{{Note|If you wish to use a database engine other than [[MySQL]], then when installing the {{Pkg|akonadi}} package, use the following command to skip installing the {{Pkg|mariadb}} dependencies:<br />
<br />
# pacman -S akonadi --assume-installed mariadb<br />
<br />
See also {{Bug|32878}}.<br />
}}<br />
<br />
===== PostgreSQL =====<br />
<br />
[[Install]] {{Pkg|postgresql}}.<br />
<br />
To use [[PostgreSQL]] edit Akonadi configuration file so that it has the following contents:<br />
<br />
{{hc|~/.config/akonadi/akonadiserverrc|<nowiki><br />
[%General]<br />
Driver=QPSQL<br />
<br />
[QPSQL]<br />
Host=<br />
InitDbPath=/usr/bin/initdb<br />
Name=akonadi<br />
ServerPath=/usr/bin/pg_ctl<br />
StartServer=true<br />
</nowiki>}}<br />
<br />
{{Note|The value for {{ic|1=Host=}} will get set by Akonadi when it starts for the first time.}}<br />
<br />
Start Akonadi with {{ic|akonadictl start}}, and check its status: {{ic|akonadictl status}}.<br />
<br />
===== SQLite =====<br />
<br />
To use [[SQLite]] edit Akonadi configuration file to match the configuration below:<br />
<br />
{{hc|~/.config/akonadi/akonadiserverrc|2=<br />
[%General]<br />
Driver=QSQLITE3<br />
<br />
[QSQLITE3]<br />
Name=/home/''username''/.local/share/akonadi/akonadi.db<br />
}}<br />
<br />
===== Disabling Akonadi =====<br />
<br />
See this [https://userbase.kde.org/Akonadi#Disabling_the_Akonadi_subsystem section in the KDE userbase].<br />
<br />
=== KDE Telepathy ===<br />
<br />
[https://community.kde.org/KTp KDE Telepathy] is a project with the goal to closely integrate Instant Messaging with the KDE desktop. It utilizes the Telepathy framework as a backend and is intended to replace Kopete.<br />
<br />
To install all Telepathy protocols, install the {{Grp|telepathy}} group.<br />
To use the KDE Telepathy client, install the {{Pkg|telepathy-kde-meta}} package that includes all the packages contained in the {{Grp|telepathy-kde}} group.<br />
<br />
==== Use Telegram with KDE Telepathy ====<br />
<br />
[[Telegram]] protocol is available using {{pkg|telepathy-haze}}, installing {{aur|telegram-purple}} or {{aur|telegram-purple-git}} and {{aur|telepathy-morse-git}}. The username is the Telegram account telephone number (complete with the national prefix {{ic|+''xx''}}, e.g. {{ic|+49}} for Germany).<br />
<br />
The configuration through the GUI may be tricky: if the phone number is not accepted when configuring a new account in the KDE Telepathy client (with an error message complaining about an invalid parameter which prevents the account creation), insert it between single quotes and then remove the quotes manually from the configuration file ({{ic|~/.local/share/telepathy/mission-control/accounts.cfg}}) after the account creation (if the quotes are not removed after, an authentication error should rise).<br />
<br />
{{Note|The configuration file should be edited manually when KDE Telepathy is not running, e.g. when there is no KDE desktop session active, otherwise manual changes may be overwritten by the software.}}<br />
<br />
=== KDE Connect ===<br />
<br />
[https://community.kde.org/KDEConnect KDE Connect] provides several features to connect your [[Android]] phone with your Linux desktop:<br />
<br />
* Share files and URLs to/from KDE from/to any app, without wires.<br />
* Touchpad emulation: Use your phone screen as your computer's touchpad.<br />
* Notifications sync (4.3+): Read your Android notifications from the desktop.<br />
* Shared clipboard: copy and paste between your phone and your computer.<br />
* Multimedia remote control: Use your phone as a remote for Linux media players.<br />
* WiFi connection: no usb wire or bluetooth needed.<br />
* RSA Encryption: your information is safe.<br />
<br />
You will need to install KDE Connect both on your computer and on your Android. For PC side, [[install]] {{Pkg|kdeconnect}} package. For Android side, install KDE Connect from [https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp Google Play] or from [https://f-droid.org/repository/browse/?fdid=org.kde.kdeconnect_tp F-Droid].<br />
<br />
It is possible to use KDE Connect even if you do not use the Plasma desktop. For desktop environments that use AppIndicators, such as Unity, install {{AUR|indicator-kdeconnect}} package as well. For GNOME users, better integration can be achieved by installing {{AUR|gnome-shell-extension-gsconnect}} instead of {{Pkg|kdeconnect}}.<br />
<br />
== Tips and tricks ==<br />
<br />
=== Use a different window manager ===<br />
<br />
The component chooser settings in Plasma does not allow changing the window manager anymore. [https://github.com/KDE/plasma-desktop/commit/2f83a4434a888cd17b03af1f9925cbb054256ade]<br />
In order to change the window manager used you need to set the {{ic|KDEWM}} [[environment variable]] before KDE startup. [https://wiki.haskell.org/Xmonad/Using_xmonad_in_KDE] To do that you can create a script called {{ic|set_window_manager.sh}} in {{ic|~/.config/plasma-workspace/env}} and export the {{ic|KDEWM}} variable there. For example to use the i3 window manager :<br />
<br />
{{hc|~/.config/plasma-workspace/env/set_window_manager.sh|2=<br />
export KDEWM=/usr/bin/i3<br />
}}<br />
<br />
And then make it executable :<br />
<br />
{{bc|$ chmod +x ~/.config/plasma-workspace/env/set_window_manager.sh}}<br />
<br />
==== KDE/Openbox session ====<br />
<br />
The {{Pkg|openbox}} package provides a session for using KDE with [[Openbox]]. To make use of this session, select ''KDE/Openbox'' from the [[display manager]] menu.<br />
<br />
For those starting the session manually, add the following line to your [[xinit]] configuration:<br />
<br />
{{hc|~/.xinitrc|<br />
exec openbox-kde-session<br />
}}<br />
<br />
==== Re-enabling compositing effects ====<br />
<br />
When replacing Kwin with a window manager which does not provide a Compositor (such as Openbox), any desktop compositing effects e.g. transparency will be lost. In this case, install and run a separate Composite manager to provide the effects such as [[Xcompmgr]] or [[Compton]].<br />
<br />
=== Configuring monitor resolution / multiple monitors ===<br />
<br />
To enable display resolution management and multiple monitors in Plasma, install {{Pkg|kscreen}}. This adds the additional options to ''System Settings > Display and Monitor''.<br />
<br />
=== Disable opening application launcher with Super key (Windows key) ===<br />
<br />
To disable this feature you currently can run the following command:<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
== Troubleshooting ==<br />
<br />
=== Fonts ===<br />
<br />
==== Fonts in a Plasma session look poor ====<br />
<br />
Try installing the {{Pkg|ttf-dejavu}} and {{Pkg|ttf-liberation}} packages.<br />
<br />
After the installation, be sure to log out and back in. You should not have to modify anything in ''System Settings > Fonts''. If you are using {{Pkg|qt5ct}}, the settings in Qt5 Configuration Tool may override the font settings in System Settings.<br />
<br />
If you have personally set up how your [[Fonts]] render, be aware that System Settings may alter their appearance. When you go ''System Settings > Fonts'' System Settings will likely alter your font configuration file ({{ic|fonts.conf}}).<br />
<br />
There is no way to prevent this, but, if you set the values to match your {{ic|fonts.conf}} file, the expected font rendering will return (it will require you to restart your application or in a few cases restart your desktop). Note that Gnome's Font Preferences also does this.<br />
<br />
==== Fonts are huge or seem disproportional ====<br />
<br />
Try to force font DPI to {{ic|'''96'''}} in ''System Settings > Fonts''.<br />
<br />
If that does not work, try setting the DPI directly in your Xorg configuration as documented in [[Xorg#Setting DPI manually]].<br />
<br />
=== Configuration related ===<br />
<br />
Many problems in KDE are related to configuration.<br />
<br />
==== Plasma desktop behaves strangely ====<br />
<br />
Plasma problems are usually caused by unstable '''Plasma widgets''' (colloquially called ''plasmoids'') or '''Plasma themes'''. First, find which was the last widget or theme you had installed and disable it or uninstall it.<br />
<br />
So, if your desktop suddenly exhibits "locking up", this is likely caused by a faulty installed widget. If you cannot remember which widget you installed before the problem began (sometimes it can be an irregular problem), try to track it down by removing each widget until the problem ceases. Then you can uninstall the widget, and file a bug report (https://bugs.kde.org/) '''only if it is an official widget'''. If it is not, it is recommended you find the entry on https://store.kde.org/ and inform the developer of that widget about the problem (detailing steps to reproduce, etc).<br />
<br />
If you cannot find the problem, but you do not want ''all'' the settings to be lost, navigate to {{ic|~/.config}}:<br />
<br />
$ for j in plasma*; do mv -- "$j" "${j%}.bak"; done<br />
<br />
This command will '''rename all Plasma related configs''' to *.bak (e.g. {{ic|plasmarc.bak}}) of your user and when you will relogin into Plasma, you will have the '''default''' settings back. To undo that action, remove the .bak file extension. If you already have *.bak files, rename, move, or delete them first. It is highly recommended that you create regular backups anyway. See [[Synchronization and backup programs]] for a list of possible solutions.<br />
<br />
==== Clean cache to resolve upgrade problems ====<br />
<br />
The [https://bbs.archlinux.org/viewtopic.php?id=135301 problem] may be caused by old cache. Sometimes after an upgrade, the old cache might introduce strange, hard to debug behaviour such as unkillable shells, hangs when changing various settings and several other problems such as ark being unable to unrar or unzip or amarok not recognizing any of your music. This solution can also resolve problems with KDE and Qt programmes looking bad following upgrade.<br />
<br />
Rebuild the cache use the following commands:<br />
<br />
$ rm ~/.config/Trolltech.conf<br />
$ kbuildsycoca5 --noincremental<br />
$ kbuildsycoca4 --noincremental<br />
<br />
Optional empty the {{ic|~/.cache}} folder contents, '''note''' this also clears cache of other applications:<br />
<br />
$ rm -rf ~/.cache/*<br />
<br />
=== Graphical problems ===<br />
<br />
Make sure you have the proper driver for your GPU installed. See [[Xorg#Driver installation]] for more information. If you have an older card, it might help to [[#Disable desktop effects manually or automatically for defined applications]] or [[#Disable compositing]].<br />
<br />
==== Getting current state of KWin for support and debug purposes ====<br />
<br />
This command prints out a summary of the current state of KWin including used options, used compositing backend and relevant OpenGL driver capabilities. See more on [https://blog.martin-graesslin.com/blog/2012/03/on-getting-help-for-kwin-and-helping-kwin/ Martin's blog].<br />
<br />
$ qdbus org.kde.KWin /KWin supportInformation<br />
<br />
==== Disable desktop effects manually or automatically for defined applications ====<br />
<br />
Plasma has desktop effects enabled by default and e.g. not every game will disable them automatically. You can disable desktop effects in ''System Settings > Desktop Effects'' and you can toggle desktop effects with {{ic|Alt+Shift+F12}}. Additionally, you can create custom KWin rules to automatically disable/enable compositing when a certain application/window starts under ''System Settings > Window Management > Window Rules''.<br />
<br />
==== Disable compositing ====<br />
<br />
In ''System Settings > Display and Monitor'', uncheck ''Enable compositor on startup'' and restart Plasma.<br />
<br />
==== Flickering in fullscreen when compositing is enabled ====<br />
<br />
In ''System Settings > Display and Monitor'', uncheck ''Allow applications to block compositing''. This may harm performance.<br />
<br />
==== Screen tearing with NVIDIA ====<br />
<br />
See [[NVIDIA/Troubleshooting#Avoid screen tearing in KDE (KWin)]].<br />
<br />
==== Plasma cursor sometimes shown incorrecty ====<br />
<br />
Create the directory {{ic|~/.icons/default}} and inside a file named {{ic|index.theme}} with the following contents:<br />
<br />
{{hc|/home/''archie''/.icons/default/index.theme|2=<br />
[Icon Theme]<br />
Inherits=breeze_cursors<br />
}}<br />
<br />
Execute the following command:<br />
<br />
$ ln -s /usr/share/icons/breeze_cursors/cursors ~/.icons/default/cursors<br />
<br />
=== Sound problems ===<br />
<br />
{{Note|First make sure you have {{Pkg|alsa-utils}} installed.}}<br />
<br />
==== No sound after suspend ====<br />
<br />
If there is no sound after suspending and if KMix does not show audio devices which should be there, restarting plasmashell and pulseaudio may help:<br />
<br />
$ killall plasmashell<br />
$ systemctl --user restart pulseaudio.service<br />
$ plasmashell<br />
<br />
Some applications may also need to be restarted in order for sound to play from them again.<br />
<br />
==== "Falling back to default" messages when trying to listen to any sound ====<br />
<br />
When you encounter such messages:<br />
<br />
The audio playback device ''name_of_the_sound_device'' does not work.<br />
Falling back to default<br />
<br />
Go to ''System Settings > Multimedia > Phonon'' and set the device named {{ic|default}} above all the other devices in each box you see.<br />
<br />
==== MP3 files cannot be played when using the GStreamer Phonon backend ====<br />
<br />
This can be solved by installing the GStreamer libav plugin (package {{Pkg|gst-libav}}). If you still encounter problems, you can try changing the Phonon backend used by installing another such as {{Pkg|phonon-qt4-vlc}} or {{Pkg|phonon-qt5-vlc}}.<br />
Then, make sure the backend is preferred via ''System Settings > Multimedia > Backend''.<br />
<br />
=== Power management ===<br />
<br />
==== No Suspend/Hibernate options ====<br />
<br />
If your system is able to suspend or hibernate using [[systemd]] but do not have these options shown in KDE, make sure {{Pkg|powerdevil}} is installed.<br />
<br />
=== KMail ===<br />
<br />
==== Clean akonadi configuration to fix KMail ====<br />
<br />
First, make sure that KMail is not running. Then backup configuration:<br />
<br />
$ cp -a ~/.local/share/akonadi ~/.local/share/akonadi-old<br />
$ cp -a ~/.config/akonadi ~/.config/akonadi-old<br />
<br />
Start ''SystemSettings > Personal'' and remove all the resources. Go back to Dolphin and remove the original {{ic|~/.local/share/akonadi}} and<br />
{{ic|~/.config/akonadi}} - the copies you made ensure that you can back-track if necessary.<br />
<br />
Now go back to the System Settings page and carefully add the necessary resources. You should see the resource reading in your mail folders. Then start Kontact/KMail to see if it work properly.<br />
<br />
==== Empty IMAP inbox in KMail ====<br />
<br />
For some IMAP accounts, kmail will show the inbox as a container with all other folders of this account inside. Kmail does not show messages in the inbox container but in all other subfolders, see [https://bugs.kde.org/show_bug.cgi?id=284172 KDE Bug 284172]. To solve this problem simply disable the server side subscription in the kmail account settings.<br />
<br />
=== Networking ===<br />
<br />
==== Freezes when using Automount on a NFS volume ====<br />
<br />
Using [[Fstab#Automount with systemd]] on a [[NFS]] volume may cause freezes, see [https://bugs.kde.org/show_bug.cgi?id=354137 bug report upstream].<br />
<br />
=== Aggressive QXcbConnection journal logging ===<br />
<br />
See [[Qt#Disable/Change Qt journal logging behaviour]].<br />
<br />
=== KF5/Qt5 applications do not display icons in i3/fvwm/awesome ===<br />
<br />
See [[Qt#Configuration of Qt5 apps under environments other than KDE Plasma]].<br />
<br />
=== Problems with saving credentials and persistently occurring KWallet dialogs ===<br />
It is not recommended to turn off the [[KWallet]] password saving system in the user settings as it is required to save encrypted credentials like WiFi passphrases for each user. Persistently occuring KWallet dialogs can be the consequence of turning it off.<br />
In case you find the dialogs to unlock the wallet annoying when applications want to access it, you can let the login managers {{ic|SDDM}} and {{ic|LightDM}} unlock the wallet at login automatically, see [[KDE_Wallet#Unlock_KDE_Wallet_automatically_on_login|KDE Wallet]]. The first wallet needs to be generated by KWallet (and not user-generated) in order to be usable for system program credentials.<br />
In case you want the wallet credentials not to be opened in memory for every application, you can restrict applications from accessing it with {{Pkg|kwalletmanager}} in the KWallet settings.<br />
If you do not care for credential encryption at all, you can simply leave the password forms blank when KWallet asks for the password while creating a wallet. In this case, applications can access passwords without having to unlock the wallet first.<br />
<br />
=== Discover does not show any applications ===<br />
<br />
This can be solved by installing {{Pkg|packagekit-qt5}}.<br />
<br />
=== High CPU usage of kscreenlocker_greet with NVidia drivers ===<br />
<br />
As described in [https://bugs.kde.org/show_bug.cgi?id=347772 KDE Bug 347772] NVidia OpenGL drivers and QML may not play well together with Qt5. This may lead {{ic|kscreenlocker_greet}} to high CPU usage after unlocking the session. To work around this issue, set the {{ic|$QSG_RENDERER_LOOP}} [[environment variable]] to {{ic|basic}}.<br />
<br />
Then kill previous instances of the greeter with {{ic|killall kscreenlocker_greet}}.<br />
<br />
=== OS error 22 when running Akonadi on ZFS ===<br />
<br />
If your home directory is on a [[ZFS]] pool, create a {{ic|~/.config/akonadi/mysql-local.conf}} file with the following contents:<br />
<br />
[mysqld]<br />
innodb_use_native_aio = 0<br />
<br />
See [[MySQL#OS error 22 when running on ZFS]].<br />
<br />
== See also ==<br />
<br />
* [https://www.kde.org/ KDE homepage]<br />
* [https://bugs.kde.org/ KDE bug tracker]<br />
* [https://blog.martin-graesslin.com/blog/kategorien/kde/ Martin Graesslin's blog]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Creating_packages_for_other_distributions&diff=537852Creating packages for other distributions2018-08-26T19:34:03Z<p>Scrumplex: Fix typo</p>
<hr />
<div>[[Category:Package development]]<br />
[[ja:他のディストリビューションのパッケージの作成]]<br />
{{Related articles start}}<br />
{{Related|Creating packages}}<br />
{{Related articles end}}<br />
[[Arch is the best]]. But you may still want to package for other distributions.<br />
<br />
== General ==<br />
<br />
* [[Virtualization]] is an obvious way, but requires maintaining additional system(s).<br />
* Use distribution-specific packaging tools. Examples: {{Aur|dh-make}}, {{Aur|dpkg}} (Debian), {{Aur|rpm-org}} (Fedora). Shortcuts such as [http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/ dpkg-deb] or {{Aur|checkinstall}}{{Broken package link|package not found}} may be suited for less complex tasks.<br />
* [[Chroot]] to create a base system inside (yet separate from) Arch. Examples: {{Pkg|debootstrap}} (Debian), {{Aur|dnf}} (Fedora). This has the added benefit of building in a minimal, clean environment.<br />
* Use chroot with packaging tools in an an automated fashion. Examples: {{Aur|pbuilder-ubuntu}} (Debian), {{Aur|mock-git}}{{Broken package link|{{aur-mirror|mock-git}}}} (Fedora).<br />
* A different way to handle (possibly incompatible) depends is [http://jurjenbokma.com/ApprenticesNotes/getting_statlinked_binaries_on_debian.xhtml static linking]. Please note that most distributions frown on this practice. <br />
* Common practice applies regardless of distribution used. For example, do [https://bbs.archlinux.org/viewtopic.php?id=67561 not build packages as root].<br />
<br />
== Debian ==<br />
<br />
The [https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.pdf Debian Packaging Tutorial] explains the groundwork. It describes use of the following tools:<br />
<br />
{{Expansion|Missing tools: ''lintian'', ''reprepo'', ''cdbs'', ''svn-buildpackage'', ''javahelper''}}<br />
<br />
{{App|cowdancer|Copy-on-write wrapper for pbuilder|https://packages.debian.org/sid/cowdancer|{{Aur|cowdancer}}}}<br />
{{App|debootstrap|A tool used to create a Debian base system from scratch, without requiring the availability of dpkg or apt.|https://packages.debian.org/sid/debootstrap|{{Pkg|debootstrap}}}}<br />
{{App|devscripts|Scripts to make the life of a Debian Package maintainer easier|https://packages.debian.org/sid/devscripts|{{Aur|devscripts}}}}<br />
{{App|dh-autoreconf|Debhelper add-on to call autoreconf and clean up after the build|https://packages.debian.org/sid/dh-autoreconf|{{Aur|dh-autoreconf}}}}<br />
{{App|dh-make|Tool that converts source archives into Debian package source|https://packages.debian.org/sid/dh-make|{{Aur|dh-make}}}}<br />
{{App|[[Wikipedia:dpkg|dpkg]]|The Debian Package Manager|https://packages.debian.org/sid/dpkg|{{Aur|dpkg}}}}<br />
{{App|dput|Debian package upload tool|https://packages.debian.org/sid/dput|{{Aur|dput}}}}<br />
{{App|equivs|Circumvent Debian package dependencies|https://launchpad.net/ubuntu/+source/equivs|{{Aur|equivs}}}}<br />
{{App|git-buildpackage|Tools from Debian to integrate the package build system with Git|https://honk.sigxcpu.org/piki/projects/git-buildpackage/|{{Aur|git-buildpackage}}}}<br />
{{App|pbuilder-ubuntu|Chroot environment for building Debian packages|https://launchpad.net/ubuntu/+source/pbuilder|{{Aur|pbuilder-ubuntu}}}}<br />
{{App|[[Wikipedia:Quilt_(software)|quilt]]|Manage a series of patches by keeping track of the changes each patch makes|http://savannah.nongnu.org/projects/quilt|{{Pkg|quilt}}}}<br />
<br />
=== Tips and Tricks ===<br />
<br />
==== Override dependency handling ====<br />
<br />
''dpkg'' does not recognize dependencies installed by [[pacman]]. This means {{ic|dpkg-buildpackage}} will generally fail with errors such as:<br />
<br />
dpkg-checkbuilddeps: Unmet build dependencies: build-essential:native debhelper (>= 8.0.0)<br />
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting<br />
<br />
To override this, use the -d flag:<br />
<br />
$ dpkg-buildpackage -d -us -uc<br />
<br />
You may also need to override {{ic|dh_shlibdeps}} by adding the following lines to {{ic|debian/rules}}:<br />
<br />
override_dh_shlibdeps:<br />
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info<br />
<br />
{{Note|Any run-time dependencies (and matching version numbers) should be added manually to <br />
{{ic|debian/control}}, where {{ic|<nowiki>${shlibs:Depends}</nowiki>}} now has no meaning.}}<br />
<br />
{{Warning|Even ''if'' you manage to successfully build a package this way, it is '''strongly recommended''' to build in a clean environment (such as chroot) to prevent any incompatibilities.}}<br />
<br />
==== Set up a chroot ====<br />
<br />
See the [https://wiki.ubuntu.com/PbuilderHowto Pbuilder How-To] for an introduction to ''pbuilder-ubuntu''. Using ''cowdancer'' in addition is recommended as [[wikipedia:Copy-on-write|copy-on-write]] offers a significant performance benefit.<br />
<br />
* {{Pkg|debian-archive-keyring}}, {{Pkg|ubuntu-keyring}} and {{Aur|gnupg1}} from the [[AUR]] are required.<br />
* ''eatmydata'' is available as {{Aur|libeatmydata}} and {{Aur|lib32-libeatmydata}}{{Broken package link|{{aur-mirror|lib32-libeatmydata}}}} in the [[AUR]]. To prevent {{ic|LD_PRELOAD}} errors, it must be installed both inside and outside the chroot. As the paths are different in Arch and Debian, create the following symbolic links:<br />
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so<br />
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so.1<br />
* [https://gist.githubusercontent.com/AladW/71352540eca7de2197c7/raw/c28f6d96c0beb116f99e1ff0bd16599c356855ed/gistfile1.sh Sample pbuilderrc]<br />
* To create a source package for pbuilder to handle:<br />
$ dpkg-buildpackage -d -us -uc -S<br />
<br />
=== See also ===<br />
<br />
* [https://www.debian.org/doc/debian-policy/ Debian Policy]<br />
* [https://www.debian.org/doc/manuals/maint-guide/ New Maintainers' Guide]<br />
* [http://raphaelhertzog.com/2012/08/08/how-to-use-quilt-to-manage-patches-in-debian-packages/ Quilt in Debian packaging]<br />
<br />
== Fedora ==<br />
<br />
{{Expansion|}}<br />
<br />
[https://fedoraproject.org/wiki/How_to_create_an_RPM_package How to create an RPM package]<br />
<br />
{{App|rpm-org|RPM.org fork, used in major RPM distros|http://www.rpm.org/|{{Aur|rpm-org}}}}<br />
{{App|mock|Takes Source RPMs and builds RPMs from them in a chroot|http://fedoraproject.org/wiki/Projects/Mock|{{Aur|mock}}}}<br />
<br />
=== See also ===<br />
<br />
*[http://fedoraproject.org/wiki/Projects/Mock Projects/Mock]<br />
*[https://copr.fedoraproject.org/ Copr]<br />
<br />
== openSUSE ==<br />
<br />
The [http://openbuildservice.org/ Open Build Service (OBS)] is a generic system to build and distribute packages from sources in an automatic, consistent and reproducible way. It supports at least .deb, .rpm and Arch packages. <br />
<br />
=== Creating Arch Packages in OBS with OSC ===<br />
<br />
{{Note|For building, you must upload your PKGBUILD file as well as the source files (by uploading or letting OBS download the files). OBS uses virtual machines without networking support and cannot download any file.}}<br />
<br />
==== Creating a Package ====<br />
<br />
# Create an account in [https://build.opensuse.org/]<br />
# [[Install]] the {{AUR|osc}} package. Upstream documentation is available [http://en.opensuse.org/openSUSE:OSC here].<br />
# Create an example {{ic|home:foo}} project.<br />
# Create an example {{ic|home:foo:bar}} subproject (optional, but recommended).<br />
# Create a new {{ic|ham}} example package with {{ic|osc meta pkg -e home:foo:bar ham}}. Save the created XML then exit.<br />
# Switch to a clean working directory then checkout the project you've just created: {{ic|osc co home:foo:bar/ham}}.<br />
# Now cd into it: {{ic|cd home:foo:bar/ham}}.<br />
<br />
==== Managing a Package ====<br />
<br />
Now it is time to decide how we will manage our project. There are two practical ways to do this:<br />
<br />
# Maintain a PKGBUILD plus its helper files (such as *.install scripts) in a version control system (such as git, hg) then just make OBS track it; <br />
# Maintain a package entirely in OBS itself.<br />
<br />
The first version is more flexible and dynamic. To proceed:<br />
<br />
* From your project directory, create a {{ic|_service}} file with the following contents: <br />
<br />
{{bc|<nowiki><services><br />
<service name="tar_scm"><br />
<param name="scm">git</param><br />
<param name="url">git://<your_repo_here></param><br />
<param name="versionformat">git%cd~%h</param><br />
<param name="versionprefix"><your_version_here></param><br />
<param name="filename"><name_of_your_package></param><br />
</service><br />
<service name="recompress"><br />
<param name="file">*.tar</param><br />
<param name="compression">xz</param><br />
</service><br />
<service name="set_version"/><br />
</services></nowiki>}}<br />
<br />
Here is an example for {{AUR|gimp-git}}:<br />
<br />
{{bc|<nowiki><services><br />
<service name="tar_scm"><br />
<param name="scm">git</param><br />
<param name="url">git://git.gnome.org/gimp.git</param><br />
<param name="versionformat">git%cd~%h</param><br />
<param name="versionprefix">2.9.1</param><br />
<param name="filename">gimp-git</param><br />
</service><br />
<service name="recompress"><br />
<param name="file">*.tar</param><br />
<param name="compression">xz</param><br />
</service><br />
<service name="set_version"/><br />
</services></nowiki>}}<br />
<br />
* Make OBS track it: {{ic|osc add _service}}<br />
* If you have any other files to include into the repo, just proceed as before: add the files in the project directory, then make OBS track them (OBS uses subversion as its underlying SCM, so this process might already be familiar for you)<br />
* Check-in (=upload) your files into the repo {{ic|osc ci -m "commit message (e.g. bumped package xxx to version yyy"}}.<br />
<br />
Now, after a while, OBS will begin building your package.<br />
<br />
==== Tips and tricks ====<br />
<br />
* To see the build progress of your package, cd into its working directory, then: {{ic|osc results}}.<br />
* There are two repositories, Arch_Core and Arch_Extra. You'll probably want Arch_Extra, since it is more complete. [community] isn't currently available there as of this edit, so if your project has any dependencies in [community], you should include them (manually) in your (sub)project too. <br />
* There is an unofficial arch-community repo [https://build.opensuse.org/project/show/home:roman-neuhauser:arch-community here]. You might clone a package from there with {{ic|osc branch home:roman-neuhauser:arch-community/<package-name> home:foo:bar/<package-name>}}.<br />
<br />
==== ca-certificates-utils package problem ====<br />
<br />
If OBS build fails because of the ca-certificates-utils package, you can add this line to your project config (from your project page, go to Advanced -> Project Config).<br />
Prefer: ca-certificates-utils ca-certificates<br />
<br />
==== See also ====<br />
<br />
* Example repo: [https://build.opensuse.org/project/show/home:metakcahura:arch-deepin arch-deepin]<br />
* [http://en.opensuse.org/openSUSE:Packaging_guidelines openSUSE packaging guidelines]<br />
* [http://en.opensuse.org/Portal:Packaging Portal:Packaging from openSUSE wiki]<br />
<br />
== See also ==<br />
<br />
* [https://bbs.archlinux.org/viewtopic.php?id=175409 BBS - PKGBUILD equivalents for other distros]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=182198 BBS - Original discussion]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=Improving_performance/Boot_process&diff=533113Improving performance/Boot process2018-08-10T18:10:17Z<p>Scrumplex: Remove systemd-bootchart part, as systemd-bootchart is no longer integrated in systemd package (unmaintained?)</p>
<hr />
<div>[[Category:Boot process]]<br />
[[ar:Improve boot performance]]<br />
[[cs:Improve boot performance]]<br />
[[es:Improve boot performance]]<br />
[[it:Improve boot performance]]<br />
[[ja:ブートパフォーマンスの向上]]<br />
[[ru:Improving performance/Boot process]]<br />
[[zh-hans:Improve boot performance]]<br />
{{Related articles start}}<br />
{{Related|Improving performance}}<br />
{{Related|Silent boot}}<br />
{{Related|Daemon}}<br />
{{Related|e4rat}}<br />
{{Related|Kexec}}<br />
{{Related articles end}}<br />
<br />
Improving the boot performance of a system can provide reduced boot wait times and a means to learn more about how certain system files and scripts interact with one another. This article attempts to aggregate methods on how to improve the boot performance of an Arch Linux system.<br />
<br />
== Analyzing the boot process ==<br />
<br />
=== Using systemd-analyze ===<br />
<br />
[[systemd]] provides a tool called {{ic|systemd-analyze}} that can be used to show timing details about the boot process, including an svg plot showing units waiting for their dependencies. You can see which unit files are causing your boot process to slow down. You can then optimize your system accordingly.<br />
<br />
To see how much time was spent in kernelspace and userspace on boot, simply use:<br />
<br />
$ systemd-analyze<br />
<br />
{{Tip|If you boot via [[UEFI]] and use a boot loader which implements systemd's [http://www.freedesktop.org/wiki/Software/systemd/BootLoaderInterface Boot Loader Interface] (which currently [[systemd-boot]] and [[GRUB]] do), ''systemd-analyze'' can additionally show you how much time was spent in the EFI firmware and the boot loader itself.}}<br />
<br />
To list the started unit files, sorted by the time each of them took to start up:<br />
<br />
$ systemd-analyze blame<br />
<br />
At some points of the boot process, things can not proceed until a given unit succeeds. To see which units find themselves at these critical points in the startup chain, do:<br />
<br />
$ systemd-analyze critical-chain<br />
<br />
You can also create an SVG file which describes your boot process graphically, similiar to [[Bootchart]]:<br />
<br />
$ systemd-analyze plot > plot.svg<br />
<br />
See {{man|1|systemd-analyze}} for details.<br />
<br />
=== Using bootchart2 ===<br />
<br />
{{Merge|Bootchart#Running Bootchart2|different instructions from the main page}}<br />
<br />
You could also use a version of bootchart to visualize the boot sequence. Since you are not able to put a second init into the kernel command line you won't be able to use any of the standard bootchart setups. However the {{AUR|bootchart2-git}} package from [[AUR]] comes with an undocumented '''systemd''' service. After you've installed bootchart2 do:<br />
<br />
# systemctl enable bootchart2<br />
<br />
You can visualize the results by opening ''/var/log/bootchart.png'', or if you would like more features by launching <br />
<br />
$ pybootchartgui -i<br />
<br />
Read the [https://github.com/mmeeks/bootchart bootchart2 documentation] for further details on using this version of bootchart.<br />
<br />
== Compiling a custom kernel ==<br />
<br />
Compiling a custom kernel can reduce boot time and memory usage. Though with the standardization of the 64 bit architecture and the modular nature of the Linux kernel, these benefits may not be as great as expected. [[Kernel Compilation|Read more about compiling a kernel]].<br />
<br />
== Initramfs ==<br />
<br />
In a similar approach to [[#Compiling a custom kernel]], the initramfs can be slimmed down. A simple way is to include the [[mkinitcpio]] {{ic|autodetect}} hook. If you want to go further than that, see [[Minimal initramfs]].<br />
<br />
== Early start for services ==<br />
<br />
One central feature of systemd is [[D-Bus]] and socket activation. This causes services to be started when they are first accessed and is generally a good thing. However, if you know that a service (like [[UPower]]) will always be started during boot, then the overall boot time might be reduced by starting it as early as possible. This can be achieved (if the service file is set up for it, which in most cases it is) by issuing:<br />
<br />
# systemctl enable upower<br />
<br />
This will cause systemd to start UPower as soon as possible, without causing races with the socket or D-Bus activation.<br />
<br />
== Staggered spin-up ==<br />
<br />
Some hardware implements [[Wikipedia:Spin-up#Staggered spin-up|staggered spin-up]], which causes the OS to probe ATA interfaces serially, which can spin up the drives one-by-one and reduce the peak power usage. This slows down the boot speed, and on most consumer hardware provides no benefits at all since the drives will already spin-up immediately when the power is turned on. To check if SSS is being used:<br />
<br />
$ dmesg | grep SSS<br />
<br />
If it wasn't used during boot, there will be no output.<br />
<br />
To disable it, add {{ic|1=libahci.ignore_sss=1}} [[kernel parameter]].<br />
<br />
== Filesystem mounts ==<br />
<br />
Thanks to [[mkinitcpio]]'s {{ic|fsck}} hook, you can avoid a possibly costly remount of the root partition by changing {{ic|ro}} to {{ic|rw}} on the kernel line: options can be set with {{ic|1=rootflags='''rw''',''other_mount_options''}}. The entry must be removed from the {{ic|/etc/fstab}} file, otherwise the {{ic|systemd-remount-fs.service}} will continue to try applying these settings. Alternatively, one could try to mask that unit.<br />
<br />
If [[btrfs]] is in use for the root filesystem, there is no need for a fsck on every boot like other filesystems. If this is the case, [[mkinitcpio]]'s {{ic|fsck}} hook can be removed. You may also want to mask the {{ic|systemd-fsck-root.service}}, or tell it not to fsck the root filesystem from the kernel command line using {{ic|fsck.mode&#61;skip}}. Without [[mkinitcpio]]'s {{ic|fsck}} hook, systemd will still fsck any relevant filesystems with the {{ic|systemd-fsck@.service}}<br />
<br />
You can also remove API filesystems from {{ic|/etc/fstab}}, as systemd will mount them itself (see {{ic|pacman -Ql systemd <nowiki>|</nowiki> grep '\.mount$'}} for a list). It is not uncommon for users to have a /tmp entry carried over from sysvinit, but you may have noticed from the command above that systemd already takes care of this. Ergo, it may be safely removed.<br />
<br />
Other filesystems like {{ic|/home}} or [[EFI system partition]] can be mounted with custom mount units. Adding {{ic|noauto,x-systemd.automount}} to mount options will buffer all access to that partition, and will fsck and mount it on first access, reducing the number of filesystems it must fsck/mount during the boot process.<br />
<br />
{{Note|<br />
* This will make your {{ic|/home}} filesystem type {{ic|autofs}}, which is ignored by [[mlocate]] by default. The speedup of automounting {{ic|/home}} may not be more than a second or two, depending on your system, so this trick may not be worth it.<br />
* If the system is installed into a ''btrfs'' subvolume (specifically: the root directory {{ic|/}} itself is a subvolume) and {{ic|/home}} is a separate file system, you may also want to prevent the creation of a {{ic|/home}} subvolume. Mask the {{ic|home.conf}} tmpfile: {{ic|ln -s /dev/null /etc/tmpfiles.d/home.conf}}.<br />
}}<br />
<br />
== Less output during boot ==<br />
<br />
For some systems, particularly those with an SSD, the slow performance of the TTY is actually a bottleneck, and so less output means faster booting. See the [[Silent boot]] article for suggestions.<br />
<br />
== Suspend to RAM ==<br />
<br />
The best way to reduce boot time is not booting at all. Consider [[Power management/Suspend and hibernate|suspending your system to RAM]] instead.</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=524643User:Scrumplex2018-06-03T14:33:56Z<p>Scrumplex: </p>
<hr />
<div>Profile available at [https://en.wikipedia.org/wiki/User:Scrumplex Wikipedia].</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=524642User:Scrumplex2018-06-03T14:33:12Z<p>Scrumplex: Redirected page to Https://en.wikipedia.org/wiki/User:Scrumplex</p>
<hr />
<div>#REDIRECT [[https://en.wikipedia.org/wiki/User:Scrumplex]]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=524641User:Scrumplex2018-06-03T14:32:23Z<p>Scrumplex: </p>
<hr />
<div>== See also ==<br />
[[https://en.wikipedia.org/wiki/User:Scrumplex Wikipedia Profile]]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=User:Scrumplex&diff=524640User:Scrumplex2018-06-03T14:32:08Z<p>Scrumplex: Created page with "== See also == https://en.wikipedia.org/wiki/User:Scrumplex"</p>
<hr />
<div>== See also ==<br />
[[https://en.wikipedia.org/wiki/User:Scrumplex]]</div>Scrumplexhttps://wiki.archlinux.org/index.php?title=AUR_helpers&diff=524631AUR helpers2018-06-03T13:48:57Z<p>Scrumplex: Updated yay, as diffs were implemented</p>
<hr />
<div>[[Category:Package management]]<br />
[[de:AUR Hilfsprogramme]]<br />
[[fr:Assistants AUR]]<br />
[[ja:AUR ヘルパー]]<br />
[[pt:AUR helpers]]<br />
[[ru:AUR helpers]]<br />
[[zh-hans:AUR helpers]]<br />
{{Warning|<nowiki></nowiki><br />
* AUR helpers are '''not''' [https://bbs.archlinux.org/viewtopic.php?pid&#61;828254#p828254 supported] by Arch Linux. It is recommended to become familiar with the [[Arch User Repository#Installing packages|manual build process]] in order to be prepared to troubleshoot problems on one's own.<br />
* AUR helpers can replicate {{man|8|pacman}} usage for the [[official repositories]], such as {{ic|pacman -Syu}}. This usage may deviate from ''pacman'' in various ways; it is thus '''not''' supported or recommended.}}<br />
<br />
AUR helpers are written to automate certain tasks for the [[Arch User Repository]].<br />
<br />
== Build and search ==<br />
<br />
{{Note|Do not edit this section prior to discussion in [[Talk:AUR helpers]].}}<br />
<br />
The columns have the following meaning:<br />
<br />
* ''Secure'': does not [[source]] the PKGBUILD at all by default; or, alerts the user and offers the opportunity to inspect the PKGBUILD manually before it is sourced. Some helpers are known to source PKGBUILDs before the user can inspect them, '''allowing malicious code to be executed'''. ''Optional'' means that there is a command line flag or configuration option to prevent the automatic sourcing before viewing.<br />
* ''Clean build'': does not export new variables that can prevent a successful build process.<br />
* ''Native pacman'': when used as replacement for {{man|8|pacman}} commands such as {{ic|pacman -Syu}}, the following are obeyed ''by default'': [https://wiki.archlinux.org/index.php?title=Talk:AUR_helpers&oldid=515160#Add_.22pacman_wrap.22_column]<br />
:– do not separate commands, for example {{ic|pacman -Syu}} is not split to {{ic|pacman -Sy}} and {{ic|pacman -S ''packages''}};<br />
:– use ''pacman'' directly instead of manual database manipulation or usage of {{man|3|libalpm}}.<br />
:In addition, unsupported commands such as {{ic|pacman -Ud}}, {{ic|pacman -Rdd}} or {{ic|pacman --force}} are '''not''' used.<br />
* ''Reliable parser'': ability to handle complex packages by using the provided metadata (RPC/.SRCINFO) instead of PKGBUILD [[w:Parsing#Parser|parsing]], such as {{AUR|aws-cli-git}}.<br />
* ''Reliable solver'': ability to correctly solve and build complex dependency chains, such as {{AUR|ros-lunar-desktop}}.<br />
* ''Split packages'': ability to correctly build and install:<br />
:– Multiple packages from the same package base, without rebuilding or reinstalling multiple times, such as {{AUR|clion}}<br />
:– Split packages which depend on a package from the same package base, such as {{AUR|libc++}} and {{AUR|libc++abi}}.<br />
:– Split packages independently, such as {{AUR|python-pyalsaaudio}} and {{AUR|python2-pyalsaaudio}}.<br />
* ''Git clone'': uses {{man|1|git-clone}} by default to retrieve build files from the AUR.<br />
* ''Diff view'': ability to view package differences on inspection. Besides the PKGBUILD, this includes changes to files such as {{ic|.install}} or {{ic|.patch}} files.<br />
* ''Batch interaction'': ability to move prompts and user interaction before the start of any build process, in particular:<br />
:– Inspection of PKGBUILDs;<br />
:– Resolution of package conflicts through {{man|8|pacman}} or {{man|1|pacinstall}}.<br />
* ''Shell completion'': [[w:Command-line_completion|tab completion]] is available for the listed [[shell]]s.<br />
<br />
{{Note|<nowiki></nowiki><br />
* Table rows are sorted by column values, where ''Yes'' or ''N/A'' take precedence over ''Partial'' or ''Optional'' and ''No'', or alphabetically if values are equal.<br />
* ''Optional'' means that a feature is available, but only through a command-line argument or configuration option. ''Partial'' means that a feature is not fully implemented, or that it deviates from the given criteria in a minor way.}}<br />
<br />
=== Active ===<br />
<br />
{| class="wikitable sortable" width="100%"<br />
! Name !! Written In !! Secure !! Clean build !! Native pacman !! Reliable parser !! Reliable solver !! Split packages !! Git clone !! Diff view !! Batch interaction || Shell completion !! Specificity<br />
|-<br />
! {{AUR|aurman}}<br />
| Python || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[https://github.com/polygamma/aurman/wiki/Description-of-the-aurman-dependency-solving Yes]}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[https://github.com/polygamma/aurman/commit/9f4cf1388e558f50e8ed435ad2487147bcb088be Yes]}} || style="text-align:center;" | bash, fish || fetch pgp keys, sort by popularity<br />
|-<br />
! {{AUR|aurutils}}<br />
| Bash/C || {{Yes}} || {{Yes}} || {{Grey|N/A}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Y|Partial}} || style="text-align:center;" | zsh || [[vifm]], [[local repository]], [[package signing]], [[DeveloperWiki:Building_in_a_Clean_Chroot|clean chroot]] support, sort by votes/popularity<br />
|-<br />
! {{AUR|pikaur}}<br />
| Python || {{Yes}} || {{Yes}} || {{Y|[https://github.com/actionless/pikaur/commit/2c417628729474d58fc6556d14139bf4c42755bb Partial]}} || {{Yes}} || {{Yes}} || {{G|[https://github.com/actionless/pikaur/commit/d409b958b4ff403d4fda06681231061854d32b3c Yes]}} || {{Yes}} || {{Yes}} || {{G|[https://github.com/actionless/pikaur/commit/cc401f66687e3d744a728205cc86c3b1446dda92 Yes]}} || style="text-align:center;" | bash, fish, zsh || [http://0pointer.net/blog/dynamic-users-with-systemd.html dynamic users], [https://github.com/actionless/pikaur/tree/master/locale multilingual], sort by votes/popularity, [https://github.com/actionless/pikaur/pull/191 print news]<br />
|-<br />
! {{AUR|yay}}<br />
| Go || {{Yes}} || {{Yes}} || {{Y|[https://github.com/Jguer/yay/commit/98ea801004fc63b5a294f46392910e85286ffd98 Partial]}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[https://github.com/Jguer/yay/pull/297 Yes]}} || {{G|[https://github.com/Jguer/yay/pull/447 Yes]}} || {{G|[https://github.com/Jguer/yay/commit/e88bf0f5b7f3ba3ffba01926bc3274b2f47e1efc Yes]}} || style="text-align:center;" | bash, fish, zsh || sort by votes, fetch PGP keys, [https://github.com/Jguer/yay/commit/4bcd3a6297052714e91e3f886602ce5c12d15786 prompt architecture]<br />
|-<br />
! {{AUR|pakku}}<br />
| Nim || {{Yes}} || {{G|[https://github.com/kitsunyan/pakku/commit/864cc0373fd6095295f68cc44d1657bd17269732 Yes]}} || {{Y|[https://github.com/kitsunyan/pakku/wiki/Native-Pacman-Explanation Partial]}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[https://github.com/kitsunyan/pakku/commit/396e9f44c4f5a79c7b9238835599387f6ff418fe Yes]}} || {{Y|Partial}} || style="text-align:center;" | bash, zsh || [[ABS]] support, AUR comments, fetch PGP keys<br />
|-<br />
! {{AUR|bauerbill}}<br />
| Python || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Y|Partial}} || style="text-align:center;" | bash, zsh || Trust management, [[ABS]] support, extends Powerpill <br />
|-<br />
! {{AUR|PKGBUILDer}}<br />
| Python || {{Y|Optional}} || {{Yes}} || {{G|[https://github.com/Kwpolska/pkgbuilder/blob/master/docs/wrapper.rst Yes]}} || {{Yes}} || {{Yes}} || {{Y|[https://github.com/Kwpolska/pkgbuilder/issues/39 Partial]}} || {{Yes}} || {{No}} || {{Y|Partial}} || style="text-align:center;" | None || Automatic builds by default, use {{ic|-F}} to disable; multilingual<br />
|-<br />
! {{AUR|naaman}}<br />
| Python || {{Y|Optional}} || {{Yes}} || {{Grey|N/A}} || {{Yes}} || {{Y|[https://github.com/enckse/naaman/issues/19 Partial]}} || {{Y|[https://github.com/enckse/naaman/issues/20 Partial]}} || {{Yes}} || {{No}} || {{Y|Partial}} || style="text-align:center;" | bash || Automatic builds by default, use {{ic|--fetch}} to disable, use {{ic|-d}} to enable the solver<br />
|-<br />
! {{AUR|aura}}<br />
| Haskell || {{Y|Optional}} || {{Yes}} || {{G|[https://github.com/aurapm/aura/blob/master/aura/src/Aura/Pacman.hs Yes]}} || {{G|[https://github.com/aurapm/aura/commit/7848e9830cd880215f1d12a1c0294992428ea778 Yes]}} || {{No}} || {{R|[https://github.com/aurapm/aura/issues/353 No]}} || {{R|[https://github.com/aurapm/aura/pull/346 No]}} || {{Y|[https://github.com/aurapm/aura/blob/89bf702bd0539fa757265c4c54ea2192155f85ed/aura/src/Aura/Pkgbuild/Records.hs Partial]}} || {{Y|Partial}} || style="text-align:center;" | bash, zsh || Automatic builds by default, use {{ic|--dryrun}} to disable, [[downgrade]] support, multilingual<br />
|-<br />
! {{AUR|wrapaur}}<br />
| Bash || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || style="text-align:center;" | None || Mirror updates, print news and AUR comments<br />
|-<br />
! {{AUR|aurget}}<br />
| Bash || {{Y|Optional}} || {{Yes}} || {{Grey|N/A}} || {{No}} || {{No}} || {{R|[https://github.com/pbrisbin/aurget/issues/40 No]}} || {{No}} || {{R|[https://github.com/pbrisbin/aurget/issues/41 No]}} || {{No}} || style="text-align:center;" | bash, zsh || sort by votes<br />
|-<br />
|}<br />
<br />
=== Search-only ===<br />
<br />
{| class="wikitable sortable" width="100%"<br />
! Name !! Written In !! Secure !! Reliable parser !! Reliable solver !! Git clone !! Shell completion !! Specificity<br />
|-<br />
! {{AUR|pbget}}<br />
| Python || {{Yes}} || {{Yes}} || {{Grey|N/A}} || {{Yes}} || style="text-align:center;" | None || -<br />
|-<br />
! {{AUR|yaah}}<br />
| Bash || {{Yes}} || {{Yes}} || {{Grey|N/A}} || {{Y|Optional}} || style="text-align:center;" | bash || -<br />
|-<br />
! {{AUR|auracle-git}}<br />
| C++ || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || style="text-align:center;" | N/A || print build order<br />
|-<br />
! {{AUR|cower}}<br />
| C || {{Yes}} || {{Yes}} || {{Grey|N/A}} || {{No}} || style="text-align:center;" | bash/zsh || regex support, sort by votes/popularity<br />
|-<br />
! {{AUR|package-query}}<br />
| C || {{Yes}} || {{No}} [https://github.com/archlinuxfr/package-query/issues/135] || {{Grey|N/A}} || {{Grey|N/A}} || style="text-align:center;" | None || -<br />
|-<br />
! {{AUR|repoctl}}<br />
| Go || {{Yes}} || {{Yes}} [https://github.com/goulash/pacman/blob/master/aur/aur.go] || {{Grey|N/A}} || {{No}} || style="text-align:center;" | zsh || local repository support<br />
|-<br />
|}<br />
<br />
=== Discontinued or problematic ===<br />
<br />
This table describes projects which either are discontinued by their authors, or have issues on ''Security'', ''Clean build'' or ''Native pacman'' (see [[#Active]]) unaddressed in the last 6 months.<br />
<br />
{| class="wikitable sortable" width="100%"<br />
! Name !! Written In !! Secure !! Clean build !! Native pacman !! Reliable parser !! Reliable solver !! Split packages !! Git clone !! Diff view !! Batch interaction || Shell completion !! Specificity<br />
|-<br />
! {{AUR|aurel}} [https://bbs.archlinux.org/viewtopic.php?pid=1522459#p1522459]<br />
| Emacs Lisp || {{Yes}} || {{Grey|N/A}} || {{Grey|N/A}} || {{Grey|N/A}} || {{Grey|N/A}} || {{Grey|N/A}} || {{No}} || {{Grey|N/A}} || {{Grey|N/A}} || style="text-align:center;" | N/A || Emacs integration, no automatic builds<br />
|-<br />
! {{AUR|pacaur}} [https://bbs.archlinux.org/viewtopic.php?pid=1755144#p1755144]<br />
| Bash/C || {{Yes}} || {{Yes}} || {{R|[https://github.com/rmarquis/pacaur/commit/d8f49188452785fb28afc017baadd01d9e24ba21 No]}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || style="text-align:center;" | bash, zsh || multilingual, sort by votes/popularity<br />
|-<br />
! {{AUR|trizen}}<br />
| Perl || {{Yes}} || {{Yes}} || {{R|[https://github.com/trizen/trizen/commit/ba687bc3c3e306e6f3942e95f825ed6a55d3ad69 No]}} || {{G|[https://github.com/trizen/trizen/commit/7ab7ee5f9f1f5d971b731d092fc8e1dd963add4b Yes]}} || {{Yes}} || {{G|[https://github.com/trizen/trizen/commit/3c94434c66ede793758f2bf7de84d68e3174e2ac Yes]}} || {{G|[https://github.com/trizen/trizen/commit/6fb0cc9e0ab66b8cca9493b0618ba4bab5fd2252 Yes]}} || {{Yes}} || {{Y|[https://github.com/trizen/trizen/issues/8 Partial]}} || style="text-align:center;" | bash, zsh, fish || Automatic builds by default, use {{ic|-G}} to disable, AUR comments<br />
|-<br />
! {{AUR|spinach}} [https://github.com/floft/spinach]<br />
| Bash || {{G|[https://github.com/floft/spinach/commit/545574700812eb369b9537370f085ec9e5c3f01a Yes]}} || {{Yes}} || {{Grey|N/A}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || style="text-align:center;" | None || -<br />
|-<br />
! {{AUR|burgaur}} [https://github.com/m45t3r/burgaur/issues/7#issuecomment-365599675]<br />
| Python/C || {{Y|Optional}} || {{Yes}} || {{Grey|N/A}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || style="text-align:center;" | None || Wrapper for ''cower''<br />
|-<br />
! {{AUR|packer}}<br />
| Bash || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || style="text-align:center;" | None || -<br />
|-<br />
! {{AUR|yaourt}}<br />
| Bash/C || {{No}} [https://github.com/archlinuxfr/yaourt/blob/f373121d23d87031a24135fee593115832d803ec/src/lib/aur.sh#L47] [https://github.com/archlinuxfr/yaourt/blob/d9790e29cd7194535c793f51d185b7130a396916/src/lib/pkgbuild.sh.in#L415-L438] || {{R|[https://lists.archlinux.org/pipermail/aur-general/2015-August/031314.html No]}} || {{No}} || {{No}} || {{R|[https://github.com/archlinuxfr/yaourt/issues/186 No]}} || {{R|[https://github.com/archlinuxfr/yaourt/issues/85 No]}} || {{Y|Optional}} || {{Y|Optional}} || {{No}} || style="text-align:center;" | bash, zsh, fish || Backup, ABS support, AUR comments, multilingual<br />
|-<br />
|}<br />
<br />
== Libraries ==<br />
<br />
* {{App|haskell-archlinux|Library to access the AUR and package metadata from the Haskell programming language|http://hackage.haskell.org/package/archlinux|{{AUR|haskell-archlinux}}}}<br />
<br />
* {{App|python3-aur|Python 3 modules for accessing AUR package information and automating AUR interactions.|http://xyne.archlinux.ca/projects/python3-aur|{{AUR|python3-aur}}}}<br />
<br />
== Maintenance ==<br />
<br />
* {{App|aur-out-of-date|Uses hoster APIs to check AUR packages for upstream changes|https://github.com/simon04/aur-out-of-date|{{AUR|aur-out-of-date}}}}<br />
<br />
* {{App|pkgbuild-watch|Looks for changes on the upstream web pages|http://kmkeen.com/pkgbuild-watch|{{AUR|pkgbuild-watch}}}}<br />
<br />
* {{App|pkgbuildup|Helps AUR package maintainers automatically update PKGBUILD files. Supports a template variable syntax.|https://github.com/fasheng/pkgbuildup|{{AUR|pkgbuildup-git}}}}<br />
<br />
* {{App|pkgoutofdate|Parses the source URL from PKGBUILDs and tries to find new versions of packages by incrementing the version number and sending requests to the web server|https://github.com/anatol/pkgoutofdate|{{AUR|pkgoutofdate-git}}}}<br />
<br />
== Uploading ==<br />
<br />
* [https://github.com/JonnyJD/PKGBUILDs/blob/master/_bin/aur4_import.sh aur4_import.sh] — Splits a package from a git repository with multiple packages, adding/updating {{ic|.SRCINFO}} for every commit.<br />
* [https://github.com/JonnyJD/PKGBUILDs/blob/master/_bin/aur4_make_submodule.sh aur4_make_submodule.sh] — Replaces a package in a bigger git repository with an AUR 4 submodule, including {{ic|.SRCINFO}}.<br />
* [https://github.com/Edenhofer/abs/blob/master/aurpublish aurpublish] — Manage AUR packages as [https://raw.githubusercontent.com/git/git/master/contrib/subtree/git-subtree.txt git subtrees]. The [https://github.com/Edenhofer/abs/blob/master/pre-commit.hook generation of {{ic|.SRCINFO}} files, {{ic|PKGBUILD}} checking] and the [https://github.com/Edenhofer/abs/blob/master/prepare-commit-msg.hook creation of a per package commit message template] is left to the git hooks in the same [https://github.com/Edenhofer/abs/blob/master/README.md repo].</div>Scrumplex