# 13. Hardware and peripherals ## Displays alloy display lists the outputs sway is driving, with their scale and whether they are on. `s` walks the scale ladder. The console writes what it changes to `~/.config/sway/config.d/50-display.conf`, which the shipped sway config includes after the system drop-ins, so your setting beats the image's. A fresh install seeds that file at install time by reading the panel's size out of EDID and snapping to the nearest scale, so a high-density laptop boots at a sensible scale rather than at 1.0. A panel that cannot be read seeds nothing, which means 1.0 and one keypress from correct. Mode picking (refresh rate and resolution) is not built. Multi-output setups are the untested case: nothing has attached a second display to an Alloy machine yet, so if you do, expect the display view to be the rough part. Anything the view does not cover is a sway `output` line in that same file. `swaymsg -t get_outputs` names your outputs. ## Audio alloy audio Two panes: the streams that are playing and the devices they could play through. Move a stream from one to the other, change volumes, pick defaults. The Fn keys handle the everyday case with an on-screen indicator. Underneath is PipeWire, and `pactl` is the command the view shows you. ## Brightness The brightness keys work, through the same on-screen indicator. If they do not, see the note in chapter 14: it takes two separate grants (a udev rule and your account being in the `video` group) and either one alone leaves the keys dead silently. Screen dimming before the lock is separate, and handled by `alloy-dim` from the idle configuration. ## Power and idle The shipped idle behaviour, in `~/.config/sway/config`: | After | What happens | |---|---| | 4.5 minutes | The screen dims. Move the mouse or type and it comes back | | 5 minutes | swaylock takes over | | 10 minutes | Displays power off | | Lid close or suspend | Always locks first | The dim stage is the closest thing to a grace period on offer: upstream swaylock has no `--grace` flag, and thirty seconds of dimmed screen is enough to notice before the lock arrives. Fullscreen mpv, imv, and the browser hold the lock off. A fullscreen terminal deliberately does not: walking away from a shell should not leave the machine unlocked indefinitely. ## Fingerprint reader fprintd is installed, and nothing is enrolled, so nothing asks for a finger until you do: fprintd-enroll Once enrolled, the lock screen, the greeter and `run0` all accept it from that one step, because they share a PAM stack. A finger that does not match, a reader that is busy, and a user with nothing enrolled all fall through to the password prompt. ## Printing Alloy prints to **IPP Everywhere (driverless) printers and nothing else**. There are no vendor driver packages in the image, and there will not be. Nearly every printer sold since about 2015 speaks the protocol. A driverless printer on the same network appears by itself; discovery over mDNS is already set up. The surface for anything else is CUPS' own web interface: http://localhost:631 The daemon is socket-activated, so nothing runs until something connects to it. A printer that needs a vendor driver is not supported. Saying so here is better than you discovering it at the moment you need to print. ## Scanning Not shipped. Scanning means per-device backends and USB permission work with opaque failures, and no one has needed one yet. If you do: rpm-ostree install sane-backends Worth trying first: most network scanners scan to a folder or to email with no host driver at all. ## Bluetooth bluez is installed and running. PipeWire's Bluetooth plugins are in the image, LC3 and AAC included, so a paired headset plays. alloy bluetooth Put the device in pairing mode, press `s` to scan, move to the `nearby` tab, and press `p`. The terminal is handed to `bluetoothctl` while it scans and while it pairs, so if the device wants a passkey confirmed you answer it there. The screen is built around a distinction Bluetooth panels usually hide. bluez keeps five separate facts about every device: | Field | What it means | |---|---| | paired | Keys have been exchanged | | bonded | Those keys were written down, so they survive a reboot | | trusted | bluez will accept a connection this device starts | | blocked | bluez refuses the device outright | | connected | A link is up right now | They move independently, and the one that catches people is trusted. Pairing does not set it. A device that is paired and untrusted works when you connect it by hand and will not come back on its own, which is what "Bluetooth keeps forgetting my mouse" usually is. Press `t` on it. The detail block at the bottom shows all five for whatever is selected, along with a sentence saying what that combination means and which key changes it, and the `bluetoothctl info` command it read them from. Nothing on the screen happens on its own. A connected headset does not take over your audio; press `d` if you want it to be the default sink. If the adapter is down, `w` powers it on. If a hardware switch is blocking the radio, the screen says so rather than offering a key that cannot work. ## USB storage There is no automounter. Plugging in a stick makes the kernel see it and nothing else happens on screen. lsblk run0 mkdir -p /mnt/stick run0 mount /dev/sdX1 /mnt/stick # and when you are done run0 umount /mnt/stick This is a known gap rather than a position. ## Locale and keymap Both are rows on the System tab of `alloy settings`, fronting `localectl`. The keymap row works as you would expect: the image carries the full `kbd` keymap set, so the row lists what is really there. Locale is the one to know about. The image ships `glibc-minimal-langpack` and no language packs at all, so the only locale installed is `C.UTF-8` and that is what the system formats and sorts in. The locale row shows this and is not settable, because there is nothing to pick between. To get another locale, layer its `glibc-langpack-*` package (chapter 7) or add it to the Containerfile and rebuild; the row turns settable on its own once a second locale is present.