لینوکس و من

نقل قول:اریک ریموند

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

در این مطلب میخوایم سعی کنیم صداهای مختلفی برای کارهای زیر تعریف کنیم تا تجربه ی لذت‌بخش تری در کار با کامپیوتر لینوکسیمون داشته باشیم:
  • صدای 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 رو اجرا کنید و بعد دکمه ی پاور رو بزنید. آنچه که نشان میدهد مقصود است!

تغییر خودکار هدست بلوتوث بعد از اتصال

وقتی یک هدست بلوتوث کانکت میکنیم، باید به تنظیمات صدا بریم و خروجی رو روی اون تنظیم کنیم. میتونیم این کار رو خودکار کنیم! یعنی وقتی هدست کانکت شد، خروجی صدا به هدست منتقل بشه و دیگه لازم نباشه وارد تنظیمات بشیم.

باید فایل etc/pulse/default.pa/ رو باز کنیم و عبارت زیر رو بهش اضافه کنیم:
# automatically switch to newly-connected devices
load-module module-switch-on-connect
و بعد یک بار restart (البته میشه خود pulse رو ری استارت کرد: pulseaudio -k)

انجام Hybernate بعد از مدت مشخصی Suspend

ما معمولا در لینوکس سیستم رو suspend میکنیم. خب این کار هزینه داره و از باتری یا برق برای فعال بودن استفاده میکنه. میتونیم در آرچی ها با سرویسی که در ادامه ایجاد میکنیم به سیستم میگیم که اگر بعد از ۲ ساعت suspend کسی resume نکرد، سیستم رو hybernate کن. این طوری مصرف باتری‌مون بهینه تر میشه و منطقی تر هم هست. البته به شرطی که swap داشته باشید.

ابتدا باید سرویس مورد نظرمون رو در systemd بسازیم:
--------------------------------------------------------
sudo gedit /etc/systemd/system/suspend-to-hibernate.service
--------------------------------------------------------

[Unit]
Description=Delayed hibernation trigger
Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1420279#p1420279
Documentation=https://wiki.archlinux.org/index.php/Power_management
Conflicts=hibernate.target hybrid-sleep.target
Before=sleep.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"
Environment="SLEEPLENGTH=+2hour"
ExecStart=-/usr/bin/sh -c 'echo -n "alarm set for "; date +%%s -d$SLEEPLENGTH | tee $WAKEALARM'
ExecStop=-/usr/bin/sh -c '\
  alarm=$(cat $WAKEALARM); \
  now=$(date +%%s); \
  if [ -z "$alarm" ] || [ "$now" -ge "$alarm" ]; then \
     echo "hibernate triggered"; \
     systemctl hibernate; \
  else \
     echo "normal wakeup"; \
  fi; \
  echo 0 > $WAKEALARM; \
'

[Install]
WantedBy=sleep.target


و بعد سرویس رو فعال می کنیم:
1. sudo systemctl enable disable-usb-wakeup.service
2. sudo systemctl start disable-usb-wakeup.service

غیر فعال کردن wakeup برای USBها

متوجه شدم که ماوس وایرلس باعث میشه بعد از suspend با حرکت دادن یا کلیک کردن، لپتاپ resume بشه. گشتی زدیم و راه حل یافتیم. باید یک سرویس برای systemd درست کنیم و این موضوع رو غیر فعال کنیم!

--------------------------------------------------------
sudo nano /etc/systemd/system/disable-usb-wakeup.service
--------------------------------------------------------
[Unit]
Description=Disable USB wakeup triggers in /proc/acpi/wakeup

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo XHC > /proc/acpi/wakeup; echo WLAN > /proc/acpi/wakeup"
ExecStop=/bin/sh -c "echo XHC > /proc/acpi/wakeup; echo WLAN > /proc/acpi/wakeup"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

حالا سرویس رو فعال میکنیم:
1. sudo systemctl enable disable-usb-wakeup.service
2. sudo systemctl start disable-usb-wakeup.service


نقل قول:ریچارد استالمن

chroot چیست؟


شاید تا به حال با CHROOT برخورد کرده باشید.مخصوصا هنگام نصب آرچ لینوکس
CHROOT چیست؟
CHROOT مخفف کلمه ی  change root به معنای تغییر ریشه هست.
سی اچ روت یک فراخوان سیستمی در سیستم عامل های شبه یونیکس هست که کارش تغییر دادن مسیر دایرکتوری ریشه(/) هست.با کمک این دستور میتونیم مسیر جاری پارتیشن روت رو تغییر بدیم.برای مثال:
 $chmod /mnt
