Re: Playing a sound when initrd wants a password
On 2024-01-26, Nicolas George <george@nsup.org> wrote:
> Curt (12024-01-26):
>> A play-sound.timer unit file in /usr/lib/systemd/system-generators/initrd
>> directory.
>
> I see no mention of this directory on the web. Where did yo find the
> idea of using it, I want to check the doc.
I guess that path should've been /usr/local/lib/systemd/system-generators/*.
https://manpages.debian.org/testing/systemd/systemd.generator.7.en.html
> And what should I put in the timer file to express “when a password is
> asked”?
> In fact, what relation do you see between a timer and cryptsetup asking
> for a password?
>
**Step 1: Create the Timer Unit File**
1. Create a timer unit file named `play-sound-cryptsetup.timer` in the
`/usr/local/lib/systemd/system-generators/initrd` directory.
2. Add the following content to the `play-sound-cryptsetup.timer` file:
```
[Unit]
Description=Play sound when cryptsetup prompts for a password
[Timer]
OnBootSec=0
[Install]
WantedBy=initrd.target
```
This timer will be triggered immediately after the initrd is loaded, ensuring
the sound is played at the very beginning of the boot process.
**Step 2: Create the Service Unit File**
1. Create a service unit file named `play-sound-cryptsetup.service` in the same
directory as the timer unit file (`/usr/local/lib/systemd/system-generators/initrd`).
2. Add the following content to the `play-sound-cryptsetup.service` file:
```
[Unit]
Description=Play sound when cryptsetup prompts for a password
[Service]
Type=oneshot
ExecStart=/usr/bin/cryptsetup --key-file /dev/null open-dialog cryptluks
ExecStartPost=/bin/play -q /path/to/your/sound.wav
```
Replace `cryptluks` with the actual device name of your encrypted partition.
**Step 3: Create the Initrd Image**
1. Build the initrd image using the `mkinitrd` tool:
```
mkinitrd -f /boot/initramfs-$(uname -r).img -v
```
2. Update the initrd image to be used by systemd:
```
sudo update-initramfs -u
```
**Step 4: Enable and Start the Timer**
1. Enable the timer to ensure it runs every time the system boots:
```
sudo systemctl enable play-sound-cryptsetup.timer
```
2. Start the timer to play the sound immediately:
```
sudo systemctl start play-sound-cryptsetup.timer
```
Now, every time you boot your system and cryptsetup prompts for a password, the
specified sound file (`/path/to/your/sound.wav`) will play.
(Anyway, this is what my personal robot explained to me and may be subject to
imperfection and error.)
Reply to: