<?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=Andar1an</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=Andar1an"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Andar1an"/>
	<updated>2026-05-03T23:28:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27653</id>
		<title>ALSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27653"/>
		<updated>2024-10-29T21:58:59Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: Remove added troubleshooting section, the recommendation doesn&amp;#039;t work consistently.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Install ==&lt;br /&gt;
&lt;br /&gt;
First you will need to install the Alsa packages, Linux sound driver and volume adjuster.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add {{pkg|alsa-utils}} {{pkg|alsaconf}}}}&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Then you will need to add all your users (including root) to the &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt; group.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;# addgroup $USER audio&lt;br /&gt;
# addgroup root audio&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Find the default sound card.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# alsamixer}}&lt;br /&gt;
&lt;br /&gt;
The default sound card will show up. Try turning up the volume of Master and the device(s) such as speakers or microphones that you need, and audio should work ({{Key|F1}} - help, {{Key|M}} - toggle mute, ...)&lt;br /&gt;
&lt;br /&gt;
If there are no volume controls visible, try hitting {{Key|F6}} on your keyboard and toggling between the sound cards (which all might have the same name in the context menu that pops up except for the numbers next to and before the names).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found the sound card name that gives you volume controls, set the unique number that showed up in the {{Key|F6}} context menu as your default soundcard.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# nano /usr/share/alsa/alsa.conf}}&lt;br /&gt;
&lt;br /&gt;
Scroll down until you find the lines that start with &amp;lt;code&amp;gt;defaults.ctl.card&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;defaults.pcm.card&amp;lt;/code&amp;gt; and put the number (you found in the {{Key|F6}} context menu of the alsamixer command for the soundcard you want as your default) at the end of those lines separated by a space for each. For example, if the default sound card you want is &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/usr/share/alsa/alsa.conf|...&lt;br /&gt;
defaults.ctl.card 1&lt;br /&gt;
defaults.pcm.card 1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Save your nano work by pressing {{Key|Ctrl}}+{{Key|O}} and confirm the changes by pressing {{Key|Enter}}. Then exit nano by pressing {{Key|Ctrl}}+{{Key|X}}.&lt;br /&gt;
&lt;br /&gt;
Try turning up the volume of Master and the device(s) such as speakers or microphones that you need with the &amp;lt;code&amp;gt;alsamixer&amp;lt;/code&amp;gt; command, and audio should work.&lt;br /&gt;
&lt;br /&gt;
Alsa service is not started on install, you need to start it and to add it on [[OpenRC]].&lt;br /&gt;
{{Cmd|rc-service alsa start&lt;br /&gt;
rc-update add alsa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Gstreamer can now catch the device and the audio mixer is working.&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Multimedia]]&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Drivers]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27652</id>
		<title>ALSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27652"/>
		<updated>2024-10-29T18:46:31Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: add option, as empty string doesn&amp;#039;t always work for troubleshooting warning about alsactl_opts.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Install ==&lt;br /&gt;
&lt;br /&gt;
First you will need to install the Alsa packages, Linux sound driver and volume adjuster.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add {{pkg|alsa-utils}} {{pkg|alsaconf}}}}&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Then you will need to add all your users (including root) to the &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt; group.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;# addgroup $USER audio&lt;br /&gt;
# addgroup root audio&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Find the default sound card.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# alsamixer}}&lt;br /&gt;
&lt;br /&gt;
The default sound card will show up. Try turning up the volume of Master and the device(s) such as speakers or microphones that you need, and audio should work ({{Key|F1}} - help, {{Key|M}} - toggle mute, ...)&lt;br /&gt;
&lt;br /&gt;
If there are no volume controls visible, try hitting {{Key|F6}} on your keyboard and toggling between the sound cards (which all might have the same name in the context menu that pops up except for the numbers next to and before the names).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found the sound card name that gives you volume controls, set the unique number that showed up in the {{Key|F6}} context menu as your default soundcard.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# nano /usr/share/alsa/alsa.conf}}&lt;br /&gt;
&lt;br /&gt;
Scroll down until you find the lines that start with &amp;lt;code&amp;gt;defaults.ctl.card&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;defaults.pcm.card&amp;lt;/code&amp;gt; and put the number (you found in the {{Key|F6}} context menu of the alsamixer command for the soundcard you want as your default) at the end of those lines separated by a space for each. For example, if the default sound card you want is &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/usr/share/alsa/alsa.conf|...&lt;br /&gt;
defaults.ctl.card 1&lt;br /&gt;
defaults.pcm.card 1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Save your nano work by pressing {{Key|Ctrl}}+{{Key|O}} and confirm the changes by pressing {{Key|Enter}}. Then exit nano by pressing {{Key|Ctrl}}+{{Key|X}}.&lt;br /&gt;
&lt;br /&gt;
Try turning up the volume of Master and the device(s) such as speakers or microphones that you need with the &amp;lt;code&amp;gt;alsamixer&amp;lt;/code&amp;gt; command, and audio should work.&lt;br /&gt;
&lt;br /&gt;
Alsa service is not started on install, you need to start it and to add it on [[OpenRC]].&lt;br /&gt;
{{Cmd|rc-service alsa start&lt;br /&gt;
rc-update add alsa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Gstreamer can now catch the device and the audio mixer is working.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you are experiencing a warning when alsa service is starting that states &amp;lt;code&amp;gt;alsactl does not have an option &#039;-&#039; &amp;lt;/code&amp;gt; while attempting to restore state, it can be simply remedied by setting the alsactl_opts variable in /etc/conf.d/alsa. &lt;br /&gt;
For example: &amp;lt;code&amp;gt;alsactl_opts=&amp;quot;-F&amp;quot;&amp;lt;/code&amp;gt;. -F is the default option --force, and tries to restore the matching control elements as much as possible. As it is default, it won&#039;t change anything, but will remove the boot warning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Multimedia]]&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Drivers]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27651</id>
		<title>ALSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27651"/>
		<updated>2024-10-29T18:35:10Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: correct typo for config file reference in troubleshooting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Install ==&lt;br /&gt;
&lt;br /&gt;
First you will need to install the Alsa packages, Linux sound driver and volume adjuster.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add {{pkg|alsa-utils}} {{pkg|alsaconf}}}}&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Then you will need to add all your users (including root) to the &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt; group.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;# addgroup $USER audio&lt;br /&gt;
# addgroup root audio&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Find the default sound card.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# alsamixer}}&lt;br /&gt;
&lt;br /&gt;
The default sound card will show up. Try turning up the volume of Master and the device(s) such as speakers or microphones that you need, and audio should work ({{Key|F1}} - help, {{Key|M}} - toggle mute, ...)&lt;br /&gt;
&lt;br /&gt;
If there are no volume controls visible, try hitting {{Key|F6}} on your keyboard and toggling between the sound cards (which all might have the same name in the context menu that pops up except for the numbers next to and before the names).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found the sound card name that gives you volume controls, set the unique number that showed up in the {{Key|F6}} context menu as your default soundcard.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# nano /usr/share/alsa/alsa.conf}}&lt;br /&gt;
&lt;br /&gt;
Scroll down until you find the lines that start with &amp;lt;code&amp;gt;defaults.ctl.card&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;defaults.pcm.card&amp;lt;/code&amp;gt; and put the number (you found in the {{Key|F6}} context menu of the alsamixer command for the soundcard you want as your default) at the end of those lines separated by a space for each. For example, if the default sound card you want is &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/usr/share/alsa/alsa.conf|...&lt;br /&gt;
defaults.ctl.card 1&lt;br /&gt;
defaults.pcm.card 1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Save your nano work by pressing {{Key|Ctrl}}+{{Key|O}} and confirm the changes by pressing {{Key|Enter}}. Then exit nano by pressing {{Key|Ctrl}}+{{Key|X}}.&lt;br /&gt;
&lt;br /&gt;
Try turning up the volume of Master and the device(s) such as speakers or microphones that you need with the &amp;lt;code&amp;gt;alsamixer&amp;lt;/code&amp;gt; command, and audio should work.&lt;br /&gt;
&lt;br /&gt;
Alsa service is not started on install, you need to start it and to add it on [[OpenRC]].&lt;br /&gt;
{{Cmd|rc-service alsa start&lt;br /&gt;
rc-update add alsa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Gstreamer can now catch the device and the audio mixer is working.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you are experiencing a warning when alsa service is starting that states &amp;lt;code&amp;gt;alsactl does not have an option &#039;-&#039; &amp;lt;/code&amp;gt; while attempting to restore state, it can be simply remedied by setting the alsactl_opts variable in /etc/conf.d/alsa. &lt;br /&gt;
For example: &amp;lt;code&amp;gt;alsactl_opts=&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Multimedia]]&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Drivers]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27644</id>
		<title>ALSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ALSA&amp;diff=27644"/>
		<updated>2024-10-28T21:41:55Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: mention possible solution to alsa warning on service start during boot when alsa tries to restore state and alsactl_opts are not defined.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Install ==&lt;br /&gt;