طی این دستور مسیر دایرکتوری روت به  /mnt تغییر میکنه.
کاربرد این دستور موقعی هست که بخوایم در محیط یک توزیع,به پارتیشن روت یک توزیع دیگه وصل بشیم و از اون به عنوان پارتیشن روت اصلی استفاده کنیم.
وقتی مسیر دایرکتوری روت تغییر کنه,شما دیگه نمیتونید به فایل های خارج از اون دایرکتوری دسترسی داشته باشید.
چون شما حالا یک دایرکتوری روت جدید دارید.یک دایرکتوری روت شامل دایرکتوری های دیگه ای مثل home mnt etc var و ... هست که با اونها سرو کار داریم.برای مثال,اگر بعد از تغییر دادن مسیر دایرکتوری روت ,دستور زیر رو وارد کنید:
 $cd home
مسیر شما به دایکتوری home تغییر میکنه که درون دایرکتوری روت جدید هست.پس شما نمیتونید به دایرکتوری home که در خارج از دایرکتوری روت جدید هست دسترسی داشته باشید که اصطلاحا به اون زندانی شدن پروسه میگن.
برای درک بیشتر,عکس زیر رو با دقت ببینید.

chroot برای اولین بار در حین توسعه ورژن ۷ یونیکس به وجود اومد.

منبع:ویکی پدیا

تفاوت ادیتور ویم و وی آی



وی آی یک ویرایشگر متن هست که در همون روز های اول پیدایش یونیکس,توسعه پیدا کرد.در اون زمان وی آی سریعا به ادیتوری محبوب تبدیل شد و راه خودش رو به پاسیکس و SUS باز کرد؛اما به صورت آزاد در دسترس نبود(تا سال ۲۰۰۲)
بنابر این چند ادیتور بر شبه وی آی توسعه پیدا کردند تا به صورت نرم افزار آزاد در دسترس قرار بگیرند.ویم هم یکی از همین ادیتور ها بود.
کلمه (vim) مخفف vi improved به معنای وی آی پیشرفته,بهبود یافته هست.
ویم با الگو برداری وی آی نوشته شده پس همه ویژگی های وی آی در ویم هم موجوده.
و اما تفاوت هاشون.تفاوت این دو ادیتور صرفا در ویژگی هاشونه
ویم نسبت به وی آی ویژگی های بیشتری داره.برای مثال:

۱-ویم برای طیف وسیع تری از سیستم عامل ها پورت شده
۲-ویم دارای ویژگی هایی مثل هایلایت کردن کد,منوی کشویی,کامل کردن خودکار کد ها و... برای زبان های برنامه نویسی مرسوم مثل پایتون و سی و سی++ هست.
۳-ویم توانایی ادغام شدن با cscope رو داره(یک ابزار برنامه نویسی)
۴-ویم قابلیت تقسیم کردن اسکرین رو داره و همزمان در یک صفحه چند تا ادیتور در اختیارتون میزاره
۵-ویم میتونه فایل های درون یک فایل فشرده مثل zip,gzip,tar رو ویرایش کنه.
۶-ویم از پلاگین ها پشتیبانی میکنه.

این ها چند تا از ویژگی های ویم بود.علاوه بر ویم,ادیتور های دیگه ای هم با الگو برداری از  وی آی نوشته شدند مثل nvi و elvis که هر کدوم ویژگی های خاص خودشون رو دارن.

در حال حاضر ویم بر روی اوبونتو به صورت پیشفرض نصبه.


ویلند(wayland)





اجرای آهنگ در ترمینال


کار کردن با ترمینال همیشه برای گیک ها جذاب بوده.تو این مطلب میخوام بهتون نحوه اجرای آهنگ از طریق ترمینال رو توضیح بدم که خیلی آسونه!

برای این کار به VLC نیاز دارید.
نصب در آرچ بیس ها:
 sudo pacman -S vlc

نصب در دبیان بیس ها:
 sudo apt install vlc

و برای اجرای آهنگتون بعد از دستور زیر,آدرس فایل صوتیتون رو وارد کنین.به همین راحتی!
 vlc -I ncurses
مثل :
 vlc -I ncurses 1.mp3