<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rhizoome</id>
	<title>Alpine Linux - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rhizoome"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Rhizoome"/>
	<updated>2026-05-05T14:29:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=30613</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=30613"/>
		<updated>2025-07-28T11:53:34Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify your config file to have a line as follows: {{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;xwayland:enabled = false&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent icon theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors (e.g. rose-pine-hyprcursor).&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
If you use gsettings make sure you have installed {{pkg|gsettings-desktop-schemas}} package.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== hyprland-plugin-manager ===&lt;br /&gt;
&lt;br /&gt;
From Alpine v3.22 on the &#039;&#039;hyprland-plugin-manager&#039;&#039; package is available. It installs the complete development-tree of hyprland, since it requires to compile hyprland. It is possible to uninstall &#039;&#039;hyprland-plugin-manager&#039;&#039; after the plugin is compiled.&lt;br /&gt;
&lt;br /&gt;
=== hyrpland-plugins ===&lt;br /&gt;
&lt;br /&gt;
From Alpine v3.23 (not yet released) on or on &#039;&#039;edge&#039;&#039; it is possible to install the [https://github.com/hyprwm/hyprland-plugins official plugins] as a [https://pkgs.alpinelinux.org/package/edge/community/x86_64/hyprland-plugins package]. Checkout the subpackages to install individual plugins.&lt;br /&gt;
&lt;br /&gt;
=== loading plugins ===&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;plugin = /usr/lib/libhyprexpo.so&lt;br /&gt;
plugin {&lt;br /&gt;
    hyprexpo {&lt;br /&gt;
            columns = 3&lt;br /&gt;
            gap_size = 0&lt;br /&gt;
            workspace_method = first 1&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This is also useful if you have uninstalled &#039;&#039;hyprland-plugin-manager&#039;&#039; and you can&#039;t load the plugin via it.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=30612</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=30612"/>
		<updated>2025-07-28T11:50:48Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: /* hyrpland-plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify your config file to have a line as follows: {{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;xwayland:enabled = false&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent icon theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors (e.g. rose-pine-hyprcursor).&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
If you use gsettings make sure you have installed {{pkg|gsettings-desktop-schemas}} package.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== hyprland-plugin-manager ===&lt;br /&gt;
&lt;br /&gt;
From Alpine v3.22 on the &#039;&#039;hyprland-plugin-manager&#039;&#039; package is available. It installs the complete development-tree of hyprland, since it requires to compile hyprland. It is possible to uninstall &#039;&#039;hyprland-plugin-manager&#039;&#039; after the plugin is compiled.&lt;br /&gt;
&lt;br /&gt;
=== hyrpland-plugins ===&lt;br /&gt;
&lt;br /&gt;
From Alpine v3.23 (not yet released) on or on edge it is possible to install the [https://github.com/hyprwm/hyprland-plugins official plugins] as a [https://pkgs.alpinelinux.org/package/edge/community/x86_64/hyprland-plugins package]. Checkout the subpackages to install individual plugins.&lt;br /&gt;
&lt;br /&gt;
=== loading plugins ===&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;plugin = /usr/lib/libhyprexpo.so&lt;br /&gt;
plugin {&lt;br /&gt;
    hyprexpo {&lt;br /&gt;
            columns = 3&lt;br /&gt;
            gap_size = 0&lt;br /&gt;
            workspace_method = first 1&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This is also useful if you have uninstalled &#039;&#039;hyprland-plugin-manager&#039;&#039; and you can&#039;t load the plugin via it.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=30611</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=30611"/>
		<updated>2025-07-28T11:49:19Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify your config file to have a line as follows: {{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;xwayland:enabled = false&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent icon theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors (e.g. rose-pine-hyprcursor).&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
If you use gsettings make sure you have installed {{pkg|gsettings-desktop-schemas}} package.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== hyprland-plugin-manager ===&lt;br /&gt;
&lt;br /&gt;
From Alpine v3.22 on the &#039;&#039;hyprland-plugin-manager&#039;&#039; package is available. It installs the complete development-tree of hyprland, since it requires to compile hyprland. It is possible to uninstall &#039;&#039;hyprland-plugin-manager&#039;&#039; after the plugin is compiled.&lt;br /&gt;
&lt;br /&gt;
=== hyrpland-plugins ===&lt;br /&gt;
&lt;br /&gt;
From Alpine v3.23 (not yet released) on or on edge it is possible to install the [https://github.com/hyprwm/hyprland-plugins official plugins] as a [https://pkgs.alpinelinux.org/package/edge/community/x86_64/hyprland-plugins package].&lt;br /&gt;
&lt;br /&gt;
=== loading plugins ===&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;nowiki&amp;gt;plugin = /usr/lib/libhyprexpo.so&lt;br /&gt;
plugin {&lt;br /&gt;
    hyprexpo {&lt;br /&gt;
            columns = 3&lt;br /&gt;
            gap_size = 0&lt;br /&gt;
            workspace_method = first 1&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This is also useful if you have uninstalled &#039;&#039;hyprland-plugin-manager&#039;&#039; and you can&#039;t load the plugin via it.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:Seatd&amp;diff=29762</id>
		<title>Talk:Seatd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:Seatd&amp;diff=29762"/>
		<updated>2025-05-03T11:10:34Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: Created page with &amp;quot;@Prabuanand - Your explanation of the difference between seatd and elogind is clear and the examples show how rules need to be defined. Thank you very much. ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@Prabuanand - Your explanation of the difference between seatd and elogind is clear and the examples show how rules need to be defined. Thank you very much. [[User:Rhizoome|Rhizoome]] ([[User talk:Rhizoome|talk]]) 11:10, 3 May 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29666</id>
		<title>Seatd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29666"/>
		<updated>2025-04-10T19:36:53Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://man.sr.ht/~kennylevinsen/seatd/ Seatd] is a [[Seat manager|seat management]] daemon, that does everything it needs to do. Nothing more, nothing less. Depends only on libc. Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root.&lt;br /&gt;
&lt;br /&gt;
When using [[elogind]], seatd is not required and viceversa. Don&#039;t add both to auto-start.&lt;br /&gt;
&lt;br /&gt;
{{note|Reading about seatd and elogind, you might get the impression that elogind is required for polkit. But seatd/polkit works fine if you use groups in the polkit rules, only for &amp;quot;subject.active&amp;quot; elogind is required. Which means with seatd you are restricted to YES or NO rules, no AUTH_ADMIN, since agents need POLKIT_IS_SUBJECT.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add {{Pkg|seatd}}       # install seatd&lt;br /&gt;
rc-update add seatd # configure it to auto-start&lt;br /&gt;
service seatd start # start it now&lt;br /&gt;
adduser $USER seat  # allow current user to access seatd&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you are already logged in as a &amp;lt;code&amp;gt;$USER&amp;lt;/code&amp;gt;, you will need to relogin.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
When seatd is used with [[Wayland]], ensure that the following two mandatory steps are completed.&lt;br /&gt;
&lt;br /&gt;
* Set the variable [[XDG_RUNTIME_DIR]]. &lt;br /&gt;
* The following environment variables needs to be set:&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_SESSION_TYPE=wayland&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;LIBSEAT_BACKEND=seatd&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP=sway&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP&amp;lt;/code&amp;gt; must be suitably adjusted if a different [[:Category:Compositor|Compositor]] is used.&lt;br /&gt;
&lt;br /&gt;
== Seatd and sway ==&lt;br /&gt;
&lt;br /&gt;
When using seatd, adding the following lines to {{Path|~/.profile}} or other shell specific profile file will launch Sway automatically with and [[D-Bus]] only in tty1. {{Cat|~/.profile|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
#start sway with DBUS (only in tty1) &lt;br /&gt;
if [ &amp;quot;$(tty)&amp;quot; = &amp;quot;/dev/tty1&amp;quot; ]; then&lt;br /&gt;
     exec dbus-run-session sway &lt;br /&gt;
fi&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Instead of depending on {{Path|.profile}} or their equivalent files a [[Sway#Starting_sway|wrapper script]] can also be used.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://man.sr.ht/~kennylevinsen/seatd/ seatd documentation]&lt;br /&gt;
* [https://github.com/swaywm/sway/wiki/Setting-environmental-variables sway wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Seat_manager]]&lt;br /&gt;
[[Category:Wayland]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29665</id>
		<title>Seatd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29665"/>
		<updated>2025-04-10T19:36:19Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://man.sr.ht/~kennylevinsen/seatd/ Seatd] is a [[Seat manager|seat management]] daemon, that does everything it needs to do. Nothing more, nothing less. Depends only on libc. Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root.&lt;br /&gt;
&lt;br /&gt;
When using [[elogind]], seatd is not required and viceversa. Don&#039;t add both to auto-start.&lt;br /&gt;
&lt;br /&gt;
{{note|Reading about seatd and elogind, you might get the impression that elogind is required for polkit. But seatd/polkit works fine if you use groups in the polkit rules, only for &amp;quot;subject.active&amp;quot; elogind is required. Which means with seatd you are restricted to YES or NO rules, no AUTH_ADMIN, since agents need POLKIT_IS_ACTIVE.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add {{Pkg|seatd}}       # install seatd&lt;br /&gt;
rc-update add seatd # configure it to auto-start&lt;br /&gt;
service seatd start # start it now&lt;br /&gt;
adduser $USER seat  # allow current user to access seatd&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you are already logged in as a &amp;lt;code&amp;gt;$USER&amp;lt;/code&amp;gt;, you will need to relogin.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
When seatd is used with [[Wayland]], ensure that the following two mandatory steps are completed.&lt;br /&gt;
&lt;br /&gt;
* Set the variable [[XDG_RUNTIME_DIR]]. &lt;br /&gt;
* The following environment variables needs to be set:&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_SESSION_TYPE=wayland&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;LIBSEAT_BACKEND=seatd&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP=sway&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP&amp;lt;/code&amp;gt; must be suitably adjusted if a different [[:Category:Compositor|Compositor]] is used.&lt;br /&gt;
&lt;br /&gt;
== Seatd and sway ==&lt;br /&gt;
&lt;br /&gt;
When using seatd, adding the following lines to {{Path|~/.profile}} or other shell specific profile file will launch Sway automatically with and [[D-Bus]] only in tty1. {{Cat|~/.profile|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
#start sway with DBUS (only in tty1) &lt;br /&gt;
if [ &amp;quot;$(tty)&amp;quot; = &amp;quot;/dev/tty1&amp;quot; ]; then&lt;br /&gt;
     exec dbus-run-session sway &lt;br /&gt;
fi&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Instead of depending on {{Path|.profile}} or their equivalent files a [[Sway#Starting_sway|wrapper script]] can also be used.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://man.sr.ht/~kennylevinsen/seatd/ seatd documentation]&lt;br /&gt;
* [https://github.com/swaywm/sway/wiki/Setting-environmental-variables sway wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Seat_manager]]&lt;br /&gt;
[[Category:Wayland]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29663</id>
		<title>MDNS</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29663"/>
		<updated>2025-04-09T17:20:21Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mDNS}}&lt;br /&gt;
[https://en.wikipedia.org/wiki/Multicast_DNS Multicast DNS] is a protocol that is normally used for the discovery of printers.  Avahi is a popular implementation by but more setup is needed for the regular name resolution to see the results.&lt;br /&gt;
&lt;br /&gt;
{{warning|There might be in issue in ipv4/ipv6 dual-setups. [https://github.com/LouisBrunner/avahi2dns/issues/21 Check this issue.] [https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/82560 Fixed with this MR.] Note the added --timeout 2.5s.}}&lt;br /&gt;
&lt;br /&gt;
== Setup avahi ==&lt;br /&gt;
&lt;br /&gt;
Install, enable and start avahi with:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi}}&lt;br /&gt;
doas rc-update add avahi-daemon&lt;br /&gt;
doas rc-service avahi-daemon start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to browse results. To look for a printer, use:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi-tools}}&lt;br /&gt;
avahi-browse --resolve --terminate  _ipp._tcp}}&lt;br /&gt;
&lt;br /&gt;
Make note of the hostname, as we will use it afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setup avahi2dns ==&lt;br /&gt;
&lt;br /&gt;
Name resolution is implemented by musl, and it only supports DNS, so we have to map the avahi results to a regular DNS server. This is done by avahi2dns.&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi2dns}}}}&lt;br /&gt;
&lt;br /&gt;
since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. This is done by default with {{path|/etc/conf.d/avahi2dns}} containing:&lt;br /&gt;
&lt;br /&gt;
  command_args=&amp;quot;-p 5354&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable and start avahi2dns with&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add avahi2dns&lt;br /&gt;
doas rc-service avahi2dns start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to use DNS to query the address of the printer.&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill -p 5354 @127.0.0.1 &amp;lt;printer_name&amp;gt;.local}}&lt;br /&gt;
&lt;br /&gt;
Where printer_name is the hostname given by avahi-browse.&lt;br /&gt;
&lt;br /&gt;
== Setup Networkmanager ==&lt;br /&gt;
&lt;br /&gt;
If you are already using networkmanager, you can leverage {{pkg|dnsmasq}} as your DNS server which can easily forward mDNS requests to another server.&lt;br /&gt;
&lt;br /&gt;
Install the {{pkg|networkmanager-dnsmasq}} package:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|networkmanager-dnsmasq}}}}&lt;br /&gt;
&lt;br /&gt;
Configure networkmanager to use dnsmasq as it&#039;s dns server by editing {{path|/etc/NetworkManager/NetworkManager.conf}}&lt;br /&gt;
&lt;br /&gt;
  [main] &lt;br /&gt;
  dhcp=internal&lt;br /&gt;
  dns=dnsmasq&lt;br /&gt;
&lt;br /&gt;
Then we need to tell dnsmasq to forward all mDNS queries to avahidns {{path|/etc/NetworkManager/dnsmasq.d/mdns.conf}}:&lt;br /&gt;
&lt;br /&gt;
  # Forward queries for the &amp;quot;local&amp;quot; domain to 127.0.0.1 port 5354&lt;br /&gt;
  server=/local/127.0.0.1#5354&lt;br /&gt;
&lt;br /&gt;
Restart networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
== Without NetworkManager ==&lt;br /&gt;
&lt;br /&gt;
=== Setup DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.&lt;br /&gt;
&lt;br /&gt;
Install the programs:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|openresolv}} {{pkg|unbound}}}}&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/resolvconf.conf}}:&lt;br /&gt;
&lt;br /&gt;
  name_servers=127.0.0.1&lt;br /&gt;
  unbound_conf=/etc/unbound/unbound.conf.d/resolvconf.conf&lt;br /&gt;
&lt;br /&gt;
This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/unbound/unbound.conf.d/avahi-local.conf}}:&lt;br /&gt;
&lt;br /&gt;
  forward-zone:&lt;br /&gt;
        name: &amp;quot;local&amp;quot;&lt;br /&gt;
        forward-addr: 127.0.0.1@5354&lt;br /&gt;
  server:&lt;br /&gt;
        do-not-query-localhost: no&lt;br /&gt;
        domain-insecure: &amp;quot;local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This reads the information provided by resolvconf, but forwards .local requests to avahi2dns. We also need to disable dnssec for .local and tell unbound that it is OK to query localhost.&lt;br /&gt;
&lt;br /&gt;
Enable and start unbound&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add unbound&lt;br /&gt;
doas rc-service unbound start}}&lt;br /&gt;
&lt;br /&gt;
=== Using bind(named) as DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
It is assumed that bind(named) is already installed and running, if not, then you can use the instructions[[https://wiki.alpinelinux.org/wiki/Small-Time_DNS_with_BIND9]]&lt;br /&gt;
&lt;br /&gt;
If you already have a bind(named) server configured, then the solution is to set an access &amp;quot;zone&amp;quot; for postfix addresses.local&lt;br /&gt;
&lt;br /&gt;
To do this, add the following lines to the bind configuration file (by default, the /etc/bind/named.conf file is used):&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;local&amp;quot; {&lt;br /&gt;
   type forward; # type requests&lt;br /&gt;
   forward only; # rule to use only forwards&lt;br /&gt;
   forwarders {&lt;br /&gt;
     127.0.0.1 port 5354; # Avahi2dns adress and port&lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Additionally, you may need to disable dnssec verification for the .local postfix. To do this, add the following lines inside the options configuration:&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
 ...&lt;br /&gt;
   validate-except {&lt;br /&gt;
     &amp;quot;local&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 ...&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
After adding the configuration, double-check that you have a .local zone. To do this, use the command:&lt;br /&gt;
&lt;br /&gt;
 named-checkconf -l # OUTPUT: local IN _default forward&lt;br /&gt;
&lt;br /&gt;
If there were no errors, you can reload the bind(named) service:&lt;br /&gt;
&lt;br /&gt;
 rc-service named reload&lt;br /&gt;
&lt;br /&gt;
=== Setup DHCP client ===&lt;br /&gt;
&lt;br /&gt;
How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.&lt;br /&gt;
&lt;br /&gt;
==== udhcpc ====&lt;br /&gt;
&lt;br /&gt;
This is the DHCP client in busybox, and will work for both wired and wireless interfaces. &lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/udhcpc.conf}}:&lt;br /&gt;
&lt;br /&gt;
  RESOLV_CONF=&amp;quot;/etc/udhcpc-resolv.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/post-bound/resolvconf}}:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  cat /etc/udhcpc-resolv.conf | resolvconf -a $interface&lt;br /&gt;
&lt;br /&gt;
and make it executable&lt;br /&gt;
&lt;br /&gt;
{{cmd|chmod 755 /etc/udhcpc/post-bound/resolvconf}}&lt;br /&gt;
&lt;br /&gt;
An inconvenience of this setup is that udhcpc will not reconfigure the interface when connecting to other wifi networks. For that to happen one has to run&lt;br /&gt;
&lt;br /&gt;
{{cmd|iwctl station wlan0 connect &amp;lt;network_name&amp;gt;&lt;br /&gt;
doas kill -USR2 $(cat  /run/udhcpc.wlan0.pid)&lt;br /&gt;
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}&lt;br /&gt;
&lt;br /&gt;
==== iwd ====&lt;br /&gt;
&lt;br /&gt;
To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:&lt;br /&gt;
&lt;br /&gt;
  [General]&lt;br /&gt;
  EnableNetworkConfiguration=True&lt;br /&gt;
&lt;br /&gt;
  [Network]&lt;br /&gt;
  NameResolvingService=resolvconf&lt;br /&gt;
&lt;br /&gt;
== Test the setup ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to query for both the printer address and regular addresses with&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill @127.0.0.1 &amp;lt;printer_name&amp;gt;.local&lt;br /&gt;
drill @127.0.0.1 alpinelinux.org}}&lt;br /&gt;
&lt;br /&gt;
Your {{path|/etc/resolv.conf}} should also contain&lt;br /&gt;
&lt;br /&gt;
  nameserver 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Printer discovery should now be working.&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29662</id>
		<title>MDNS</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29662"/>
		<updated>2025-04-09T17:20:07Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mDNS}}&lt;br /&gt;
[https://en.wikipedia.org/wiki/Multicast_DNS Multicast DNS] is a protocol that is normally used for the discovery of printers.  Avahi is a popular implementation by but more setup is needed for the regular name resolution to see the results.&lt;br /&gt;
&lt;br /&gt;
{{warning|There might be in issue in ipv4/ipv6 dual-setups. [https://github.com/LouisBrunner/avahi2dns/issues/21 Check this issue.] [https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/82560 Fixed with this issue.] Note the added --timeout 2.5s.}}&lt;br /&gt;
&lt;br /&gt;
== Setup avahi ==&lt;br /&gt;
&lt;br /&gt;
Install, enable and start avahi with:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi}}&lt;br /&gt;
doas rc-update add avahi-daemon&lt;br /&gt;
doas rc-service avahi-daemon start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to browse results. To look for a printer, use:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi-tools}}&lt;br /&gt;
avahi-browse --resolve --terminate  _ipp._tcp}}&lt;br /&gt;
&lt;br /&gt;
Make note of the hostname, as we will use it afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setup avahi2dns ==&lt;br /&gt;
&lt;br /&gt;
Name resolution is implemented by musl, and it only supports DNS, so we have to map the avahi results to a regular DNS server. This is done by avahi2dns.&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi2dns}}}}&lt;br /&gt;
&lt;br /&gt;
since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. This is done by default with {{path|/etc/conf.d/avahi2dns}} containing:&lt;br /&gt;
&lt;br /&gt;
  command_args=&amp;quot;-p 5354&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable and start avahi2dns with&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add avahi2dns&lt;br /&gt;
doas rc-service avahi2dns start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to use DNS to query the address of the printer.&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill -p 5354 @127.0.0.1 &amp;lt;printer_name&amp;gt;.local}}&lt;br /&gt;
&lt;br /&gt;
Where printer_name is the hostname given by avahi-browse.&lt;br /&gt;
&lt;br /&gt;
== Setup Networkmanager ==&lt;br /&gt;
&lt;br /&gt;
If you are already using networkmanager, you can leverage {{pkg|dnsmasq}} as your DNS server which can easily forward mDNS requests to another server.&lt;br /&gt;
&lt;br /&gt;
Install the {{pkg|networkmanager-dnsmasq}} package:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|networkmanager-dnsmasq}}}}&lt;br /&gt;
&lt;br /&gt;
Configure networkmanager to use dnsmasq as it&#039;s dns server by editing {{path|/etc/NetworkManager/NetworkManager.conf}}&lt;br /&gt;
&lt;br /&gt;
  [main] &lt;br /&gt;
  dhcp=internal&lt;br /&gt;
  dns=dnsmasq&lt;br /&gt;
&lt;br /&gt;
Then we need to tell dnsmasq to forward all mDNS queries to avahidns {{path|/etc/NetworkManager/dnsmasq.d/mdns.conf}}:&lt;br /&gt;
&lt;br /&gt;
  # Forward queries for the &amp;quot;local&amp;quot; domain to 127.0.0.1 port 5354&lt;br /&gt;
  server=/local/127.0.0.1#5354&lt;br /&gt;
&lt;br /&gt;
Restart networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
== Without NetworkManager ==&lt;br /&gt;
&lt;br /&gt;
=== Setup DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.&lt;br /&gt;
&lt;br /&gt;
Install the programs:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|openresolv}} {{pkg|unbound}}}}&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/resolvconf.conf}}:&lt;br /&gt;
&lt;br /&gt;
  name_servers=127.0.0.1&lt;br /&gt;
  unbound_conf=/etc/unbound/unbound.conf.d/resolvconf.conf&lt;br /&gt;
&lt;br /&gt;
This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/unbound/unbound.conf.d/avahi-local.conf}}:&lt;br /&gt;
&lt;br /&gt;
  forward-zone:&lt;br /&gt;
        name: &amp;quot;local&amp;quot;&lt;br /&gt;
        forward-addr: 127.0.0.1@5354&lt;br /&gt;
  server:&lt;br /&gt;
        do-not-query-localhost: no&lt;br /&gt;
        domain-insecure: &amp;quot;local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This reads the information provided by resolvconf, but forwards .local requests to avahi2dns. We also need to disable dnssec for .local and tell unbound that it is OK to query localhost.&lt;br /&gt;
&lt;br /&gt;
Enable and start unbound&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add unbound&lt;br /&gt;
doas rc-service unbound start}}&lt;br /&gt;
&lt;br /&gt;
=== Using bind(named) as DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
It is assumed that bind(named) is already installed and running, if not, then you can use the instructions[[https://wiki.alpinelinux.org/wiki/Small-Time_DNS_with_BIND9]]&lt;br /&gt;
&lt;br /&gt;
If you already have a bind(named) server configured, then the solution is to set an access &amp;quot;zone&amp;quot; for postfix addresses.local&lt;br /&gt;
&lt;br /&gt;
To do this, add the following lines to the bind configuration file (by default, the /etc/bind/named.conf file is used):&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;local&amp;quot; {&lt;br /&gt;
   type forward; # type requests&lt;br /&gt;
   forward only; # rule to use only forwards&lt;br /&gt;
   forwarders {&lt;br /&gt;
     127.0.0.1 port 5354; # Avahi2dns adress and port&lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Additionally, you may need to disable dnssec verification for the .local postfix. To do this, add the following lines inside the options configuration:&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
 ...&lt;br /&gt;
   validate-except {&lt;br /&gt;
     &amp;quot;local&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 ...&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
After adding the configuration, double-check that you have a .local zone. To do this, use the command:&lt;br /&gt;
&lt;br /&gt;
 named-checkconf -l # OUTPUT: local IN _default forward&lt;br /&gt;
&lt;br /&gt;
If there were no errors, you can reload the bind(named) service:&lt;br /&gt;
&lt;br /&gt;
 rc-service named reload&lt;br /&gt;
&lt;br /&gt;
=== Setup DHCP client ===&lt;br /&gt;
&lt;br /&gt;
How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.&lt;br /&gt;
&lt;br /&gt;
==== udhcpc ====&lt;br /&gt;
&lt;br /&gt;
This is the DHCP client in busybox, and will work for both wired and wireless interfaces. &lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/udhcpc.conf}}:&lt;br /&gt;
&lt;br /&gt;
  RESOLV_CONF=&amp;quot;/etc/udhcpc-resolv.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/post-bound/resolvconf}}:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  cat /etc/udhcpc-resolv.conf | resolvconf -a $interface&lt;br /&gt;
&lt;br /&gt;
and make it executable&lt;br /&gt;
&lt;br /&gt;
{{cmd|chmod 755 /etc/udhcpc/post-bound/resolvconf}}&lt;br /&gt;
&lt;br /&gt;
An inconvenience of this setup is that udhcpc will not reconfigure the interface when connecting to other wifi networks. For that to happen one has to run&lt;br /&gt;
&lt;br /&gt;
{{cmd|iwctl station wlan0 connect &amp;lt;network_name&amp;gt;&lt;br /&gt;
doas kill -USR2 $(cat  /run/udhcpc.wlan0.pid)&lt;br /&gt;
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}&lt;br /&gt;
&lt;br /&gt;
==== iwd ====&lt;br /&gt;
&lt;br /&gt;
To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:&lt;br /&gt;
&lt;br /&gt;
  [General]&lt;br /&gt;
  EnableNetworkConfiguration=True&lt;br /&gt;
&lt;br /&gt;
  [Network]&lt;br /&gt;
  NameResolvingService=resolvconf&lt;br /&gt;
&lt;br /&gt;
== Test the setup ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to query for both the printer address and regular addresses with&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill @127.0.0.1 &amp;lt;printer_name&amp;gt;.local&lt;br /&gt;
drill @127.0.0.1 alpinelinux.org}}&lt;br /&gt;
&lt;br /&gt;
Your {{path|/etc/resolv.conf}} should also contain&lt;br /&gt;
&lt;br /&gt;
  nameserver 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Printer discovery should now be working.&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29661</id>
		<title>MDNS</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29661"/>
		<updated>2025-04-09T17:19:47Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mDNS}}&lt;br /&gt;
[https://en.wikipedia.org/wiki/Multicast_DNS Multicast DNS] is a protocol that is normally used for the discovery of printers.  Avahi is a popular implementation by but more setup is needed for the regular name resolution to see the results.&lt;br /&gt;
&lt;br /&gt;
{{warning|There might be in issue in ipv4/ipv6 dual-setups. [https://github.com/LouisBrunner/avahi2dns/issues/21 Check this issue.] [https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/82560 Fixed with this issue.] Note the added --timeout 2.5s.}&lt;br /&gt;
&lt;br /&gt;
== Setup avahi ==&lt;br /&gt;
&lt;br /&gt;
Install, enable and start avahi with:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi}}&lt;br /&gt;
doas rc-update add avahi-daemon&lt;br /&gt;
doas rc-service avahi-daemon start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to browse results. To look for a printer, use:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi-tools}}&lt;br /&gt;
avahi-browse --resolve --terminate  _ipp._tcp}}&lt;br /&gt;
&lt;br /&gt;
Make note of the hostname, as we will use it afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setup avahi2dns ==&lt;br /&gt;
&lt;br /&gt;
Name resolution is implemented by musl, and it only supports DNS, so we have to map the avahi results to a regular DNS server. This is done by avahi2dns.&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi2dns}}}}&lt;br /&gt;
&lt;br /&gt;
since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. This is done by default with {{path|/etc/conf.d/avahi2dns}} containing:&lt;br /&gt;
&lt;br /&gt;
  command_args=&amp;quot;-p 5354&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable and start avahi2dns with&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add avahi2dns&lt;br /&gt;
doas rc-service avahi2dns start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to use DNS to query the address of the printer.&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill -p 5354 @127.0.0.1 &amp;lt;printer_name&amp;gt;.local}}&lt;br /&gt;
&lt;br /&gt;
Where printer_name is the hostname given by avahi-browse.&lt;br /&gt;
&lt;br /&gt;
== Setup Networkmanager ==&lt;br /&gt;
&lt;br /&gt;
If you are already using networkmanager, you can leverage {{pkg|dnsmasq}} as your DNS server which can easily forward mDNS requests to another server.&lt;br /&gt;
&lt;br /&gt;
Install the {{pkg|networkmanager-dnsmasq}} package:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|networkmanager-dnsmasq}}}}&lt;br /&gt;
&lt;br /&gt;
Configure networkmanager to use dnsmasq as it&#039;s dns server by editing {{path|/etc/NetworkManager/NetworkManager.conf}}&lt;br /&gt;
&lt;br /&gt;
  [main] &lt;br /&gt;
  dhcp=internal&lt;br /&gt;
  dns=dnsmasq&lt;br /&gt;
&lt;br /&gt;
Then we need to tell dnsmasq to forward all mDNS queries to avahidns {{path|/etc/NetworkManager/dnsmasq.d/mdns.conf}}:&lt;br /&gt;
&lt;br /&gt;
  # Forward queries for the &amp;quot;local&amp;quot; domain to 127.0.0.1 port 5354&lt;br /&gt;
  server=/local/127.0.0.1#5354&lt;br /&gt;
&lt;br /&gt;
Restart networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
== Without NetworkManager ==&lt;br /&gt;
&lt;br /&gt;
=== Setup DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.&lt;br /&gt;
&lt;br /&gt;
Install the programs:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|openresolv}} {{pkg|unbound}}}}&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/resolvconf.conf}}:&lt;br /&gt;
&lt;br /&gt;
  name_servers=127.0.0.1&lt;br /&gt;
  unbound_conf=/etc/unbound/unbound.conf.d/resolvconf.conf&lt;br /&gt;
&lt;br /&gt;
This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/unbound/unbound.conf.d/avahi-local.conf}}:&lt;br /&gt;
&lt;br /&gt;
  forward-zone:&lt;br /&gt;
        name: &amp;quot;local&amp;quot;&lt;br /&gt;
        forward-addr: 127.0.0.1@5354&lt;br /&gt;
  server:&lt;br /&gt;
        do-not-query-localhost: no&lt;br /&gt;
        domain-insecure: &amp;quot;local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This reads the information provided by resolvconf, but forwards .local requests to avahi2dns. We also need to disable dnssec for .local and tell unbound that it is OK to query localhost.&lt;br /&gt;
&lt;br /&gt;
Enable and start unbound&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add unbound&lt;br /&gt;
doas rc-service unbound start}}&lt;br /&gt;
&lt;br /&gt;
=== Using bind(named) as DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
It is assumed that bind(named) is already installed and running, if not, then you can use the instructions[[https://wiki.alpinelinux.org/wiki/Small-Time_DNS_with_BIND9]]&lt;br /&gt;
&lt;br /&gt;
If you already have a bind(named) server configured, then the solution is to set an access &amp;quot;zone&amp;quot; for postfix addresses.local&lt;br /&gt;
&lt;br /&gt;
To do this, add the following lines to the bind configuration file (by default, the /etc/bind/named.conf file is used):&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;local&amp;quot; {&lt;br /&gt;
   type forward; # type requests&lt;br /&gt;
   forward only; # rule to use only forwards&lt;br /&gt;
   forwarders {&lt;br /&gt;
     127.0.0.1 port 5354; # Avahi2dns adress and port&lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Additionally, you may need to disable dnssec verification for the .local postfix. To do this, add the following lines inside the options configuration:&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
 ...&lt;br /&gt;
   validate-except {&lt;br /&gt;
     &amp;quot;local&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 ...&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
After adding the configuration, double-check that you have a .local zone. To do this, use the command:&lt;br /&gt;
&lt;br /&gt;
 named-checkconf -l # OUTPUT: local IN _default forward&lt;br /&gt;
&lt;br /&gt;
If there were no errors, you can reload the bind(named) service:&lt;br /&gt;
&lt;br /&gt;
 rc-service named reload&lt;br /&gt;
&lt;br /&gt;
=== Setup DHCP client ===&lt;br /&gt;
&lt;br /&gt;
How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.&lt;br /&gt;
&lt;br /&gt;
==== udhcpc ====&lt;br /&gt;
&lt;br /&gt;
This is the DHCP client in busybox, and will work for both wired and wireless interfaces. &lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/udhcpc.conf}}:&lt;br /&gt;
&lt;br /&gt;
  RESOLV_CONF=&amp;quot;/etc/udhcpc-resolv.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/post-bound/resolvconf}}:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  cat /etc/udhcpc-resolv.conf | resolvconf -a $interface&lt;br /&gt;
&lt;br /&gt;
and make it executable&lt;br /&gt;
&lt;br /&gt;
{{cmd|chmod 755 /etc/udhcpc/post-bound/resolvconf}}&lt;br /&gt;
&lt;br /&gt;
An inconvenience of this setup is that udhcpc will not reconfigure the interface when connecting to other wifi networks. For that to happen one has to run&lt;br /&gt;
&lt;br /&gt;
{{cmd|iwctl station wlan0 connect &amp;lt;network_name&amp;gt;&lt;br /&gt;
doas kill -USR2 $(cat  /run/udhcpc.wlan0.pid)&lt;br /&gt;
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}&lt;br /&gt;
&lt;br /&gt;
==== iwd ====&lt;br /&gt;
&lt;br /&gt;
To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:&lt;br /&gt;
&lt;br /&gt;
  [General]&lt;br /&gt;
  EnableNetworkConfiguration=True&lt;br /&gt;
&lt;br /&gt;
  [Network]&lt;br /&gt;
  NameResolvingService=resolvconf&lt;br /&gt;
&lt;br /&gt;
== Test the setup ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to query for both the printer address and regular addresses with&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill @127.0.0.1 &amp;lt;printer_name&amp;gt;.local&lt;br /&gt;
drill @127.0.0.1 alpinelinux.org}}&lt;br /&gt;
&lt;br /&gt;
Your {{path|/etc/resolv.conf}} should also contain&lt;br /&gt;
&lt;br /&gt;
  nameserver 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Printer discovery should now be working.&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29644</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29644"/>
		<updated>2025-04-08T16:15:51Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: /* consistent icon theme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify  your config file to have a line as follows:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;xwayland:enabled = false&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent icon theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors (e.g. rose-pine-hyprcursor).&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&lt;br /&gt;
&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
If you use gsettings make sure you have installed [https://pkgs.alpinelinux.org/package/edge/community/x86_64/gsettings-desktop-schemas gsettings-desktop-schemas].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]] &lt;br /&gt;
[[Category:Window Managers]]&lt;br /&gt;
[[Category:Wayland]]&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29643</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29643"/>
		<updated>2025-04-08T16:12:48Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: /* consistent theme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify  your config file to have a line as follows:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;xwayland:enabled = false&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent icon theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors (e.g. rose-pine-hyprcursor).&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&lt;br /&gt;
&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]] &lt;br /&gt;
[[Category:Window Managers]]&lt;br /&gt;
[[Category:Wayland]]&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29642</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29642"/>
		<updated>2025-04-08T16:09:28Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: /* consistent theme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify  your config file to have a line as follows:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;xwayland:enabled = false&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors (e.g. rose-pine-hyprcursor).&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&lt;br /&gt;
&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]] &lt;br /&gt;
[[Category:Window Managers]]&lt;br /&gt;
[[Category:Wayland]]&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29641</id>
		<title>Hyprland</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Hyprland&amp;diff=29641"/>
		<updated>2025-04-08T16:08:05Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: /* warning message about hyprland-qtutils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is about [https://hyprland.org Hyprland], a [[wayland]] based tiling compositor with all the eyecandy, powerful plugins and much more. &lt;br /&gt;
&lt;br /&gt;
Refer to [https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ hyprland Tutorial] to get started on using Hyprland.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
{{:Include:Desktop prerequisites}}&lt;br /&gt;
* Install [[Alpine_setup_scripts#setup-wayland-base|wayland-base]].This enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the package {{Pkg|hyprland|arch=}} using the command: {{Cmd|# apk add hyprland}} &lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Black/Magenta checkerboard background: Hyprland failed to load 1 essential asset ===&lt;br /&gt;
&lt;br /&gt;
As of Hyprland 0.45.0, upstream shows a scary message (and an ugly graphic) if you don&#039;t have their wallpapers installed.&lt;br /&gt;
&lt;br /&gt;
The ugly graphic goes away when you&#039;ve launched a [https://wiki.hyprland.org/Useful-Utilities/Wallpapers/ wallpaper utility], but the scary message remains.&lt;br /&gt;
&lt;br /&gt;
The canonical way to solve this is to install {{pkg|hyprland-wallpapers}} package using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hyprland-wallpapers}}&lt;br /&gt;
&lt;br /&gt;
Or you can just have some file at {{Path|/usr/share/hypr/wall0.png}} or {{Path|/usr/local/share/hypr/wall0.png}} and modify  your config file to have a line as follows:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc {&lt;br /&gt;
        force_default_wallpaper = 0&lt;br /&gt;
    }&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Hyprland crashes almost immediately ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 has a bug where the default configuration will crash if Xwayland is not installed. You can either install {{pkg|xwayland}}, or  disable in your config:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;xwayland:enabled = false&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This should be fixed in the next update.&lt;br /&gt;
&lt;br /&gt;
=== warning message about hyprland-qtutils ===&lt;br /&gt;
&lt;br /&gt;
Hyprland 0.46 and newer suggest you install hyprland-qtutils, which is currently not available in alpine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Your system does not have hyprland-qtutils installed. This is a runtime dependency for some dialogs. Consider installing it.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can disable the check in your config like so:&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&amp;lt;Pre&amp;gt;misc:disable_hyprland_qtutils_check = true&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== consistent theme ===&lt;br /&gt;
&lt;br /&gt;
Depending on what applications you are running, you only need the HYPRCURSOR_THEME environment, it should work for all modern applications. But since you are reading this, you probably found an incompatible application. You have the option to disable hyprcursors, then you need only one theme. Otherwise you need to download a theme that is available as hyprcursors and xcursors.&lt;br /&gt;
&lt;br /&gt;
{{Cat|~/.config/hypr/hyprland.conf|&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
# Set the theme for most applications&lt;br /&gt;
env = HYPRCURSOR_THEME,$your_hyprcursor_theme&lt;br /&gt;
env = HYPRCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some Qt applications&lt;br /&gt;
env = XCURSOR_THEME,$your_xcursor_theme&lt;br /&gt;
env = XCURSOR_SIZE,24&lt;br /&gt;
# Set the theme for some GTK applications&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-theme $your_xcursor_theme&lt;br /&gt;
exec-once = gsettings set org.gnome.desktop.interface cursor-size 24&lt;br /&gt;
&amp;lt;/Pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
 &lt;br /&gt;
* [https://wiki.hyprland.org Official Hyprland wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]] &lt;br /&gt;
[[Category:Window Managers]]&lt;br /&gt;
[[Category:Wayland]]&lt;br /&gt;
[[Category:compositor]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29639</id>
		<title>Seatd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29639"/>
		<updated>2025-04-08T09:06:45Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://man.sr.ht/~kennylevinsen/seatd/ Seatd] is a [[Seat manager|seat management]] daemon, that does everything it needs to do. Nothing more, nothing less. Depends only on libc. Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root.&lt;br /&gt;
&lt;br /&gt;
When using [[elogind]], seatd is not required and viceversa. Don&#039;t add both to auto-start.&lt;br /&gt;
&lt;br /&gt;
{{note|Reading about seatd and elogind, you might get the impression that elogind is required for polkit. But seatd/polkit works fine if you use groups in the polkit rules, only for &amp;quot;subject.active&amp;quot; elogind is required.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add {{Pkg|seatd}}       # install seatd&lt;br /&gt;
rc-update add seatd # configure it to auto-start&lt;br /&gt;
service seatd start # start it now&lt;br /&gt;
adduser $USER seat  # allow current user to access seatd&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you are already logged in as a &amp;lt;code&amp;gt;$USER&amp;lt;/code&amp;gt;, you will need to relogin.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
When seatd is used with [[Wayland]], ensure that the following two mandatory steps are completed.&lt;br /&gt;
&lt;br /&gt;
* Set the variable [[XDG_RUNTIME_DIR]]. &lt;br /&gt;
* The following environment variables needs to be set:&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_SESSION_TYPE=wayland&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;LIBSEAT_BACKEND=seatd&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP=sway&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP&amp;lt;/code&amp;gt; must be suitably adjusted if a different [[:Category:Compositor|Compositor]] is used.&lt;br /&gt;
&lt;br /&gt;
== Seatd and sway ==&lt;br /&gt;
&lt;br /&gt;
When using seatd, adding the following lines to {{Path|~/.profile}} or other shell specific profile file will launch Sway automatically with and [[D-Bus]] only in tty1. {{Cat|~/.profile|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
#start sway with DBUS (only in tty1) &lt;br /&gt;
if [ &amp;quot;$(tty)&amp;quot; = &amp;quot;/dev/tty1&amp;quot; ]; then&lt;br /&gt;
     exec dbus-run-session sway &lt;br /&gt;
fi&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Instead of depending on {{Path|.profile}} or their equivalent files a [[Sway#Starting_sway|wrapper script]] can also be used.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://man.sr.ht/~kennylevinsen/seatd/ seatd documentation]&lt;br /&gt;
* [https://github.com/swaywm/sway/wiki/Setting-environmental-variables sway wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Seat_manager]]&lt;br /&gt;
[[Category:Wayland]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29638</id>
		<title>Seatd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29638"/>
		<updated>2025-04-08T08:34:27Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://man.sr.ht/~kennylevinsen/seatd/ Seatd] is a [[Seat manager|seat management]] daemon, that does everything it needs to do. Nothing more, nothing less. Depends only on libc. Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root.&lt;br /&gt;
&lt;br /&gt;
When using [[elogind]], seatd is not required and viceversa. Don&#039;t add both to auto-start.&lt;br /&gt;
&lt;br /&gt;
{{note|Reading about seatd and elogind, you might get the impression that elogind is required for polkit. But it works fine if you use groups in the polkit rules, only for &amp;quot;subject.active&amp;quot; elogind is required.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add {{Pkg|seatd}}       # install seatd&lt;br /&gt;
rc-update add seatd # configure it to auto-start&lt;br /&gt;
service seatd start # start it now&lt;br /&gt;
adduser $USER seat  # allow current user to access seatd&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you are already logged in as a &amp;lt;code&amp;gt;$USER&amp;lt;/code&amp;gt;, you will need to relogin.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
When seatd is used with [[Wayland]], ensure that the following two mandatory steps are completed.&lt;br /&gt;
&lt;br /&gt;
* Set the variable [[XDG_RUNTIME_DIR]]. &lt;br /&gt;
* The following environment variables needs to be set:&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_SESSION_TYPE=wayland&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;LIBSEAT_BACKEND=seatd&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP=sway&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP&amp;lt;/code&amp;gt; must be suitably adjusted if a different [[:Category:Compositor|Compositor]] is used.&lt;br /&gt;
&lt;br /&gt;
== Seatd and sway ==&lt;br /&gt;
&lt;br /&gt;
When using seatd, adding the following lines to {{Path|~/.profile}} or other shell specific profile file will launch Sway automatically with and [[D-Bus]] only in tty1. {{Cat|~/.profile|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
#start sway with DBUS (only in tty1) &lt;br /&gt;
if [ &amp;quot;$(tty)&amp;quot; = &amp;quot;/dev/tty1&amp;quot; ]; then&lt;br /&gt;
     exec dbus-run-session sway &lt;br /&gt;
fi&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Instead of depending on {{Path|.profile}} or their equivalent files a [[Sway#Starting_sway|wrapper script]] can also be used.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://man.sr.ht/~kennylevinsen/seatd/ seatd documentation]&lt;br /&gt;
* [https://github.com/swaywm/sway/wiki/Setting-environmental-variables sway wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Seat_manager]]&lt;br /&gt;
[[Category:Wayland]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29637</id>
		<title>Seatd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Seatd&amp;diff=29637"/>
		<updated>2025-04-08T08:31:51Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://man.sr.ht/~kennylevinsen/seatd/ Seatd] is a [[Seat manager|seat management]] daemon, that does everything it needs to do. Nothing more, nothing less. Depends only on libc. Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root.&lt;br /&gt;
&lt;br /&gt;
When using [[elogind]], seatd is not required and viceversa. Don&#039;t add both to auto-start.&lt;br /&gt;
&lt;br /&gt;
{{Info|Reading about seatd and elogind, you might get the impression that elogind is required for polkit. But it works fine if you use groups in the polkit rules, only for &amp;quot;subject.active&amp;quot; elogind is required.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add {{Pkg|seatd}}       # install seatd&lt;br /&gt;
rc-update add seatd # configure it to auto-start&lt;br /&gt;
service seatd start # start it now&lt;br /&gt;
adduser $USER seat  # allow current user to access seatd&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you are already logged in as a &amp;lt;code&amp;gt;$USER&amp;lt;/code&amp;gt;, you will need to relogin.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
When seatd is used with [[Wayland]], ensure that the following two mandatory steps are completed.&lt;br /&gt;
&lt;br /&gt;
* Set the variable [[XDG_RUNTIME_DIR]]. &lt;br /&gt;
* The following environment variables needs to be set:&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_SESSION_TYPE=wayland&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;LIBSEAT_BACKEND=seatd&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP=sway&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;XDG_CURRENT_DESKTOP&amp;lt;/code&amp;gt; must be suitably adjusted if a different [[:Category:Compositor|Compositor]] is used.&lt;br /&gt;
&lt;br /&gt;
== Seatd and sway ==&lt;br /&gt;
&lt;br /&gt;
When using seatd, adding the following lines to {{Path|~/.profile}} or other shell specific profile file will launch Sway automatically with and [[D-Bus]] only in tty1. {{Cat|~/.profile|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
#start sway with DBUS (only in tty1) &lt;br /&gt;
if [ &amp;quot;$(tty)&amp;quot; = &amp;quot;/dev/tty1&amp;quot; ]; then&lt;br /&gt;
     exec dbus-run-session sway &lt;br /&gt;
fi&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Instead of depending on {{Path|.profile}} or their equivalent files a [[Sway#Starting_sway|wrapper script]] can also be used.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://man.sr.ht/~kennylevinsen/seatd/ seatd documentation]&lt;br /&gt;
* [https://github.com/swaywm/sway/wiki/Setting-environmental-variables sway wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Seat_manager]]&lt;br /&gt;
[[Category:Wayland]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29614</id>
		<title>MDNS</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29614"/>
		<updated>2025-04-03T16:31:32Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mDNS}}&lt;br /&gt;
[https://en.wikipedia.org/wiki/Multicast_DNS Multicast DNS] is a protocol that is normally used for the discovery of printers.  Avahi is a popular implementation by but more setup is needed for the regular name resolution to see the results.&lt;br /&gt;
&lt;br /&gt;
{{warning|There might be in issue in ipv4/ipv6 dual-setups. [https://github.com/LouisBrunner/avahi2dns/issues/21 Check this issue.]}}&lt;br /&gt;
&lt;br /&gt;
== Setup avahi ==&lt;br /&gt;
&lt;br /&gt;
Install, enable and start avahi with:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi}}&lt;br /&gt;
doas rc-update add avahi-daemon&lt;br /&gt;
doas rc-service avahi-daemon start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to browse results. To look for a printer, use:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi-tools}}&lt;br /&gt;
avahi-browse --resolve --terminate  _ipp._tcp}}&lt;br /&gt;
&lt;br /&gt;
Make note of the hostname, as we will use it afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setup avahi2dns ==&lt;br /&gt;
&lt;br /&gt;
Name resolution is implemented by musl, and it only supports DNS, so we have to map the avahi results to a regular DNS server. This is done by avahi2dns.&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi2dns}}}}&lt;br /&gt;
&lt;br /&gt;
since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. This is done by default with {{path|/etc/conf.d/avahi2dns}} containing:&lt;br /&gt;
&lt;br /&gt;
  command_args=&amp;quot;-p 5354&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable and start avahi2dns with&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add avahi2dns&lt;br /&gt;
doas rc-service avahi2dns start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to use DNS to query the address of the printer.&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill -p 5354 @127.0.0.1 &amp;lt;printer_name&amp;gt;.local}}&lt;br /&gt;
&lt;br /&gt;
Where printer_name is the hostname given by avahi-browse.&lt;br /&gt;
&lt;br /&gt;
== Setup Networkmanager ==&lt;br /&gt;
&lt;br /&gt;
If you are already using networkmanager, you can leverage {{pkg|dnsmasq}} as your DNS server which can easily forward mDNS requests to another server.&lt;br /&gt;
&lt;br /&gt;
Install the {{pkg|networkmanager-dnsmasq}} package:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|networkmanager-dnsmasq}}}}&lt;br /&gt;
&lt;br /&gt;
Configure networkmanager to use dnsmasq as it&#039;s dns server by editing {{path|/etc/NetworkManager/NetworkManager.conf}}&lt;br /&gt;
&lt;br /&gt;
  [main] &lt;br /&gt;
  dhcp=internal&lt;br /&gt;
  dns=dnsmasq&lt;br /&gt;
&lt;br /&gt;
Then we need to tell dnsmasq to forward all mDNS queries to avahidns {{path|/etc/NetworkManager/dnsmasq.d/mdns.conf}}:&lt;br /&gt;
&lt;br /&gt;
  # Forward queries for the &amp;quot;local&amp;quot; domain to 127.0.0.1 port 5354&lt;br /&gt;
  server=/local/127.0.0.1#5354&lt;br /&gt;
&lt;br /&gt;
Restart networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
== Without NetworkManager ==&lt;br /&gt;
&lt;br /&gt;
=== Setup DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.&lt;br /&gt;
&lt;br /&gt;
Install the programs:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|openresolv}} {{pkg|unbound}}}}&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/resolvconf.conf}}:&lt;br /&gt;
&lt;br /&gt;
  name_servers=127.0.0.1&lt;br /&gt;
  unbound_conf=/etc/unbound/unbound.conf.d/resolvconf.conf&lt;br /&gt;
&lt;br /&gt;
This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/unbound/unbound.conf.d/avahi-local.conf}}:&lt;br /&gt;
&lt;br /&gt;
  forward-zone:&lt;br /&gt;
        name: &amp;quot;local&amp;quot;&lt;br /&gt;
        forward-addr: 127.0.0.1@5354&lt;br /&gt;
  server:&lt;br /&gt;
        do-not-query-localhost: no&lt;br /&gt;
        domain-insecure: &amp;quot;local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This reads the information provided by resolvconf, but forwards .local requests to avahi2dns. We also need to disable dnssec for .local and tell unbound that it is OK to query localhost.&lt;br /&gt;
&lt;br /&gt;
Enable and start unbound&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add unbound&lt;br /&gt;
doas rc-service unbound start}}&lt;br /&gt;
&lt;br /&gt;
=== Using bind(named) as DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
It is assumed that bind(named) is already installed and running, if not, then you can use the instructions[[https://wiki.alpinelinux.org/wiki/Small-Time_DNS_with_BIND9]]&lt;br /&gt;
&lt;br /&gt;
If you already have a bind(named) server configured, then the solution is to set an access &amp;quot;zone&amp;quot; for postfix addresses.local&lt;br /&gt;
&lt;br /&gt;
To do this, add the following lines to the bind configuration file (by default, the /etc/bind/named.conf file is used):&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;local&amp;quot; {&lt;br /&gt;
   type forward; # type requests&lt;br /&gt;
   forward only; # rule to use only forwards&lt;br /&gt;
   forwarders {&lt;br /&gt;
     127.0.0.1 port 5354; # Avahi2dns adress and port&lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Additionally, you may need to disable dnssec verification for the .local postfix. To do this, add the following lines inside the options configuration:&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
 ...&lt;br /&gt;
   validate-except {&lt;br /&gt;
     &amp;quot;local&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 ...&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
After adding the configuration, double-check that you have a .local zone. To do this, use the command:&lt;br /&gt;
&lt;br /&gt;
 named-checkconf -l # OUTPUT: local IN _default forward&lt;br /&gt;
&lt;br /&gt;
If there were no errors, you can reload the bind(named) service:&lt;br /&gt;
&lt;br /&gt;
 rc-service named reload&lt;br /&gt;
&lt;br /&gt;
=== Setup DHCP client ===&lt;br /&gt;
&lt;br /&gt;
How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.&lt;br /&gt;
&lt;br /&gt;
==== udhcpc ====&lt;br /&gt;
&lt;br /&gt;
This is the DHCP client in busybox, and will work for both wired and wireless interfaces. &lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/udhcpc.conf}}:&lt;br /&gt;
&lt;br /&gt;
  RESOLV_CONF=&amp;quot;/etc/udhcpc-resolv.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/post-bound/resolvconf}}:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  cat /etc/udhcpc-resolv.conf | resolvconf -a $interface&lt;br /&gt;
&lt;br /&gt;
and make it executable&lt;br /&gt;
&lt;br /&gt;
{{cmd|chmod 755 /etc/udhcpc/post-bound/resolvconf}}&lt;br /&gt;
&lt;br /&gt;
An inconvenience of this setup is that udhcpc will not reconfigure the interface when connecting to other wifi networks. For that to happen one has to run&lt;br /&gt;
&lt;br /&gt;
{{cmd|iwctl station wlan0 connect &amp;lt;network_name&amp;gt;&lt;br /&gt;
doas kill -USR2 $(cat  /run/udhcpc.wlan0.pid)&lt;br /&gt;
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}&lt;br /&gt;
&lt;br /&gt;
==== iwd ====&lt;br /&gt;
&lt;br /&gt;
To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:&lt;br /&gt;
&lt;br /&gt;
  [General]&lt;br /&gt;
  EnableNetworkConfiguration=True&lt;br /&gt;
&lt;br /&gt;
  [Network]&lt;br /&gt;
  NameResolvingService=resolvconf&lt;br /&gt;
&lt;br /&gt;
== Test the setup ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to query for both the printer address and regular addresses with&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill @127.0.0.1 &amp;lt;printer_name&amp;gt;.local&lt;br /&gt;
drill @127.0.0.1 alpinelinux.org}}&lt;br /&gt;
&lt;br /&gt;
Your {{path|/etc/resolv.conf}} should also contain&lt;br /&gt;
&lt;br /&gt;
  nameserver 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Printer discovery should now be working.&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29613</id>
		<title>MDNS</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=MDNS&amp;diff=29613"/>
		<updated>2025-04-03T16:31:23Z</updated>

		<summary type="html">&lt;p&gt;Rhizoome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mDNS}}&lt;br /&gt;
[https://en.wikipedia.org/wiki/Multicast_DNS Multicast DNS] is a protocol that is normally used for the discovery of printers.  Avahi is a popular implementation by but more setup is needed for the regular name resolution to see the results.&lt;br /&gt;
&lt;br /&gt;
{{warning|The might be in issue in ipv4/ipv6 dual-setups. [https://github.com/LouisBrunner/avahi2dns/issues/21 Check this issue.]}}&lt;br /&gt;
&lt;br /&gt;
== Setup avahi ==&lt;br /&gt;
&lt;br /&gt;
Install, enable and start avahi with:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi}}&lt;br /&gt;
doas rc-update add avahi-daemon&lt;br /&gt;
doas rc-service avahi-daemon start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to browse results. To look for a printer, use:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi-tools}}&lt;br /&gt;
avahi-browse --resolve --terminate  _ipp._tcp}}&lt;br /&gt;
&lt;br /&gt;
Make note of the hostname, as we will use it afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setup avahi2dns ==&lt;br /&gt;
&lt;br /&gt;
Name resolution is implemented by musl, and it only supports DNS, so we have to map the avahi results to a regular DNS server. This is done by avahi2dns.&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|avahi2dns}}}}&lt;br /&gt;
&lt;br /&gt;
since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. This is done by default with {{path|/etc/conf.d/avahi2dns}} containing:&lt;br /&gt;
&lt;br /&gt;
  command_args=&amp;quot;-p 5354&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable and start avahi2dns with&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add avahi2dns&lt;br /&gt;
doas rc-service avahi2dns start}}&lt;br /&gt;
&lt;br /&gt;
It should now be possible to use DNS to query the address of the printer.&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill -p 5354 @127.0.0.1 &amp;lt;printer_name&amp;gt;.local}}&lt;br /&gt;
&lt;br /&gt;
Where printer_name is the hostname given by avahi-browse.&lt;br /&gt;
&lt;br /&gt;
== Setup Networkmanager ==&lt;br /&gt;
&lt;br /&gt;
If you are already using networkmanager, you can leverage {{pkg|dnsmasq}} as your DNS server which can easily forward mDNS requests to another server.&lt;br /&gt;
&lt;br /&gt;
Install the {{pkg|networkmanager-dnsmasq}} package:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|networkmanager-dnsmasq}}}}&lt;br /&gt;
&lt;br /&gt;
Configure networkmanager to use dnsmasq as it&#039;s dns server by editing {{path|/etc/NetworkManager/NetworkManager.conf}}&lt;br /&gt;
&lt;br /&gt;
  [main] &lt;br /&gt;
  dhcp=internal&lt;br /&gt;
  dns=dnsmasq&lt;br /&gt;
&lt;br /&gt;
Then we need to tell dnsmasq to forward all mDNS queries to avahidns {{path|/etc/NetworkManager/dnsmasq.d/mdns.conf}}:&lt;br /&gt;
&lt;br /&gt;
  # Forward queries for the &amp;quot;local&amp;quot; domain to 127.0.0.1 port 5354&lt;br /&gt;
  server=/local/127.0.0.1#5354&lt;br /&gt;
&lt;br /&gt;
Restart networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
== Without NetworkManager ==&lt;br /&gt;
&lt;br /&gt;
=== Setup DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.&lt;br /&gt;
&lt;br /&gt;
Install the programs:&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas apk add {{pkg|openresolv}} {{pkg|unbound}}}}&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/resolvconf.conf}}:&lt;br /&gt;
&lt;br /&gt;
  name_servers=127.0.0.1&lt;br /&gt;
  unbound_conf=/etc/unbound/unbound.conf.d/resolvconf.conf&lt;br /&gt;
&lt;br /&gt;
This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/unbound/unbound.conf.d/avahi-local.conf}}:&lt;br /&gt;
&lt;br /&gt;
  forward-zone:&lt;br /&gt;
        name: &amp;quot;local&amp;quot;&lt;br /&gt;
        forward-addr: 127.0.0.1@5354&lt;br /&gt;
  server:&lt;br /&gt;
        do-not-query-localhost: no&lt;br /&gt;
        domain-insecure: &amp;quot;local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This reads the information provided by resolvconf, but forwards .local requests to avahi2dns. We also need to disable dnssec for .local and tell unbound that it is OK to query localhost.&lt;br /&gt;
&lt;br /&gt;
Enable and start unbound&lt;br /&gt;
&lt;br /&gt;
{{cmd|doas rc-update add unbound&lt;br /&gt;
doas rc-service unbound start}}&lt;br /&gt;
&lt;br /&gt;
=== Using bind(named) as DNS resolver ===&lt;br /&gt;
&lt;br /&gt;
It is assumed that bind(named) is already installed and running, if not, then you can use the instructions[[https://wiki.alpinelinux.org/wiki/Small-Time_DNS_with_BIND9]]&lt;br /&gt;
&lt;br /&gt;
If you already have a bind(named) server configured, then the solution is to set an access &amp;quot;zone&amp;quot; for postfix addresses.local&lt;br /&gt;
&lt;br /&gt;
To do this, add the following lines to the bind configuration file (by default, the /etc/bind/named.conf file is used):&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;local&amp;quot; {&lt;br /&gt;
   type forward; # type requests&lt;br /&gt;
   forward only; # rule to use only forwards&lt;br /&gt;
   forwarders {&lt;br /&gt;
     127.0.0.1 port 5354; # Avahi2dns adress and port&lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Additionally, you may need to disable dnssec verification for the .local postfix. To do this, add the following lines inside the options configuration:&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
 ...&lt;br /&gt;
   validate-except {&lt;br /&gt;
     &amp;quot;local&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 ...&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
After adding the configuration, double-check that you have a .local zone. To do this, use the command:&lt;br /&gt;
&lt;br /&gt;
 named-checkconf -l # OUTPUT: local IN _default forward&lt;br /&gt;
&lt;br /&gt;
If there were no errors, you can reload the bind(named) service:&lt;br /&gt;
&lt;br /&gt;
 rc-service named reload&lt;br /&gt;
&lt;br /&gt;
=== Setup DHCP client ===&lt;br /&gt;
&lt;br /&gt;
How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.&lt;br /&gt;
&lt;br /&gt;
==== udhcpc ====&lt;br /&gt;
&lt;br /&gt;
This is the DHCP client in busybox, and will work for both wired and wireless interfaces. &lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/udhcpc.conf}}:&lt;br /&gt;
&lt;br /&gt;
  RESOLV_CONF=&amp;quot;/etc/udhcpc-resolv.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udhcpc/post-bound/resolvconf}}:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  cat /etc/udhcpc-resolv.conf | resolvconf -a $interface&lt;br /&gt;
&lt;br /&gt;
and make it executable&lt;br /&gt;
&lt;br /&gt;
{{cmd|chmod 755 /etc/udhcpc/post-bound/resolvconf}}&lt;br /&gt;
&lt;br /&gt;
An inconvenience of this setup is that udhcpc will not reconfigure the interface when connecting to other wifi networks. For that to happen one has to run&lt;br /&gt;
&lt;br /&gt;
{{cmd|iwctl station wlan0 connect &amp;lt;network_name&amp;gt;&lt;br /&gt;
doas kill -USR2 $(cat  /run/udhcpc.wlan0.pid)&lt;br /&gt;
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}&lt;br /&gt;
&lt;br /&gt;
==== iwd ====&lt;br /&gt;
&lt;br /&gt;
To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:&lt;br /&gt;
&lt;br /&gt;
  [General]&lt;br /&gt;
  EnableNetworkConfiguration=True&lt;br /&gt;
&lt;br /&gt;
  [Network]&lt;br /&gt;
  NameResolvingService=resolvconf&lt;br /&gt;
&lt;br /&gt;
== Test the setup ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to query for both the printer address and regular addresses with&lt;br /&gt;
&lt;br /&gt;
{{cmd|drill @127.0.0.1 &amp;lt;printer_name&amp;gt;.local&lt;br /&gt;
drill @127.0.0.1 alpinelinux.org}}&lt;br /&gt;
&lt;br /&gt;
Your {{path|/etc/resolv.conf}} should also contain&lt;br /&gt;
&lt;br /&gt;
  nameserver 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Printer discovery should now be working.&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Rhizoome</name></author>
	</entry>
</feed>