لینوکس و من

۲۱۶ مطلب با موضوع «ترفند» ثبت شده است

از بین بردن نویز صدای هدفون در درایورهای اینتل

اینجا در مانجارو وقتی سیستم حالت suspend به resume میاد یک نویز عجیب و بد توی هدفون شنیده میشه. برای اینکه این نویز برطرف شه باید ماژول صدا رو یکبار حذف و دوباره بارگذاری کنیم.
ماژول صدای درایور اینتل snd_hda_intel است. با این دستور این ماژول غیرفعال میشه:
sudo rmmod -f snd_hda_intel

حالا با این دستور میبایست مدل درایور اینتلی که دستگاه شما داره مشخص کنیم:
aplay --list-devices

که یه سری توضیحات میاره و عددی شبیه به ALC668 مد نظر ماست. حالا با این دستور ماژول مجددا به شکل صحیح بارگذاری میشه:
sudo modprobe snd_hda_intel ALC668

اما انجام دادن این پروسه بعد از هر resume باید خودکار انجام بشه. بنابراین میایم یه اسکریپت در مسیر /usr/local/bin/ میسازیم:
sudo nano /usr/local/bin/snd_hda_intel-resume

با این محتوی:

#!/bin/bash
rmmod -f snd_hda_intel && sleep 2 && modprobe snd_hda_intel ALC668


و به اون مجوز اجرایی میدیم. (با chmod +x). اما میتونیم این رو تبدیل به یک سرویس systemd بکنیم که بعد از هر resume بصورت خودکار شروع بشه و ما هیچ دخالتی نداشته باشیم:
sudo nano /etc/systemd/system/snd_hda_intel-resume.service

با این محتوی:

[Unit]
Description=Reloading intel sound module after suspend
After=suspend.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/snd_hda_intel-resume

[Install]
WantedBy=suspend.target
و بعد برای فعال کردن این سرویس:
sudo systemctl enable snd_hda_intel-resume.service

نحوه غیرفعال کردن Guest Account در اوبونتو

حتماً تا به حال به Guest Account در اوبونتو برخوردید و به هر دلیلی فکر کردید که چه خوب می‌شد اگر میتونستم غیرفعالش کنمخوب این همون چیزیه که امروز میخوایم راجع بهش صحبت کنیمبرای غیرفعال کردن اکانت مهمان کافیه فرمان زیر رو در ترمینال وارد کنید:

 sudo gedit /etc/lightdm/lightdm.conf

و خط های زیر رو بهش اضافه کنید:

[SeatDefaults]
user-session=ubuntu 
allow-guest=false

و بعد از ذخیره سازی تغییرات، سرویس lightdm رو ریستارت کنید:

 sudo lightdm restart

حالا حساب مهمان شما غیرفعال شده است و شما میتوانید با زدن Super + L (رفتن به صفحه ی ورود به اکانت) این رو مشاهده کنید.

فعال/غیر فعال کردن تاچ اسکرین در مانجارو

سلام!
اگر از لپتاپ هایی استفاده میکنید که مانیتور اونها تاچ هست و گاهی فعال بودن این تاچ باعث دردسر میشه، میتونید به راحتی هر چه تمام فعال یا غیر فعالش کنین! احتمالا غیر فعال بودنش باعث مصرف کمتر باتری هم خواهد شد.

در مانجارو xinput برای مدیریت ورودی های کامپیوتر نصب شده. مثل وبکم، کیبور، ماوس، تاچ پد و ... با اجرای xinput لیستی از این موارد رو میبینید:

[amin@ASUS ~]$ xinput
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Elan Touchpad                               id=12    [slave  pointer  (2)]
⎜   ↳ USBest Technology SiS HID Touch Controller    id=10    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Video Bus                                   id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ USB2.0 HD UVC WebCam                        id=11    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                            id=13    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard
همون طور که میبینید تاچ اسکرین لپتاپ با ID شماره 10 مشخص شده که یک چیز ثابتی هست.
حالا با این دستور ها میتونید به راحتی هر کدوم از این ها رو فعال یا غیر فعال کنید:

xinput disable 10
xinput enable 10



اما میشه این عمل رو به یک شورتکات کیبورد نسبت داد. و بصورت toggle درآورد. یعنی با فشردن شورتکات (یا اجرای دستور) چک کنه ببینه اگر تاچ فعاله، غیر فعالش کنه. و اگر غیر فعاله، فعالش کنه.
برای اینکار این رو اجرا کنید تا خرجی شبیه این بگیرید:

[amin@ASUS ~]$ xinput --list-props 10
Device 'USBest Technology SiS HID Touch Controller':
    Device Enabled (138):    0
    Coordinate Transformation Matrix (140):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix (278):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix Default (279):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Send Events Modes Available (260):    1, 0
    libinput Send Events Mode Enabled (261):    0, 0
    libinput Send Events Mode Enabled Default (262):    0, 0
    Device Node (263):    "/dev/input/event12"
    Device Product ID (264):    1111, 4300
    libinput Horizonal Scroll Enabled (265):    0
عبارت  Device Enabled (138):    0 مشخص میکنه که اون دیوایس فعاله یا غیر فعال. 0 یعنی غیر فعال. ما از همین در یک اسکریپت استفاده میکنیم:

#!/bin/bash
if [[ $(xinput --list-props 10) == @(*Device Enabled \(138\):    0*) ]]; then
xinput enable 10
else
xinput disable 10
fi
با ذخیره این اسکریپت در یک فایل میتونیم با یک دستور دیوایس مورد نظرمون که اینجا تاچ اسکرین بود فعال و غیر فعال کنیم. و مثلا اون رو با شورت کات Super+F8 اجرا کنیم.

ویرایش جدید:
برای اینکه این اتفاق در حین بوت انجام بشه، باید سراغ systemd بریم. اما چون برای xinput باید Display رو مشخص کنیم باید timer در systemd تعریف کنیم. چون حین بوت هنوز display مشخص نشده. خلاصه... محض یاد آوری خودم..

sudo nano /etc/systemd/system/disable-touch.service

با این محنوی:

[Unit]
Description=Disable Monitor Touch Screen by xinput

[Service]
Type=oneshot
User=amin
Environment=DISPLAY=:0
ExecStart=/usr/bin/xinput disable 10
بجای amin نام کاربری خودتون. و بعد:
sudo nano /etc/systemd/system/disable-touch.timer

با این محتوی:

[Unit]
Description=Runs disable-touch 1min after boot

[Timer]
# Time to wait after booting before activation
OnBootSec=1min
Unit=disable-touch.service

[Install]
WantedBy=multi-user.target
و حالا :
sudo systemctl enable disable-touch.timer

حذف دایرکتوری هایی که خالی نیستند

میتونیم از دستور rm یا rmdir برای حذف فایلها و دایرکتوری ها استفاده کنیم. اما برای اینکه دایرکتوری هایی که خالی نیستند هم بتونیم با این روش حذف کنیم (که ایراد میگیره و میگه این دایرکتوری خالی نیست) میتونیم از سوییچ زیر استفاده کنیم:
rm -rf
و به راحتی حذف میشن

حذف فایل ها با پسوند خاص در همه دایرکتوری ها

ممکنه یک وقت یک فول آلبوم از یکی از این سایت هایی که احساس میکنند صاحب حقوق مادی و معنوی اثر هستند دانلود کنید. علاوه بر اینکه توی هر سوراخی که بتونن اسم خودشون رو مینویسند، ممکنه تعداد زیادی فایلهای txt و url هم توی هر پوشه ای قرار داده باشند.
برای اینکه به راحتی کل این فایلهای مزاحم رو حذف کنیم کافیه در پوشه ی دایرکتوری فول آلبوم این دستور رو اجرا کنیم