&lt;br /&gt;
First you will need to install the Alsa packages, Linux sound driver and volume adjuster.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add {{pkg|alsa-utils}} {{pkg|alsaconf}}}}&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Then you will need to add all your users (including root) to the &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt; group.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;# addgroup $USER audio&lt;br /&gt;
# addgroup root audio&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Find the default sound card.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# alsamixer}}&lt;br /&gt;
&lt;br /&gt;
The default sound card will show up. Try turning up the volume of Master and the device(s) such as speakers or microphones that you need, and audio should work ({{Key|F1}} - help, {{Key|M}} - toggle mute, ...)&lt;br /&gt;
&lt;br /&gt;
If there are no volume controls visible, try hitting {{Key|F6}} on your keyboard and toggling between the sound cards (which all might have the same name in the context menu that pops up except for the numbers next to and before the names).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found the sound card name that gives you volume controls, set the unique number that showed up in the {{Key|F6}} context menu as your default soundcard.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# nano /usr/share/alsa/alsa.conf}}&lt;br /&gt;
&lt;br /&gt;
Scroll down until you find the lines that start with &amp;lt;code&amp;gt;defaults.ctl.card&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;defaults.pcm.card&amp;lt;/code&amp;gt; and put the number (you found in the {{Key|F6}} context menu of the alsamixer command for the soundcard you want as your default) at the end of those lines separated by a space for each. For example, if the default sound card you want is &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/usr/share/alsa/alsa.conf|...&lt;br /&gt;
defaults.ctl.card 1&lt;br /&gt;
defaults.pcm.card 1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Save your nano work by pressing {{Key|Ctrl}}+{{Key|O}} and confirm the changes by pressing {{Key|Enter}}. Then exit nano by pressing {{Key|Ctrl}}+{{Key|X}}.&lt;br /&gt;
&lt;br /&gt;
Try turning up the volume of Master and the device(s) such as speakers or microphones that you need with the &amp;lt;code&amp;gt;alsamixer&amp;lt;/code&amp;gt; command, and audio should work.&lt;br /&gt;
&lt;br /&gt;
Alsa service is not started on install, you need to start it and to add it on [[OpenRC]].&lt;br /&gt;
{{Cmd|rc-service alsa start&lt;br /&gt;
rc-update add alsa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Gstreamer can now catch the device and the audio mixer is working.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you are experiencing a warning when alsa service is starting that states &amp;lt;code&amp;gt;alsactl does not have an option &#039;-&#039; &amp;lt;/code&amp;gt; while attempting to restore state, it can be simply remedied by setting the alsactl_opts variable in /etc/init.d/alsa. &lt;br /&gt;
For example: &amp;lt;code&amp;gt;alsactl_opts=&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Multimedia]]&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Drivers]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Andar1an&amp;diff=27458</id>
		<title>User:Andar1an</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Andar1an&amp;diff=27458"/>
		<updated>2024-10-03T22:46:18Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: update fstab uuids&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# WIP - Lots of references to LVM on LUKS and Secure Boot Alpine wikis - will add links and references later&lt;br /&gt;
&lt;br /&gt;
# TODO: &lt;br /&gt;
- Poweroff has some errors related to mounts - look into&lt;br /&gt;
- Validate swapfile compression and cow settings - if remounting while installing didn&#039;t work use chattrc&lt;br /&gt;
- Wiki page formatting&lt;br /&gt;
&lt;br /&gt;
# System:&lt;br /&gt;
Alpine 3.20 on Lenovo X1 Yoga Gen 4&lt;br /&gt;
&lt;br /&gt;
# Steps:&lt;br /&gt;
setup-keymap&lt;br /&gt;
setup-hostname&lt;br /&gt;
setup-interfaces&lt;br /&gt;
rc-service networking start&lt;br /&gt;
passwd&lt;br /&gt;
setup-timezone&lt;br /&gt;
setup-ntp&lt;br /&gt;
setup-sshd&lt;br /&gt;
&lt;br /&gt;
# load btrfs module, or will get missing /dev/btrfs-control warning when creating fs.&lt;br /&gt;
modprobe btrfs&lt;br /&gt;
setup-apkrepos&lt;br /&gt;
apk update&lt;br /&gt;
apk add btrfs-progs cryptsetup dosfstools mkinitfs parted&lt;br /&gt;
&lt;br /&gt;
# use optimal partition alignment for disk&lt;br /&gt;
parted -a optimal /dev/nvme0n1 -s \&lt;br /&gt;
    mklabel gpt \&lt;br /&gt;
    mkpart ESP fat32 1MiB 512MiB \&lt;br /&gt;
    mkpart luks btrfs 512MiB 100% \&lt;br /&gt;
    set 1 esp on&lt;br /&gt;
