لینوکس و من

۱۶ مطلب در مرداد ۱۳۹۵ ثبت شده است

نوتیفیکیشن های آندروید در گنوم

ابزار بامزه ای به نام nuntius وجود داره که نوتیفیکیشن های آندروید رو در دسکتاپ گنوم بصورت نوتیفیکیشن نشون میده. مثلا اگر براتون از مخاطبی اس ام اس بیاد یا میس‌کال بیفته، هر نوتیفیکیشنی توی آندروید توی گنوم ظاهر میشه



کافیه از AUR این برنامه رو نصب کنید. و بعد روی آندروید هم از گوگل‌پلی نصبش کنید.
برای برقراری ارتباط باید دو دستگاه با بلوتوث با هم pair باشند.

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

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

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

در مانجارو 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 اجرا نکنید که... وا مصیبتا!

حذف lag وقتی که در گنوم شل هستیم!

من وقتی برای انتخاب بین اپلیکیشن ها به Activities در گنوم شل میرفتم یک لگ خفیف اما آزار دهنده وجود داشت. علی رغم سخت افزار قوی، این لگ حتی وقتی چندین برنامه رو باز میکردی شدید تر هم میشد. جست و جویی انجام دادم و با ایجاد این فایل با این محتوی این لگ برطرف شد

nano ~/.drirc

با این محتوی:

<device screen="0" driver="dri2">
        <application name="Default">
                <option name="vblank_mode" value="0"/>
        </application>
</device>
حالا همه چی خیلی روان تر و لذت بخش تر شده.

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

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


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

محافظت از چشم ها در برابر نور مانیتور

اسکریپت redshift از چشمان شما در برابر میزان حرارت نور مانیتور محافظت میکنه. قبلا در این مورد خیلی خلاصه گفته بودم. اما بد نیست کمی این مورد رو بیشتر بررسی کنیم. اول اینکه redshift رو از مخازن توزیع خودتون نصب کنید. در دسکتاپ های مبتنی بر gtk آیکن مربوطه در منوها قرار میگیره و شما با اجرای اون یک سری تنظیمات پیشفرض ردشیفت براتون اعمال میشه و همچنین آیکن در tray icon قرار میگیره.
اما برای اینکه میزان تاثیر ردشیفت و همچنین محل جغرافیاییتون رو مشخص کنید، بهتره یک فایل کانفیگ بسازیم.



بعد از نصب، فایل کانفیگ رو میسازیم
gedit ~/.config/redshift.conf

و این محتوی رو در اون ذخیره میکنیم
 ; Global settings for redshift
[redshift]
; Set the day and night screen temperatures
temp-day=6000
temp-night=5600


; Enable/Disable a smooth transition between day and night
; 0 will cause a direct change from day to night screen temperature.
; 1 will gradually increase or decrease the screen temperature.
transition=1

; Set the screen brightness. Default is 1.0.
;brightness=0.9
; It is also possible to use different settings for day and night
; since version 1.8.
;brightness-day=0.7
;brightness-night=0.4
; Set the screen gamma (for all colors, or each color channel
; individually)
gamma=0.8
;gamma=0.8:0.7:0.8
; This can also be set individually for day and night since
; version 1.10.
;gamma-day=0.8:0.7:0.8
;gamma-night=0.6

; Set the location-provider: 'geoclue', 'geoclue2', 'manual'
; type 'redshift -l list' to see possible values.
; The location provider settings are in a different section.
location-provider=manual

; Set the adjustment-method: 'randr', 'vidmode'
; type 'redshift -m list' to see all possible values.
; 'randr' is the preferred method, 'vidmode' is an older API.
; but works in some cases when 'randr' does not.
; The adjustment method settings are in a different section.
adjustment-method=randr

; Configuration of the location-provider:
; type 'redshift -l PROVIDER:help' to see the settings.
; ex: 'redshift -l manual:help'
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.
[manual]
lat=36.28
lon=50.0


; Configuration of the adjustment-method
; type 'redshift -m METHOD:help' to see the settings.
; ex: 'redshift -m randr:help'
; In this example, randr is configured to adjust screen 1.
; Note that the numbering starts from 0, so this is actually the
; second screen. If this option is not specified, Redshift will try
; to adjust _all_ screens.
[vidmode]

قسمت lat و long مربوط به عرض و طول جغرافیایی محل زندگی شماست. برای اینکه برنامه بتونه شب و روز رو تشخیص بده. این سایت میتونه بر اساس ip این اطلاعات رو در اختیار شما قرار بده.
قسمت temp هم میزان حرارت نور در روز و شب رو مشخص میکنه. من که با تنظیمات پیشفرضش راخت نبودم. تصویر دیگه خیلی زرد میشد. همین مقادیر به نظرم مناسب اومد.
بعد از ذخیره این تنظیمات، حالا redshift رو اجرا کنید.

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

اولی ساعت رو به همراه میزان زمانی که کامپیوتر روشن بوده بوسیله 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 اجرا نمیشه.

نصب Manjaro Linux روی لپ‌تاپ ASUS n501 (ویرایش شد)