find . -type f -name '*.txt' -delete
یا
find . -type f -name '*.txt' -exec rm {} \;
یا
rm -- **/*.txt
که طبیعتا بجای txt میتونید هر چیز دیگه ای قرار بدید. اما مواظب باشید که این رو در دایرکتوری های عقب تر مثل فولدر home اجرا نکنید که... وا مصیبتا!

برگرداندن backspace به nautilus

از وقتی گنوم ۳ اومد همین طور از قابلیت های شخصی سازی دسکتاپ کمتر و کمتر شد. تا اینکه متوجه شدم در نسخه 3.20 که الان نصبه فایل منیجر Nautilus قابلیت backspace که یک فولدر به عقب برمیگشت رو نداره! و توسعه دهندگان تصمیم گرفتند از Alt و کلید های جهت‌نمای کیبورد استفاده کنند و هیچ حق تغییر هم به کاربر ندادند.
خیلی گشتم تا این اسکریپت پایتون رو پیدا کردم که باعث میشه این قابلیت برگرده. برای این منظور اول از github دانلودش کنید و اون رو در مسیر زیر قرار بدید، و اگر فولدرها وجود ندارند اونها رو بسازید
~/.local/share/nautilus-python/extensions/


بسته python-nautilus هم باید نصب باشه. و یک بار با سوییچ q باید nautilus رو از نو اجرا کنید تا تاثیرش رو ببینید.
اگر در آینده لینک اسکریپت خراب شد، در ادامه همین مطلب میتونید ببینیدش. اون رو در یک فایل پایتون با پسوند py ذخیره کنید و در مسیر بالا قرار بدید.

چند اسکریپت در مورد زمان (ویرایش شد)

اولی ساعت رو به همراه میزان زمانی که کامپیوتر روشن بوده بوسیله notify-osd اعلام میکنه. به درد مواقعی میخوره که شما در حالت فول اسکرین یک برنامه هستید و به ساعت دسترسی ندارید، با یه شورتکات میتونید این اسکریپت رو اجرا کنید. همچنین میتونید به cron بدید تا مثلا سر هر ساعت یه نوتیفیکیشن بیاد و ساعت رو به شما اعلام کنه!


#!/bin/bash
play /usr/share/sounds/freedesktop/stereo/message-new-instant.oga && /usr/bin/notify-send -u critical -i "clock" "Clock" "Its $(date +%H:%M) now. Uptime: $(uptime | sed 's/.*up \([^,]*\), .*/\1/')"



شما میتونید به جای دستور play از mplayer یا cvlc یا چیزای دیگه هم استفاده کنید. و فایل صدای ساعت رو هم به دلخواه خودتون تعیین کنید.

اسکریپت بعدی که توی اینترنت پیداش کردم و با notify-osd ترکیبش کردم بوسیله zenity یه تایمی از شما میگیره و بعد از اون تایم به شما یه نوتیفیکیشن میده. یعنی یه تایمر بسیار ساده.


#!/bin/bash
    # This script asks the user for a time, waits the specified amount
    # of time, and shows an alert dialog.

    TIME=$(zenity --entry --title="Timer" --text="Enter a duration for the timer.\n\n Examples: 5s or 5m or 5h")

    sleep $TIME

    /usr/bin/notify-send -u critical -i "clock" "Ding Ding!" "It has been $TIME. " && play /usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga











تقویم های فارسی ای وجود دارند که ممکنه به سلیقه هر کسی خوش نیان. یا اینکه ممکنه فقط نیاز داشته باشید بدونید امروز چندمه! با یه اسکریپت ساده notify-osd میتونیم اینجوری تقویم رو داشته باشیم

قبلش باید jdate رو نصب کنید و بعد با این دستور میتونید این نوتیفیکیشن رو داشته باشید:
/usr/bin/notify-send -u critical -i "date" "تاریخ شمسی" "امروز، $(jdate +%G\ %W)"
با گذاشتتن یک شورتکات یا alias خیلی راحت تاریخ شمسی رو میتونیم داشته باشیم.

اما برای گذاشتن این موارد در cron باید یه تغییراتی در اسکریپت بدیم. خروجی دستور زیر رو کپی کنید:

set | grep DBUS_SESSION_BUS_ADDRESS



مثلا میشه این:
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus


بعد این رو در ابتدای اسکریپت قرار بدید:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus


وگرنه notify-send در cron اجرا نمیشه.

یک اسکریپت برای ایجاد واترمارک روی ویدیو

نیاز داشتم به اینکه یک واترمارک روی یک سری ویدیوهای آموزشی قرار بدم. سرچ کردم و روشش رو با ffmpeg پیدا کردم. منتها اگه میخواستی برای هر ویدیو اون دستور طولانی رو اجرا کنی سخت میشد! برای همین از دوستان انجمن فارسی آرچ کمک گرفتم تا یک اسکریپت داشته باشم برای اینکار. آقای Arcush زحمت کشیدن و این اسکریپت رو ساختن.

