这是一种使用从gdm用户的主目录运行的systemd用户单元的方法。
将以下文件另存为/var/lib/gdm3/.config/systemd/user/drumroll.service:
[Unit]
Description=Drumroll
Requires=pulseaudio.socket
After=systemd-user-sessions.service
[Service]
Type=simple
Restart=no
ExecStart=/usr/bin/paplay /usr/share/sounds/ubuntu/stereo/system-ready.ogg
[Install]
WantedBy=default.target
上面的systemd单元应确保Pulseaudio已在gdm用户上下文中启动并执行paplay命令(我没有尝试过canberra-gtk-play,但我认为它也能正常工作)。
After=systemd-user-sessions.service仅在系统准备好用户登录后才能使服务启动。(请参阅http://manpages.ubuntu.com/manpages/artful/man8/systemd-user-sessions.service.8.html)
然后执行:
$ sudo mkdir -p /var/lib/gdm3/.config/systemd/user/default.target.wants
$ sudo ln -s /var/lib/gdm3/.config/systemd/user/drumroll.service /var/lib/gdm3/.config/systemd/user/default.target.wants/drumroll.service
$ sudo chown gdm:gdm /var/lib/gdm3/.config/systemd/user/{drumroll.service,default.target.wants}
这些最后的命令使gdm用户的systemd会话启动时,设备自动启动。
检查错误有点棘手,因为systemctl具有连接到系统会话或主叫用户会话的限制。要使gdm成为主叫用户,使用sudo很容易,但是需要设置一些环境以使其能够连接到其systemd用户会话:
$ sudo -u gdm XDG_RUNTIME_DIR="/run/user/$(id -u gdm)" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status drumroll
● drumroll.service - Drumroll
Loaded: loaded (/var/lib/gdm3/.config/systemd/user/drumroll.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2018-06-26 23:35:05 CEST; 36min ago
Process: 1238 ExecStart=/usr/bin/paplay /usr/share/sounds/ubuntu/stereo/system-ready.ogg (code=exited, status=0/SUCCES
Main PID: 1238 (code=exited, status=0/SUCCESS)
我没有在17.10上尝试过,但在18.04上尝试过,但是我看不出它在17.10上无法正常工作的原因。