منبع اصلی نوشتار زیر در این لینک قرار دارد

صداهای مختلف برای کارهای مختلف

در این مطلب میخوایم سعی کنیم صداهای مختلفی برای کارهای زیر تعریف کنیم تا تجربه ی لذت‌بخش تری در کار با کامپیوتر لینوکسیمون داشته باشیم:
  • صدای startup وقتی که وارد دسکتاپ میشیم
  • صدای shutdown وقتی که کامپیوتر رو خاموش یا ری‌استارت میکنیم
  • صدای logout وقتی که از دسکتاپ خارج میشیم
  • صدای lock و unlock شدن دسکتاپ
  • صدای باز و بسته شدن مانیتور لپتاپ! یا اصطلاحا Lid
  • پخش صدا هنگام فشردن دکمه ی پاور
هر کدوم اینها روش خودش رو داره. توجه کنید که ما از Manjaro و دسکتاپ Gnome استفاده میکنیم. بنابراین ممکنه برای توزیع و دسکتاپ شما تفاوت داشته باشه.
و نکته دیگه اینکه ما برای پخش صدا از aplay استفاده میکنیم که بخشی از alsa است. بنابراین در هر لینوکسی که صدا ازش در میاد وجود داره! اما توجه کنید که فایلهای شما باید wav باشند. اگر فایل شما مثلا mp3 هست میتونید به راحتی با کمک ffmpeg اون رو به wav تبدیل کنید:
ffmpeg -i '/path-to-sound-file/startup.mp3'  '/path-to-sound-file/startup.wav'


من از صداهای پیشفرض ویندوز ۷ استفاده کردم! صداهای دلنشین و قشنگی داره. میتونید با یک جست و جوی ساده مثلا از اینجا دانلود کنید و فایلهای مورد نظرتون رو در مسیری که میخواید قرار بدید. مثلا میشه اونها رو در مسیر usr/share/sounds/win7/ قرار داد.

صدای startup وقتی که وارد دسکتاپ میشیم
خب این خیلی ساده است و ربطی به توزیع و دسکتاپ خاصی نداره. به راحتی دستور زیر رو در استارتاپ دسکتاپ خودتون به روشهایی که بلد هستید قرار بدید:
aplay '/usr/share/sounds/win7/startup.wav'

قاعدتا به جای قسمت نارنجی باید مسیر فایل صدای مورد نظرتون رو جایگزین کنید.

صدای shutdown وقتی که کامپیوتر رو خاموش یا ری‌استارت میکنیم
روشی که برای این هدف استفاده میکنیم در توزیع هایی عملی است که از systemd استفاده میکنند. البته اکثر توزیع های امروزی همینجوری هستند. ما یک سرویس درست میکنیم که درست قبل از خروج از سیستم عامل اجرا بشه و دستور مورد نظر ما رو اجرا کنه، که در اینجا پخش یک صدا است.
sudo gedit /etc/systemd/system/shutdown-sound.service
--------------------------------


[Unit]
Description=Play sound before shutdown

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/usr/local/bin/sound-shutdown

[Install]
WantedBy=multi-user.target
و بعد میبایست این سرویس رو فعال کنیم:
sudo systemctl enable shutdown-sound
sudo systemctl start shutdown-sound


قسمت نارنجی بالا در واقع اسکریپتی است که صدا رو پخش میکنه. چیز خاصی نداره. اسکریپت رو در مسیر مورد نظرتون با این محتوی ایجاد کنید و مجوز اجرایی هم بهش بدید. توجه کنید که مسیر فایل صدا رو هم در اسکریپت زیر درست تعیین کنید.
sudo gedit /usr/local/bin/sound-shutdown
-------------------------------

#!/bin/bash
aplay  '/usr/share/sounds/win7/shutdown.wav'


صدای logout وقتی که از دسکتاپ خارج میشیم

این روشی که بکار میبریم مختص gdm هست. یعنی login manager مخصوص گنوم. اگر از lightdm یا xdm یا چیز دیگه ای استفاده میکند دنبال روش خودشون بگردید. برای gdm کافیه فایل زیر رو باز کنیم و دستور پخش صدا رو قبل از exit قرار بدیم:
sudo gedit /etc/gdm/PostSession/Default
-------------------------------


#!/bin/sh
aplay  '/usr/share/sounds/win7/logout.wav'

exit 0


صدای lock و unlock شدن دسکتاپ گنوم

خیلی جالب میشد اگر مثل موبایلها وقتی صفحه لاک/آنلاک میشد یه صدای کلیک یا هر چی پخش میشد! کافیه اسکریپت زیر رو درست کنید و در استارتاپ قرار بدید.
sudo gedit /usr/local/bin/sound-unlock
-------------------------------

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
  while read x; do
    case "$x" in
      *"boolean true"*) aplay '/usr/share/sounds/win7/lock.wav' ;;
      *"boolean false"*) aplay '/usr/share/sounds/win7/unlock.wav' ;; 
    esac
  done


صدای باز و بسته شدن مانیتور لپتاپ! یا اصطلاحا Lid

این کار با استفاده از acpid انجام میشه که معمولا در اکثر توزیع ها نصب هست. اگر نصب نیست اون رو نصب کنید و سرویسش رو فعال کنید:
1. sudo pacman -S acpid
2. sudo systemctl enable acpid
3. sudo systemctl start acpid


acpi یکی از کارهاش اینه که اتفاقات خاصی رو رصد میکنه و بر اساس اونها اقدامات مورد نظر رو انجام میده. ما میتونیم این رو به دلخواه خودمون انجام بدیم. مثلا بگیم وقتی Lid لپتاپ بسته شد، یا باز شد فلان دستور (پخش صدا) انجام بشه. این رو قبلا برای قطع صدا هنگام خروج هدفون در وبلاگ نوشته بودم.
برای این کار، در مسیر زیر فایلی با چنین محتوی ایجاد کنید:
sudo gedit /etc/acpi/events/lidopen
-----------------------------

event=button/lid LID open
action=/usr/local/bin/sound-lidopen

اسکریپت sound-lidopen هم در مسیر مورد نظرتون بسازید و مجوز اجرایی بهش بدید و محتوای زیر رو درون اون قرار بدید:
#!/bin/bash
#This runs so that root can run the following command under the user's environment
source /home/amin/.Xdbus
#play a open sound
DISPLAY=:0.0 su amin -c "aplay '/usr/share/sounds/win7/lidopen.wav'"
به جای amin باید نام کاربری خودتون رو قرار بدید.  همین کارها رو برای LID close هم انجام بدید. منتها open رو با close جایگزین کنید.

حالا باید یک کار دیگه هم بکنیم!

اسکریپت زیر رو بسازید و یک بار اون رو اجرا کنید:
#!/bin/sh

touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus

exit 0

با این کار فایلی در پوشه home نام کاربری شما ساخته میشه به نام Xdbus. که نباید اون رو حذف کنید.

پخش صدا در هنگام فشردن دکمه ی پاور
این کار هم درست مثل مرحله بالا که در مورد acpi گفتیم انجام میشه. منتها به جای event=button/lid LID open باید بذاریم event=button/power PBTN

این عبارت button/power PBTN ممکنه در لپتاپ های مختلف فرق داشته باشه. برای اینکه بفهمید برای لپتاپ شما دقیقا چیه، یک بار در خط فرمان دستور acpi_listen رو اجرا کنید و بعد دکمه ی پاور رو بزنید. آنچه که نشان میدهد مقصود است!