اول اینکه دستور اولی به این شکل بود:
ffmpeg -i '/PATH/TO/INPUT.flv'  -i /PATH/TO/wm.png -filter_complex '[0:v][1:v]overlay=15:10[outv]' -map [outv] -map 0:a -c:a copy -c:v libx264 -crf 22 -preset veryfast output.mp4
یا
ffmpeg -i '/PATH/TO/INPUT.flv' -i /PATH/TO/wm.png -filter_complex "overlay=15:10" -preset veryfast output.mp4



دستور بالا واترمارکی که در مسیر مشخص شده قرار گرفته روی فایلی که مورد نظر ماست قرار میده و اون رو با نام output.mp4 در پوشه home کاربر میسازه. چیز جالبیه. اما راحت نیست. 15:10 هم یعنی ۱۵ واحد از سمت چپ و ۱۰ واحد از سمت بالا فاصله داشته باشه.
#!/bin/bash 
for k in $(ls *.wmv); do ffmpeg -i "$k" -i ~/wm.png -filter_complex '[0:v][1:v]overlay=15:10[outv]' -map [outv] -map 0:a -c:a copy -c:v libx264 -crf 22 -preset veryfast "new-$k"; done
یا
for k in $(ls *.wmv); do ffmpeg -i "$k" -i ~/wm.png -filter_complex "overlay=15:10" -preset veryfast "new-$k"; done




اگه ما دستور بالا رو به این شکل در بیاریم، و اون رو در یک اسکریپت مثلا با نام addwmall قرار بدیم، و اون رو در پوشه ای که فیلمهای ما قرار دارند اجرا کنیم، فایل wm.png که باید در فولدر ویدیوها موجود باشه به تمام  فایل‌های wmv در پوشه ای که اسکریپت در اون ایجاد میشه اضافه میشه. که این هم خوبه، ولی چیزی که میخواستم اسکریپت پایینی بود که دوست خوبم در انجمن آرچ اون رو نوشت:
#!/bin/bash

path_of_first_file=$(dirname "$1")
name_of_first_file=$(basename "$1")

new_name="new-$(echo "$name_of_first_file.mp4")"
new_output=$(echo "$path_of_first_file/$new_name")

ffmpeg -i "$1"  -i "$2" \
-filter_complex "overlay=15:10" -preset veryfast "$new_output"

echo
echo "New video saved in: " "$path_of_first_file"\/$new_name
با اسکریپت بالا میتونیم دو مقدار فایل ویدیویی و فایل واترمارک رو بهش بدیم، تا یک فایل حاوی واترمارک با نام جدید در کنار فایل ویدیوی قبلی ایجاد بشه. مثلا:
addwm /PATH/TO/INPUT.flv /PATH/TO/wm.png

طبق تجربه ای که در کار با اسکریپت داشتم دریافتم که فایلهای flv وقتی روشون واترمارک میذاریم با کیفیت بدی ذخیره میشن. اگه اونها پسوند mp4 داشته باشن درست میشه. برای همین در اسکریپت بالا اون mp4. رو که برنگ سبز مشخص کردم اضافه کردم تا همه ی فایلهای واترمارک شده mp4 باشن اصلا! بنابراین میتونین اون new_ هم که با نارنجی مشخص کردم حذف کنین. چون مثلا فایلی به اسم video.flv به فایلی به اسم video.flv.mp4 تبدیل میشه و نیازی به new_ نیست.

غیر فعال کردن نمایش منوی فایرفاکس با Alt

اینکه در فایرفاکس بخوایم زبان کیبرد رو با Alt و Shift مرتب عوض کنیم و هر دفعه منوی بالای فایرفاکس ظاهر بشه، روی اعصابه! میتونیم برای غیر فعال کردن این حالت بوسیله about:config وارد تنظیمات بشیم و بعد مقدار ui.key.menuAccessKeyFocuses رو به false تغییر بدیم. برای نمایش منو هم میتونیم از ترکیب Alt + V استفاده کنیم

نمایش مقدار باتری لپتاپ در ترمینال

راه ها و روش های مختلفی برای این کار وجود داره. یکی از این راه ها در صورتی که توزیع شما از upower استفاده کنه  استفاده از دستور زیر هست:

 upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage|time"


برای اینکه جالب تر بشه، میتونیم این دستور رو به صورت یک alias استفاده کنیم.