以下は、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ユニットは、gdmユーザーコンテキストでpulseaudioが開始されていることを確認し、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にはシステムセッションまたは呼び出し元ユーザーのセッションに接続するための制限があるため、エラーをチェックするのは少し難しいです。sudoを使用すると、gdmを呼び出しユーザーに簡単にできますが、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ではうまくいかない理由はわかりません。