این مطلب بیشتر جنبه ی یادآوری برای خودم داره که اگر در آینده دچار مشکل شدم بتونم رجوع کنم. اما کسانی هم که از لپتاپ های جدید سری n شرکت ASUS استفاده میکنند و میخوان که لینوکس روش نصب کنند (در اینجا مانجارو) میتونن از این مطلب استفاده کنند.
ویرایش: متوجه شدم که گویا کلا با nvidia مشکل داره و سایر مدل های لپتاپ ها و حتی دسکتاپ هم این مشکل رو دارند. اما راه حال یکسانه

با روش های موجود iso این توزیع رو روی فلش مموری میریزیم و سعی میکنیم که لپتاپ رو با اون بوت کنیم! در همین ابتدای کار در حین بوت لایو شما با پیام خطای A start job is running for LiveMedia MHWD Script روبرو میشید و مانجارو بالا نمیاد. این پیام مربوط میشه درایور گرافیک لپتاپ که بوسیله mhwd که مختص مانجارو هست مدیریت و نصب میشه. که در اینجا ظاهرا نتونسته درست مدیریت کنه. برای دور زدن این خطا و بوت کردن لایو مانجارو باید موقع بوت روی خط بوت کلید e رو بزنیم و این خط رو به انتهاش اضافه کنیم و بعد با F10 بوت کنیم
xdriver=mesa

حالا مانجارو بالا میاد و ما میتونیم اون رو نصب کنیم. در اینجا فن لپتاپ به شدت کار میکنه، اما جای نگرانی نیست، فرایند نصب به سرعت تموم میشه. وقتی نصب تموم شد، باز هم مانجارو بالا نمیاد.
ویرایش: کاشف به عمل آمد که Bumblebee که مسئول خاموش کردن nvidia است با این قضیه مشکل داره و در حین بوت باعث freez شدن میشه. برای همین باید در خط کرنل در گراب یه تغییراتی رو اعمال کنیم (به رنگ سبز نشون دادم).

برای اینکه این مشکل بر طرف بشه، طبق این ویکی باید در خط کرنل موقع بوت این تنظیمات رو اعمال کنیم (در پایین توضیح دادم)
i915.enable_execlists=0 acpi_backlight=native acpi_osi=! acpi_osi='Windows 2009'


اما با تعیین کردن acpi_osi به این شکل کلیدهای ترکیبی تنظیم نور مانیتور کار نمیکنند. اگر عبارت نارنجی رنگ بالا رو هم در خط کرنل گذاشته باشیم تنظیم نور مانیتور از طریق دستور در ترمینال کار خواهد کرد.
برای این کار دو راه داریم. یکی اینکه xdotool رو نصب کنیم و با این دستور ها نور رو کم و زیاد کنیم (که میتونیم یک کیبورد شورتکات تعریف کنیم مثلا با Super+F5 و Super+F6 :
xdotool key --clearmodifiers XF86MonBrightnessUp
xdotool key --clearmodifiers XF86MonBrightnessDown



یا xorg-xbacklight رو نصب کنیم و با این دستورها کار کنیم:
xbacklight -inc 10
xbacklight -dec 10

ممکنه تاچ‌پد کار نکنه. وارد تنظیمات mouse and touchpad میشید و میبینید که تاچ‌پد شناخته شده، اما کار نمیکنه. برای حل این مشکل، یک بار این دستور رو اجرا کنید، اگر مشکل برطرف شد که شد،‌ اگر نشد باید به کرنل 4.7 آپدیت کنید.
ویرایش: کاشف به عمل اومد که اگر وارد ویندوز بشیم و بعد وارد مانجارو بشیم باید ماژول مربوط به تاچ‌پد رو به شکل زیر غیرفعال/فعال کنیم. در ریبوت های بعدی در خود مانجارو این مشکل وجود نداره. برای اینکه کلا از بابت این مشکل هم راحت بشیم میتونیم طی یک سرویس systemd این کار رو در هر بوت انجام بدیم. حالا چه قبلش توی ویندوز بودیم چه نبودیم.
sudo modprobe -r elan_i2c && sleep 2 && sudo modprobe elan_i2c
موضوع دوم، فونت ریز گراب هست. حالا که حرف از گراب زدیم، باید یه سری چیزها رو هم در این سطح انجام بدیم. به ترتیب اینکار ها رو میکنیم:
sudo gedit /etc/default/grub

فایل پیشفرض گراب باز میشه، این تغییرات رو اعمال میکنیم:
برای رزلوشن این خط رو اضافه میکنیم:
GRUB_GFXMODE="1600x1200"

در خط مربوط به کرنل اینها رو اضافه میکنیم، بصورتی که بشه این:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.enable_execlists=0 acpi_backlight=native acpi_osi=! acpi_osi='Windows 2009' "

و بعد ذیره میکنیم و سپس این دستور رو اجرا میکنیم تا منوی گراب بازسازی بشه:
sudo grub-mkconfig -o /boot/grub/grub.cfg









برای درست کردن فونت کنسول در لپتاپ های با رزولوشن بالا (HIDIP)  terminus-font رو نصب کنید و بعد :
sudo nano /etc/vconsole.conf
با این محتوی:
FONT=ter-v28b




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

نوشته های قبلی که جایگزین شدند در ادامه مطلب وجود دارن.

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

نیاز داشتم به اینکه یک واترمارک روی یک سری ویدیوهای آموزشی قرار بدم. سرچ کردم و روشش رو با 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_ نیست.