&lt;br /&gt;
# overwrite luks parition with 0&#039;s - takes a while, took me 20 min for 476 GiB&lt;br /&gt;
# dd if=/dev/urandom of=/dev/nvme0n1p2 bs=1M status=progress&lt;br /&gt;
&lt;br /&gt;
# Luks2 Optimized for security (see cryptsetup notes below):&lt;br /&gt;
cryptsetup luksFormat /dev/nvme0n1p2 -v -c aes-xts-plain64 -s 512 --hash sha512 --pbkdf pbkdf2 --iter-time 5000 --use-random &lt;br /&gt;
&lt;br /&gt;
# can verify keyslot has a key&lt;br /&gt;
# cryptsetup luksDump /dev/nvme0n1p2&lt;br /&gt;
&lt;br /&gt;
mkfs.fat -F 32 -n ESP /dev/nvme0n1p1&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 luks&lt;br /&gt;
mkfs.btrfs -L ROOT /dev/mapper/luks&lt;br /&gt;
&lt;br /&gt;
# create subvolumes &lt;br /&gt;
mount /dev/mapper/luks /mnt&lt;br /&gt;
btrfs sub create /mnt/@&lt;br /&gt;
btrfs sub create /mnt/@swap&lt;br /&gt;
btrfs sub create /mnt/@.snapshots&lt;br /&gt;
btrfs sub create /mnt/@tmp&lt;br /&gt;
btrfs sub create /mnt/@run&lt;br /&gt;
btrfs sub create /mnt/@var&lt;br /&gt;
btrfs sub create /mnt/@srv&lt;br /&gt;
btrfs sub create /mnt/@home&lt;br /&gt;
btrfs sub create /mnt/@opt&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
# following mounts will inherit primary mount options until remounted&lt;br /&gt;
mount -o ssd,noatime,space_cache=v2,compress-force=zstd:2,discard=async,subvol=@ /dev/mapper/luks /mnt&lt;br /&gt;
# Mount the sub volumes:&lt;br /&gt;
mkdir -p /mnt/swap /mnt/.snapshots /mnt/tmp /mnt/run /mnt/var /mnt/srv /mnt/home /mnt/opt&lt;br /&gt;
mount -o subvol=@home /dev/mapper/luks /mnt/home&lt;br /&gt;
mount -o subvol=@opt /dev/mapper/luks /mnt/opt&lt;br /&gt;
mount -o subvol=@tmp /dev/mapper/luks /mnt/tmp&lt;br /&gt;
mount -o subvol=@var /dev/mapper/luks /mnt/var&lt;br /&gt;
mount -o subvol=@run /dev/mapper/luks /mnt/run&lt;br /&gt;
mount -o subvol=@srv /dev/mapper/luks /mnt/srv&lt;br /&gt;
mount -o subvol=@.snapshots /dev/mapper/luks /mnt/.snapshots&lt;br /&gt;
mount -o subvol=@swap /dev/mapper/luks /mnt/swap&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/boot/efi&lt;br /&gt;
# Mount the EFI partition&lt;br /&gt;
mount /dev/nvme0n1p1 /mnt/boot/efi&lt;br /&gt;
&lt;br /&gt;
# easier to not install bootlader with setup-disk&lt;br /&gt;
BOOTLOADER=none setup-disk -m sys /mnt&lt;br /&gt;
&lt;br /&gt;
export UUID=$(blkid -s UUID -o value /dev/dm-0 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
export UUID2=$(blkid -s UUID -o value /dev/nvme0n1p1 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
&lt;br /&gt;
# Can modify output of setup-disk&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/mnt/etc/fstab&lt;br /&gt;
UUID=$UUID	/	btrfs	rw,noatime,compress-force=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@ 0 0&lt;br /&gt;
UUID=$UUID	/home	btrfs	rw,relatime,compress-force=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@home 0 0&lt;br /&gt;
UUID=$UUID	/opt	btrfs	rw,relatime,compress-force=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@opt 0 0&lt;br /&gt;
UUID=$UUID	/tmp	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@tmp 0 0&lt;br /&gt;
UUID=$UUID	/var	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@var 0 0&lt;br /&gt;
UUID=$UUID	/run	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@run 0 0&lt;br /&gt;
UUID=$UUID	/srv	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@srv 0 0&lt;br /&gt;
UUID=$UUID	/.snapshots	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@.snapshots 0 0&lt;br /&gt;
UUID=$UUID	/swap	btrfs	rw,ssd,noatime,nodatacow,compress=none,subvol=/@swap 0 0&lt;br /&gt;
UUID=$UUID2	/boot/efi	vfat	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro 0 2&lt;br /&gt;
/dev/cdrom	/media/cdrom	iso9660	noauto,ro 0 0&lt;br /&gt;
/dev/usbdisk	/media/usb	vfat	noauto	0 0&lt;br /&gt;
tmpfs	/tmp	tmpfs	nosuid,nodev	0	0&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# remount subvolumes for different mount options to be used&lt;br /&gt;
umount /mnt/swap&lt;br /&gt;
mount -o rw,ssd,noatime,nodatacow,compress=none,subvol=@swap /dev/mapper/luks /mnt/swap&lt;br /&gt;
&lt;br /&gt;
# Now create swapfile with correct subvolume options&lt;br /&gt;
# https://btrfs.readthedocs.io/en/latest/Swapfile.html&lt;br /&gt;
btrfs filesystem mkswapfile --size 20G /mnt/swap/swapfile&lt;br /&gt;
swapon /mnt/swap/swapfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Look into updating to current key options - https://wiki.archlinux.org/title/Dm-crypt/Device_encryption#Keyfiles&lt;br /&gt;
# To avoid having to type your decryption password twice every boot (once for GRUB and once for Alpine), add a keyfile to your LUKS partition. The filename is important. &lt;br /&gt;
touch /mnt/crypto_keyfile.bin&lt;br /&gt;
chmod 600 /mnt/crypto_keyfile.bin&lt;br /&gt;
dd bs=512 count=4 if=/dev/urandom of=/mnt/crypto_keyfile.bin&lt;br /&gt;
cryptsetup luksAddKey /dev/nvme0n1p2 /mnt/crypto_keyfile.bin&lt;br /&gt;
&lt;br /&gt;
# This keyfile is stored encrypted (it is in your LUKS partition), so its presence does not affect system security.&lt;br /&gt;
# Mount the required filesystems for the Grub EFI installer to do the installation:&lt;br /&gt;
# rbind is recurrsive, rslave is a mirror mount, the proc file system acts as an interface to internal data structures in the kernel. &lt;br /&gt;
&lt;br /&gt;
# see https://wiki.archlinux.org/title/Chroot section 4.3&lt;br /&gt;
mount -t proc /proc /mnt/proc&lt;br /&gt;
mount --rbind /dev /mnt/dev&lt;br /&gt;
mount --make-rslave /mnt/dev&lt;br /&gt;
mount --rbind /sys /mnt/sys&lt;br /&gt;
&lt;br /&gt;
# Then run chroot:&lt;br /&gt;
chroot /mnt&lt;br /&gt;
&lt;br /&gt;
# Install GRUB2 for EFI&lt;br /&gt;
apk add grub grub-efi efibootmgr&lt;br /&gt;
&lt;br /&gt;
# To get the UUID of your storage device into a file for later use, run this command:&lt;br /&gt;
export UUID=$(blkid -s UUID -o value /dev/nvme0n1p2 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
&lt;br /&gt;
# cryptdm = device name set in cryptsetup&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/default/grub&lt;br /&gt;
GRUB_TIMEOUT=2&lt;br /&gt;
GRUB_DISABLE_SUBMENU=y&lt;br /&gt;
GRUB_DISABLE_RECOVERY=false&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;modules=sd-mod,usb-storage,btrfs,nvme cryptroot=UUID=$UUID cryptdm=luks cryptkey quiet rootfstype=btrfs&amp;quot;&lt;br /&gt;
GRUB_PRELOAD_MODULES=&amp;quot;luks2 cryptodisk part_gpt gcry_sha512 pbkdf2&amp;quot;&lt;br /&gt;
GRUB_ENABLE_CRYPTODISK=y&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# # Update mkinitfs conf modules&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/mkinitfs/mkinitfs.conf&lt;br /&gt;
features=&amp;quot;ata base ide scsi usb virtio btrfs nvme cryptsetup cryptkey&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# if more than 1 kernel, explicitly state value&lt;br /&gt;
mkinitfs $(ls /lib/modules/)&lt;br /&gt;
&lt;br /&gt;
grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=ALPINE --modules=&amp;quot;luks2 part_gpt cryptodisk btrfs gcry_rijndael pbkdf2 gcry_sha512&amp;quot;&lt;br /&gt;
&lt;br /&gt;
grub-mkconfig -o /boot/grub/grub.cfg&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Andar1an&amp;diff=27429</id>
		<title>User:Andar1an</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Andar1an&amp;diff=27429"/>
		<updated>2024-09-30T17:24:31Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: Full Disk Encryption - BTRFS Subvolumes + LUKS2 - Single Disk, No RAID, No Secure Boot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# WIP - Lots of references to LVM on LUKS and Secure Boot Alpine wikis - will add links and references later&lt;br /&gt;
&lt;br /&gt;
# TODO: &lt;br /&gt;
- Poweroff has some errors related to mounts - look into&lt;br /&gt;
- Validate swapfile compression and cow settings - if remounting while installing didn&#039;t work use chattrc&lt;br /&gt;
- Wiki page formatting&lt;br /&gt;
&lt;br /&gt;
# System:&lt;br /&gt;
Alpine 3.20 on Lenovo X1 Yoga Gen 4&lt;br /&gt;
&lt;br /&gt;
# Steps:&lt;br /&gt;
setup-keymap&lt;br /&gt;
setup-hostname&lt;br /&gt;
setup-interfaces&lt;br /&gt;
rc-service networking start&lt;br /&gt;
passwd&lt;br /&gt;
setup-timezone&lt;br /&gt;
setup-ntp&lt;br /&gt;
setup-sshd&lt;br /&gt;
&lt;br /&gt;
# load btrfs module, or will get missing /dev/btrfs-control warning when creating fs.&lt;br /&gt;
modprobe btrfs&lt;br /&gt;
setup-apkrepos&lt;br /&gt;
apk update&lt;br /&gt;
apk add btrfs-progs cryptsetup dosfstools mkinitfs parted&lt;br /&gt;
&lt;br /&gt;
# use optimal partition alignment for disk&lt;br /&gt;
parted -a optimal /dev/nvme0n1 -s \&lt;br /&gt;
    mklabel gpt \&lt;br /&gt;
    mkpart ESP fat32 1MiB 512MiB \&lt;br /&gt;
    mkpart luks btrfs 512MiB 100% \&lt;br /&gt;
    set 1 esp on&lt;br /&gt;
&lt;br /&gt;
# overwrite luks parition with 0&#039;s - takes a while, took me 20 min for 476 GiB&lt;br /&gt;
# dd if=/dev/urandom of=/dev/nvme0n1p2 bs=1M status=progress&lt;br /&gt;
&lt;br /&gt;
# Luks2 Optimized for security (see cryptsetup notes below):&lt;br /&gt;
cryptsetup luksFormat /dev/nvme0n1p2 -v -c aes-xts-plain64 -s 512 --hash sha512 --pbkdf pbkdf2 --iter-time 5000 --use-random &lt;br /&gt;
&lt;br /&gt;
# can verify keyslot has a key&lt;br /&gt;
# cryptsetup luksDump /dev/nvme0n1p2&lt;br /&gt;
&lt;br /&gt;
mkfs.fat -F 32 -n ESP /dev/nvme0n1p1&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 luks&lt;br /&gt;
mkfs.btrfs -L ROOT /dev/mapper/luks&lt;br /&gt;
&lt;br /&gt;
# create subvolumes &lt;br /&gt;
mount /dev/mapper/luks /mnt&lt;br /&gt;
btrfs sub create /mnt/@&lt;br /&gt;
btrfs sub create /mnt/@swap&lt;br /&gt;
btrfs sub create /mnt/@.snapshots&lt;br /&gt;
btrfs sub create /mnt/@tmp&lt;br /&gt;
btrfs sub create /mnt/@run&lt;br /&gt;
btrfs sub create /mnt/@var&lt;br /&gt;
btrfs sub create /mnt/@srv&lt;br /&gt;
btrfs sub create /mnt/@home&lt;br /&gt;
btrfs sub create /mnt/@opt&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
# following mounts will inherit primary mount options until remounted&lt;br /&gt;
mount -o ssd,noatime,space_cache=v2,compress-force=zstd:2,discard=async,subvol=@ /dev/mapper/luks /mnt&lt;br /&gt;
# Mount the sub volumes:&lt;br /&gt;
mkdir -p /mnt/swap /mnt/.snapshots /mnt/tmp /mnt/run /mnt/var /mnt/srv /mnt/home /mnt/opt&lt;br /&gt;
mount -o subvol=@home /dev/mapper/luks /mnt/home&lt;br /&gt;
mount -o subvol=@opt /dev/mapper/luks /mnt/opt&lt;br /&gt;
mount -o subvol=@tmp /dev/mapper/luks /mnt/tmp&lt;br /&gt;
mount -o subvol=@var /dev/mapper/luks /mnt/var&lt;br /&gt;
mount -o subvol=@run /dev/mapper/luks /mnt/run&lt;br /&gt;
mount -o subvol=@srv /dev/mapper/luks /mnt/srv&lt;br /&gt;
mount -o subvol=@.snapshots /dev/mapper/luks /mnt/.snapshots&lt;br /&gt;
mount -o subvol=@swap /dev/mapper/luks /mnt/swap&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/boot/efi&lt;br /&gt;
# Mount the EFI partition&lt;br /&gt;
mount /dev/nvme0n1p1 /mnt/boot/efi&lt;br /&gt;
&lt;br /&gt;
# easier to not install bootlader with setup-disk&lt;br /&gt;
BOOTLOADER=none setup-disk -m sys /mnt&lt;br /&gt;
&lt;br /&gt;
export UUID=$(blkid -s UUID -o value /dev/nvme0n1p2 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
export UUID2=$(blkid -s UUID -o value /dev/dm-0 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
export UUID3=$(blkid -s UUID -o value /dev/nvme0n1p1 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
&lt;br /&gt;
# Can modify output of setup-disk&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/mnt/etc/fstab&lt;br /&gt;
UUID=$UUID	/	btrfs	rw,noatime,compress-force=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@ 0 0&lt;br /&gt;
UUID=$UUID2	/home	btrfs	rw,relatime,compress-force=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@home 0 0&lt;br /&gt;
UUID=$UUID2	/opt	btrfs	rw,relatime,compress-force=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@opt 0 0&lt;br /&gt;
UUID=$UUID2	/tmp	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@tmp 0 0&lt;br /&gt;
UUID=$UUID2	/var	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@var 0 0&lt;br /&gt;
UUID=$UUID2	/run	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@run 0 0&lt;br /&gt;
UUID=$UUID2	/srv	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@srv 0 0&lt;br /&gt;
UUID=$UUID2	/.snapshots	btrfs	rw,ssd,noatime,nodatacow,space_cache=v2,compress-force=zstd:2,discard=async,subvol=/@.snapshots 0 0&lt;br /&gt;
UUID=$UUID2	/swap	btrfs	rw,ssd,noatime,nodatacow,compress=none,subvol=/@swap 0 0&lt;br /&gt;
UUID=$UUID3	/boot/efi	vfat	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro 0 2&lt;br /&gt;
/dev/cdrom	/media/cdrom	iso9660	noauto,ro 0 0&lt;br /&gt;
/dev/usbdisk	/media/usb	vfat	noauto	0 0&lt;br /&gt;
tmpfs	/tmp	tmpfs	nosuid,nodev	0	0&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# remount subvolumes for different mount options to be used&lt;br /&gt;
umount /mnt/swap&lt;br /&gt;
mount -o rw,ssd,noatime,nodatacow,compress=none,subvol=@swap /dev/mapper/luks /mnt/swap&lt;br /&gt;
&lt;br /&gt;
# Now create swapfile with correct subvolume options&lt;br /&gt;
# https://btrfs.readthedocs.io/en/latest/Swapfile.html&lt;br /&gt;
btrfs filesystem mkswapfile --size 20G /mnt/swap/swapfile&lt;br /&gt;
swapon /mnt/swap/swapfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Look into updating to current key options - https://wiki.archlinux.org/title/Dm-crypt/Device_encryption#Keyfiles&lt;br /&gt;
# To avoid having to type your decryption password twice every boot (once for GRUB and once for Alpine), add a keyfile to your LUKS partition. The filename is important. &lt;br /&gt;
touch /mnt/crypto_keyfile.bin&lt;br /&gt;
chmod 600 /mnt/crypto_keyfile.bin&lt;br /&gt;
dd bs=512 count=4 if=/dev/urandom of=/mnt/crypto_keyfile.bin&lt;br /&gt;
cryptsetup luksAddKey /dev/nvme0n1p2 /mnt/crypto_keyfile.bin&lt;br /&gt;
&lt;br /&gt;
# This keyfile is stored encrypted (it is in your LUKS partition), so its presence does not affect system security.&lt;br /&gt;
# Mount the required filesystems for the Grub EFI installer to do the installation:&lt;br /&gt;
# rbind is recurrsive, rslave is a mirror mount, the proc file system acts as an interface to internal data structures in the kernel. &lt;br /&gt;
&lt;br /&gt;
# see https://wiki.archlinux.org/title/Chroot section 4.3&lt;br /&gt;
mount -t proc /proc /mnt/proc&lt;br /&gt;
mount --rbind /dev /mnt/dev&lt;br /&gt;
mount --make-rslave /mnt/dev&lt;br /&gt;
mount --rbind /sys /mnt/sys&lt;br /&gt;
&lt;br /&gt;
# Then run chroot:&lt;br /&gt;
chroot /mnt&lt;br /&gt;
&lt;br /&gt;
# Install GRUB2 for EFI&lt;br /&gt;
apk add grub grub-efi efibootmgr&lt;br /&gt;
&lt;br /&gt;
# To get the UUID of your storage device into a file for later use, run this command:&lt;br /&gt;
export UUID=$(blkid -s UUID -o value /dev/nvme0n1p2 | sed -n &#039;s/.*UUID=\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/p&#039; )&lt;br /&gt;
&lt;br /&gt;
# cryptdm = device name set in cryptsetup&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/default/grub&lt;br /&gt;
GRUB_TIMEOUT=2&lt;br /&gt;
GRUB_DISABLE_SUBMENU=y&lt;br /&gt;
GRUB_DISABLE_RECOVERY=false&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;modules=sd-mod,usb-storage,btrfs,nvme cryptroot=UUID=$UUID cryptdm=luks cryptkey quiet rootfstype=btrfs&amp;quot;&lt;br /&gt;
GRUB_PRELOAD_MODULES=&amp;quot;luks2 cryptodisk part_gpt gcry_sha512 pbkdf2&amp;quot;&lt;br /&gt;
GRUB_ENABLE_CRYPTODISK=y&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# # Update mkinitfs conf modules&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/mkinitfs/mkinitfs.conf&lt;br /&gt;
features=&amp;quot;ata base ide scsi usb virtio btrfs nvme cryptsetup cryptkey&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# if more than 1 kernel, explicitly state value&lt;br /&gt;
mkinitfs $(ls /lib/modules/)&lt;br /&gt;
&lt;br /&gt;
grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=ALPINE --modules=&amp;quot;luks2 part_gpt cryptodisk btrfs gcry_rijndael pbkdf2 gcry_sha512&amp;quot;&lt;br /&gt;
&lt;br /&gt;
grub-mkconfig -o /boot/grub/grub.cfg&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Printer_Setup&amp;diff=27177</id>
		<title>Printer Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Printer_Setup&amp;diff=27177"/>
		<updated>2024-09-04T17:35:15Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: Add note about requiring root user in SystemGroup configuration for CUPS to manage printers in KDE Settings.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First, you&#039;ll need [https://en.wikipedia.org/wiki/CUPS CUPS]. If you have a &#039;&#039;Hewlett-Packard&#039;&#039; (&#039;&#039;HP&#039;&#039;) printer, add the [https://en.wikipedia.org/wiki/HP_Linux_Imaging_and_Printing HPLIP] package. Some of these packages are outside of main, and the appropriate repos will need to be configured. See tip below.&lt;br /&gt;
&lt;br /&gt;
{{cmd|# apk add cups cups-pdf cups-filters hplip}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|As with all installation processes, Alpine&#039;s [[Alpine_Linux_package_management|package management]] can guide you on the need to pull various packages from other repositories (e.g.&#039;&#039;@testing&#039;&#039;) other than the enabled &#039;&#039;main&#039;&#039; or &#039;&#039;edge&#039;&#039; repositories throughout this wiki page, as long as the other repos have been [https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Repository_pinning pinned].  For example, for Alpine version 3.7.0 on x86_64 systems, &#039;&#039;&#039;apk&#039;&#039;&#039; would have guided you to substitute in &amp;lt;code&amp;gt;cups-pdf@testing&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;hplip@testing&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Confirm cups starts. You may also set it to run at boot-up.&lt;br /&gt;
&lt;br /&gt;
{{cmd|# rc-service cupsd start}}&lt;br /&gt;
{{cmd|# rc-update add cupsd boot}}&lt;br /&gt;
&lt;br /&gt;
Go to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:631&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; with your web browser and follow the steps to &amp;quot;Add Printer&amp;quot;. It will ask you to log in to add a printer. Log in as root, then finish the steps. Once you&#039;re done, you should be able to print.&lt;br /&gt;
&lt;br /&gt;
If that doesn&#039;t work, you may also need to add HPLIP&#039;s dependencies separately. There are currently no packages for &#039;&#039;&#039;CUPS DDK&#039;&#039;&#039;, &amp;lt;code&amp;gt;hp-setup&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;foomatic&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{cmd|# apk add ghostscript py3-reportlab libjpeg net-snmp}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Expand|Modifications/sections required e.g. to address container user-case scenarios, etc.}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== configure mdev for USB printers ==&lt;br /&gt;
&lt;br /&gt;
By default USB printer with [[mdev]] would have ownership &#039;&#039;root:root&#039;&#039; and permission &#039;&#039;0660&#039;&#039;. As &#039;&#039;cupsd&#039;&#039; would try to open a libusb-based printer as &#039;&#039;lp&#039;&#039; user, it won&#039;t have permission to use the device in &#039;&#039;/dev/bus/usb&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
First let&#039;s get some info about our USB printer.&lt;br /&gt;
&lt;br /&gt;
 # lsusb.py -uU | grep Printer&lt;br /&gt;
  3-2               04b8:0007 00 1IF  [USB 2.00,   480 Mbps,   2mA] (EPSON USB2.0 Printer (Hi-speed) 55PKAZZ15776790829)&lt;br /&gt;
&lt;br /&gt;
 # grep -H &amp;quot;&amp;quot; /sys/bus/usb/devices/usb3/3-2/{id{Vendor,Product},bcdDevice}&lt;br /&gt;
 /sys/bus/usb/devices/usb3/3-2/idVendor:04b8&lt;br /&gt;
 /sys/bus/usb/devices/usb3/3-2/idProduct:0007&lt;br /&gt;
 /sys/bus/usb/devices/usb3/3-2/bcdDevice:0100&lt;br /&gt;
&lt;br /&gt;
These are important for us to distinguish our printer.&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt;&amp;gt; /etc/mdev.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
 SUBSYSTEM=usb;PRODUCT=4b8/7/100;.* root:lp 660 */lib/mdev/usbdev&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Unplug the USB cable and plug it in again. Now the USB printer device at &#039;&#039;/dev/bus/usb/&#039;&#039; will have valid ownership and permissions.&lt;br /&gt;
&lt;br /&gt;
 # ls -l /dev/bus/usb/002/011&lt;br /&gt;
 crw-rw---- 1 root lp 189, 138 Apr 14 21:19 /dev/bus/usb/002/011&lt;br /&gt;
&lt;br /&gt;
CUPS will be able now to use libusb to discover the local USB printer.&lt;br /&gt;
&lt;br /&gt;
== Desktop Environment ==&lt;br /&gt;
&lt;br /&gt;
Additionally, in a desktop environment you could proceed as follows.&lt;br /&gt;
&lt;br /&gt;
Check whether &#039;&#039;root&#039;&#039; and the user&#039;s username (&#039;&#039;yourusername&#039;&#039;) are already members of the &amp;lt;code&amp;gt;lp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lpadmin&amp;lt;/code&amp;gt; groups.  Note:  &#039;&#039;yourusername&#039;&#039; can be added to the &amp;lt;code&amp;gt;lpadmin&amp;lt;/code&amp;gt; group if they should be able to administer the CUPS system with their password.&lt;br /&gt;
&lt;br /&gt;
 $ groups root&lt;br /&gt;
root bin daemon sys adm disk wheel floppy dialout tape video&lt;br /&gt;
 $ groups &#039;&#039;yourusername&#039;&#039;&lt;br /&gt;
yourusername disk wheel audio cdrom dialout video users plugdev&lt;br /&gt;
&lt;br /&gt;
If not, add them:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# adduser root lp&lt;br /&gt;
&amp;amp;#35; adduser root lpadmin&lt;br /&gt;
&amp;amp;#35; adduser &#039;&#039;yourusername&#039;&#039; lp&lt;br /&gt;
&amp;amp;#35; adduser &#039;&#039;yourusername&#039;&#039; lpadmin}}&lt;br /&gt;
&lt;br /&gt;
Start CUPS (&#039;&#039;&#039;cupsd&#039;&#039;&#039;) and make it persist between boots;  then reboot:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-service cupsd start&lt;br /&gt;
&amp;amp;#35; rc-update add cupsd&lt;br /&gt;
&amp;amp;#35; reboot}}&lt;br /&gt;
&lt;br /&gt;
== Managing Printers via KDE Plasma Settings ==&lt;br /&gt;
&lt;br /&gt;
To manage printers from KDE Plasma Settings, it is required to add &amp;quot;root&amp;quot; to SystemGroup in &#039;&#039;&#039;&#039;&#039;/etc/cups/cups-files.conf&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
e.g. &lt;br /&gt;
{{Cmd|&lt;br /&gt;
SystemGroup root lpadmin}}&lt;br /&gt;
&lt;br /&gt;
== Managing Printers via Command Line ==&lt;br /&gt;
&lt;br /&gt;
Credit to ArchWiki&#039;s excellent [https://wiki.archlinux.org/index.php/CUPS CUPS] page for guidance with the following basic steps.&lt;br /&gt;
&lt;br /&gt;
=== Locate your printer ===&lt;br /&gt;
&lt;br /&gt;
With your printer connected and powered on, determine the &#039;&#039;URI&#039;&#039; for your printer.  Depending on whether the connection is via &#039;&#039;&#039;usb&#039;&#039;&#039; or &#039;&#039;&#039;parallel&#039;&#039;&#039; ports, the URI will carry a &amp;lt;code&amp;gt;usb://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;parallel:/&amp;lt;/code&amp;gt; prefix.&lt;br /&gt;
&lt;br /&gt;
 $ lpinfo -v #&lt;br /&gt;
 network lpd&lt;br /&gt;
 network socket&lt;br /&gt;
 network beh&lt;br /&gt;
 file cups-brf:/&lt;br /&gt;
 direct usb://HP/LaserJet%202200&lt;br /&gt;
 network ipp&lt;br /&gt;
 network ipps&lt;br /&gt;
 network https&lt;br /&gt;
 network http&lt;br /&gt;
 direct hp&lt;br /&gt;
&lt;br /&gt;
In the example above, the URI is &amp;lt;code&amp;gt;usb://HP/LaserJet%202200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Find a .ppd or .ppd.gz &#039;&#039;driver&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
If your printer supports &#039;&#039;IPP Everywhere&#039;&#039; -- most recent models do -- see the &#039;&#039;driverless&#039;&#039; command in &#039;&#039;cups-filters&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $ driverless ipp_uri &amp;gt; printer.ppd&lt;br /&gt;
&lt;br /&gt;
or just pass &#039;&#039;-m everywhere&#039;&#039; to &#039;&#039;lpadmin&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Otherwise, you could list all the drivers available by running &amp;lt;code&amp;gt;lpinfo -m&amp;lt;/code&amp;gt; and then searching through the results to find a .ppd or .ppd.gz specific to your printer.  A quick solution is to use the &amp;lt;code&amp;gt;--make-and-model&amp;lt;/code&amp;gt; flag and &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; to filter the results by plugging in your printer&#039;s make, model and series in this fashion:&lt;br /&gt;
&lt;br /&gt;
 $ lpinfo --make-and-model &amp;quot;&#039;&#039;make_and_model_names&#039;&#039;&amp;quot; -m | grep -i &#039;&#039;printer_series&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
*Search for the term &#039;&#039;HP&#039;&#039; to find instances of &#039;&#039;Hewlett-Packard&#039;&#039;.&lt;br /&gt;
*You do not need to state the &amp;lt;code&amp;gt;printer_series&amp;lt;/code&amp;gt; in whole if at all e.g. &#039;&#039;2200&#039;&#039; may be preferable to searching for &#039;&#039;2200M&#039;&#039;, etc.}}&lt;br /&gt;
&lt;br /&gt;
For example, type:&lt;br /&gt;
&lt;br /&gt;
 $ lpinfo --make-and-model &amp;quot;HP LaserJet&amp;quot; -m | grep -i 2200&lt;br /&gt;
&lt;br /&gt;
From the results, you might select the following .ppd &#039;&#039;driver&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 drv:///hp/hpcups.drv/hp-laserjet_2200_series.ppd&lt;br /&gt;
&lt;br /&gt;
If required, additional drivers can be obtained by installing {{Pkg|gutenprint}}, and running the &amp;lt;code&amp;gt;lpinfo&amp;lt;/code&amp;gt; search again.  These may not specify &amp;lt;code&amp;gt;.ppd&amp;lt;/code&amp;gt; names.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add gutenprint gutenprint-doc}}&lt;br /&gt;
&lt;br /&gt;
=== Configure a queue ===&lt;br /&gt;
&lt;br /&gt;
Create a queue using a &#039;&#039;queue_name&#039;&#039; of your choice.  Your selected printer&#039;s name is an obvious choice, but do not use spaces.&amp;lt;BR&amp;gt;&lt;br /&gt;
You will also need to be root or use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;, and you will also need to plug in the &#039;&#039;URI&#039;&#039; and the .ppd &#039;&#039;driver&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 # lpadmin -p &#039;&#039;queue_name&#039;&#039; -E -v &amp;quot;&#039;&#039;uri&#039;&#039;&amp;quot; -m &#039;&#039;driver&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With this example, you could set as follows, but there are other solutions.&lt;br /&gt;
&lt;br /&gt;
 # lpadmin -p HP_LaserJet_2200 -E -v &amp;quot;usb://HP/LaserJet%202200&amp;quot; -m drv:///hp/hpcups.drv/hp-laserjet_2200-pcl3.ppd&lt;br /&gt;
&lt;br /&gt;
This printer queue could be set as &#039;&#039;&#039;default&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 # lpoptions -d HP_LaserJet_2200&lt;br /&gt;
&lt;br /&gt;
Printer settings can typically be set in your GUI application&#039;s &#039;&#039;&#039;Print&#039;&#039;&#039; menu or by examining the CUPS [https://www.cups.org/doc/man-lpoptions.html lpoptions] page.  If you have a single queue, the setting options available (such as page type, duplex, etc.) for your queue can simply be &#039;&#039;&#039;listed&#039;&#039;&#039; by using the &#039;&#039;&#039;-l&#039;&#039;&#039; flag.  Asterisks(*) indicate current settings:&lt;br /&gt;
&lt;br /&gt;
 # lpoptions -l&lt;br /&gt;
 PageSize/Media Size: Card3x5 Hagaki Photo4x6 A6 Photo5x7 Card5x8 Oufuku A5 B5 JB5 Executive 16k Letter *A4 ExecutiveJIS FLSA Legal EnvA2 EnvC6 EnvChou4 EnvMonarch EnvDL Env10 EnvChou3 EnvC5 EnvB5 Custom.WIDTHxHEIGHT&lt;br /&gt;
 Duplex/Double-Sided Printing: DuplexNoTumble DuplexTumble *None&lt;br /&gt;
 InputSlot/Media Source: *Auto PhotoTray Upper Lower Envelope LargeCapacity Manual MPTray&lt;br /&gt;
 ColorModel/Output Mode: *Gray&lt;br /&gt;
 MediaType/Media Type: *Plain&lt;br /&gt;
 OutputMode/Print Quality: *Normal Draft Best&lt;br /&gt;
 OptionDuplex/Duplexer Installed: *False True&lt;br /&gt;
&lt;br /&gt;
If there is only one queue, &#039;&#039;&#039;options&#039;&#039;&#039; can be set by simply using &#039;&#039;&#039;-o&#039;&#039;&#039; flags for each setting:&lt;br /&gt;
&lt;br /&gt;
 # lpoptions -o PageSize=Legal -o Duplex=DuplexNoTumble&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.cups.org/documentation.html CUPS documentation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Printers]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Bluetooth&amp;diff=27141</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Bluetooth&amp;diff=27141"/>
		<updated>2024-08-26T18:22:56Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft|work in progress}}&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Bluetooth Bluetooth] is a standard for the short-range wireless interconnection of cellular phones, computers, and other electronic devices. [https://www.bluez.org/ BlueZ] is an implementation of the Bluetooth protocol stack for Linux, and it is provided by the {{Pkg|bluez}} package.&lt;br /&gt;
&lt;br /&gt;
This article describes the basic installation of Bluetooth controllers and devices.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites and Basic Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
{{todo|test bluetooth with [[mdev]]}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|eudev}} should be installed and setup:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# setup-devd udev}}&lt;br /&gt;
&lt;br /&gt;
=== Basic Installation ===&lt;br /&gt;
&lt;br /&gt;
Basic installation is as follows:&lt;br /&gt;
&lt;br /&gt;
# Install {{Pkg|bluez}}&lt;br /&gt;
#* Optionally install {{Pkg|bluez-deprecated}} if you need deprecated tools like &amp;lt;code&amp;gt;hcitool&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load the &amp;lt;code&amp;gt;btusb&amp;lt;/code&amp;gt; kernel module&lt;br /&gt;
# Add user to the &amp;lt;code&amp;gt;lp&amp;lt;/code&amp;gt; group&lt;br /&gt;
# Start and enable the Bluetooth service&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add bluez&lt;br /&gt;
&amp;amp;#35; apk add bluez-deprecated&lt;br /&gt;
&amp;amp;#35; modprobe btusb&lt;br /&gt;
&amp;amp;#35; adduser $USER lp&lt;br /&gt;
&amp;amp;#35; rc-service bluetooth start&lt;br /&gt;
&amp;amp;#35; rc-update add bluetooth default}}&lt;br /&gt;
&lt;br /&gt;
Now, check the state of the Bluetooth radio transmitter using &amp;lt;code&amp;gt;rfkill&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|$ rfkill list bluetooth}}&lt;br /&gt;
&lt;br /&gt;
It should return something similar to:&lt;br /&gt;
&lt;br /&gt;
 0: hci0: Bluetooth&lt;br /&gt;
         Soft blocked: no&lt;br /&gt;
         Hard blocked: no&lt;br /&gt;
&lt;br /&gt;
If the device is listed as blocked, it can be unblocked using the same tool:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rfkill unblock bluetooth}}&lt;br /&gt;
&lt;br /&gt;
{{Note|It may be necessary to restart the Bluetooth service before continuing.}}&lt;br /&gt;
&lt;br /&gt;
=== Front-ends ===&lt;br /&gt;
&lt;br /&gt;
There are several front-ends available:&lt;br /&gt;
&lt;br /&gt;
* The {{Pkg|bluez}} comes with the &amp;lt;code&amp;gt;bluetoothctl&amp;lt;/code&amp;gt; front-end&lt;br /&gt;
* {{Pkg|blueman}}: a full-featured Bluetooth manager&lt;br /&gt;
* {{Pkg|bluedevil}}: the [[KDE]] Bluetooth manager&lt;br /&gt;
* {{Pkg|bluetuith}}: simple text-based bluetooth management user interface&lt;br /&gt;
* {{Pkg|gnome-bluetooth}}: the [[GNOME]] Bluetooth manager&lt;br /&gt;
&lt;br /&gt;
== Pairing ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;bluetoothctl&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Begin by starting &amp;lt;code&amp;gt;bluetoothctl&amp;lt;/code&amp;gt; and follow these basic steps:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|$ bluetoothctl}}&lt;br /&gt;
&lt;br /&gt;
The prompt should display:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;#&lt;br /&gt;
&lt;br /&gt;
List the available controllers:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# list&lt;br /&gt;
&lt;br /&gt;
Display information about a controller:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# show &#039;&#039;controller_mac_address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set the default controller:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# select &#039;&#039;controller_mac_address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Power on the controller:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# power on&lt;br /&gt;
&lt;br /&gt;
Enable the agent and set it as default:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# agent on&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# default-agent&lt;br /&gt;
&lt;br /&gt;
Set the controller as discoverable (temporarily for 3 minutes) and pairable:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# discoverable on&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# pairable on&lt;br /&gt;
&lt;br /&gt;
Scan for devices:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# scan on&lt;br /&gt;
&lt;br /&gt;
Put the device into pairing mode. This generally involves pressing a button or a combinations of buttons, usually for several seconds.&lt;br /&gt;
&lt;br /&gt;
Discover the device MAC address:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# devices&lt;br /&gt;
&lt;br /&gt;
Pair with the device:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# pair &#039;&#039;device_mac_address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enter the PIN if prompted:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;[agent]&amp;lt;/span&amp;gt; PIN code: ####&lt;br /&gt;
&lt;br /&gt;
Trust the device:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# #trust &#039;&#039;device_mac_address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Connect to the device:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# connect &#039;&#039;device_mac_address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Display information about the device:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# info &#039;&#039;device_mac_address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The device is now paired:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# quit&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Set adapter power state ===&lt;br /&gt;
&lt;br /&gt;
If you would like the adapter to not be automatically enabled (e.g. on a portable device where you wish to save battery), set &amp;lt;code&amp;gt;AutoEnable=false&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;[Policy]&amp;lt;/code&amp;gt; section:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/bluetooth/main.conf|[Policy]&lt;br /&gt;
...&lt;br /&gt;
AutoEnable&amp;amp;#61;false&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
=== Battery Reporting ===&lt;br /&gt;
&lt;br /&gt;
An experimental feature can be enabled in order to report device battery level:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/bluetooth/main.conf|[General]&lt;br /&gt;
...&lt;br /&gt;
Experimental&amp;amp;#61;true&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
Due to the variety of available Bluetooth hardware it is possible that you receive errors while attempting to install, activate, or find your Bluetooth device.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No default controller available&amp;quot; error ===&lt;br /&gt;
&lt;br /&gt;
After having followed these instructions, or others, you run &amp;lt;code&amp;gt;bluetoothctl&amp;lt;/code&amp;gt; and encounter the following scenario:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# list&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;[bluetooth]&amp;lt;/span&amp;gt;# show&lt;br /&gt;
 No default controller available&lt;br /&gt;
&lt;br /&gt;
One possible solution is that you are missing firmware drivers.&lt;br /&gt;
&lt;br /&gt;
Try running the following command to discover the source of the issue:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# dmesg &amp;amp;#124; grep -i bluetooth &amp;amp;#124; grep -i firmware}}&lt;br /&gt;
&lt;br /&gt;
There are many firmware packages available that could likely solve the this problem (see {{Pkg|linux-firmware-*}}).&lt;br /&gt;
&lt;br /&gt;
Another possible solution is to install {{Pkg|hidapi}} and add load the module:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add hidapi&lt;br /&gt;
&amp;amp;#35; modprobe uhid}}&lt;br /&gt;
&lt;br /&gt;
It may also be necessary to create configuration to load the uhid and btusb kernel modules on boot:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/modules-load.d/uhid.conf&lt;br /&gt;
&amp;amp;#35;Load uhid kernel module:&lt;br /&gt;
uhid&lt;br /&gt;
EOF}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/modules-load.d/btusb.conf&lt;br /&gt;
&amp;amp;#35;Load btusb kernel module:&lt;br /&gt;
btusb&lt;br /&gt;
EOF}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;org.bluez.Error.NotAvailable br-connection-profile-unavailable&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The error `br-connection-profile-unavailable` is sometimes produced when trying to connect a device which requires the &amp;lt;code&amp;gt;uhid&amp;lt;/code&amp;gt; kernel module.&lt;br /&gt;
&lt;br /&gt;
Try running &amp;lt;code&amp;gt;modprobe uhid&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;modprobe uhid&amp;lt;/code&amp;gt; kernel module is required for devices with drives that are implemented in userspace. This often includes keyboards and the volume buttons on headphones (which are sometimes presented to the OS as a keyboard).&lt;br /&gt;
&lt;br /&gt;
=== Unable to control Bluetooth speaker volume / Bluetooth output is muted (Pulseaudio) ===&lt;br /&gt;
&lt;br /&gt;
It is possible to automatically switch audio output and volume control to last connected device.&lt;br /&gt;
&lt;br /&gt;
This can solve the problem of controlling the speaker volume when switching between Bluetooth devices.&lt;br /&gt;
&lt;br /&gt;
Append the following lines at the end of the {{Path|/etc/pulse/default.pa}}:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/pulse/default.pa|...&lt;br /&gt;
&amp;amp;#35;##Automatically switch audio to the most recently connected device (Bluetooth, HDMI, USB)&lt;br /&gt;
load-module module-switch-on-connect}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[PulseAudio#Bluetooth|PulseAudio with Bluetooth]]&lt;br /&gt;
* [[PipeWire#Bluetooth_audio|PipeWire with Bluetooth]]&lt;br /&gt;
* [https://wiki.postmarketos.org/wiki/Bluetooth Bluetooth entry on PostmarketOS Wiki]&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Bluetooth Bluetooth entry on Gentoo Wiki]&lt;br /&gt;
* [https://wiki.archlinux.org/title/Bluetooth Bluetooth entry on ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Multimedia]]&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=NetworkManager&amp;diff=27140</id>
		<title>NetworkManager</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=NetworkManager&amp;diff=27140"/>
		<updated>2024-08-25T19:58:04Z</updated>

		<summary type="html">&lt;p&gt;Andar1an: Add todo item for autoconnect of wifi network on boot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://networkmanager.dev/ NetworkManager] is a program  that provides automatic detection and configuration for systems to connect to networks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add {{Pkg|networkmanager}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Networkmanager needs to have [[eudev|udev]] to be setup properly. The busybox implementation mdev is not sufficient. You can set up proper udev with:&lt;br /&gt;
{{Cmd|# setup-devd udev}}&lt;br /&gt;
Otherwise your network devices can be listed as (strictly-)unmanaged.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
There are multiple interfaces available for NetworkManager:&lt;br /&gt;
&lt;br /&gt;
* TUI: {{Pkg|networkmanager-tui}}, a curses-based interface (run &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Command line: {{Pkg|networkmanager-cli}} (run &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;)&lt;br /&gt;
* GUI: {{Pkg|plasma-nm}} for Plasma integration and applet&lt;br /&gt;
* GUI: {{Pkg|network-manager-applet}} for a GTK system tray applet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to install an additional package if you want NetworkManager to connect to wifi:&lt;br /&gt;
{{Cmd|# apk add {{Pkg|networkmanager-wifi}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installation start NetworkManager:&lt;br /&gt;
{{Cmd|# rc-service networkmanager start}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then set it to autostart the service on boot:&lt;br /&gt;
{{Cmd|# rc-update add networkmanager default}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also your user needs to be in the &amp;lt;code&amp;gt;plugdev&amp;lt;/code&amp;gt; group:&lt;br /&gt;
{{Cmd|# adduser &amp;lt;YourUsername&amp;gt; plugdev}}&lt;br /&gt;
&lt;br /&gt;
{{Note|you will need to log out for the new group to take effect}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wired networks ==&lt;br /&gt;
&lt;br /&gt;
If wired networks do not appear or you get an error message like &amp;quot;Could not activate connection: Connection &#039;Ethernet connection 1&#039; is not available on device eth0 because device is strictly unmanaged&amp;quot;, add the following to {{path|/etc/NetworkManager/NetworkManager.conf}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ifupdown]&lt;br /&gt;
managed=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wireless networks ==&lt;br /&gt;
&lt;br /&gt;
==== wpa_supplicant backend ====&lt;br /&gt;
&lt;br /&gt;
{{Todo|([[KDE|KDE Plasma]] Desktop) find out if it is possible to prevent requesting the password for &#039;&#039;&#039;KDE Wallet&#039;&#039;&#039; on login}}&lt;br /&gt;
{{Todo|([[KDE|KDE Plasma]] Desktop) for autoconnect to wifi network on start, it appears that the &amp;quot;all users may connect to this network&amp;quot; option must be selected in settings, as root is not a choice to allow. There are likely better workarounds}}&lt;br /&gt;
&lt;br /&gt;
* Follow: [[Wi-Fi#wpa supplicant]] and [[Wi-Fi#Automatic Configuration on System Boot]]&lt;br /&gt;
{{Note|{{Pkg|wpa_supplicant}} configuration might not be required, if it isn&#039;t it may be a good idea to have it setup just as a fallback}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now open {{path|/etc/NetworkManager/NetworkManager.conf}} in a text editor and change it to something like this:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/NetworkManager/NetworkManager.conf|&amp;lt;nowiki&amp;gt;[main] &lt;br /&gt;
dhcp=internal&lt;br /&gt;
plugins=ifupdown,keyfile&lt;br /&gt;
&lt;br /&gt;
[ifupdown]&lt;br /&gt;
managed=true&lt;br /&gt;
&lt;br /&gt;
[device]&lt;br /&gt;
wifi.scan-rand-mac-address=yes&lt;br /&gt;
wifi.backend=wpa_supplicant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|if these options dont work on your system you can change them as necessary}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to stop conflicting services:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-service networking stop}}&lt;br /&gt;
{{Cmd|# rc-service wpa_supplicant stop}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now restart NetworkManager:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now connect to a network using one of the interfaces mentioned in [[NetworkManager#Installation|Installation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that connects and stays connected with no issues enable the &amp;lt;code&amp;gt;networkmanager&amp;lt;/code&amp;gt; service and disable the &amp;lt;code&amp;gt;networking&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;wpa_supplicant&amp;lt;/code&amp;gt; boot services:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-update add networkmanager}}&lt;br /&gt;
{{Cmd|# rc-update del networking boot}}&lt;br /&gt;
{{Cmd|# rc-update del wpa_supplicant boot}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== iwd backend ====&lt;br /&gt;
&lt;br /&gt;
NetworkManager supports wireless networks through {{Pkg|iwd}}, however, consider [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=opened&amp;amp;search=iwd existing issues] before using it. After installation, enable the server and restart NetworkManager:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rc-service iwd start&lt;br /&gt;
rc-service networkmanager restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use {{Pkg|iwd}} though, you&#039;ve have to edit NetworkManager&#039;s configuration because it still defaults to {{Pkg|wpa_supplicant}} instead. Add the following to {{Path|/etc/NetworkManager/NetworkManager.conf}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[device]&lt;br /&gt;
wifi.backend=iwd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VPN support ==&lt;br /&gt;
Since version 1.16, NetworkManager has support for Wireguard[https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/NEWS?id=1.16.0].&lt;br /&gt;
&lt;br /&gt;
Support for other VPN types is provided by plugins. They are provided in the following packages:&lt;br /&gt;
* {{Pkg|networkmanager-openvpn}} for OpenVPN&lt;br /&gt;
&lt;br /&gt;
== nm-applet ==&lt;br /&gt;
=== not authorized to control networking ===&lt;br /&gt;
&lt;br /&gt;
You can enable all users to edit connections without adding polkit.&lt;br /&gt;
First, make the &amp;lt;code&amp;gt;conf.d&amp;lt;/code&amp;gt; directory for networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# mkdir -p /etc/NetworkManager/conf.d}}&lt;br /&gt;
&lt;br /&gt;
Then, add following content to {{path|/etc/NetworkManager/conf.d/any-user.conf}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[main]&lt;br /&gt;
auth-polkit=false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, restart networkmanager:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-service networkmanager restart}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Andar1an</name></author>
	</entry>
</feed>