چند ترفند در مورد زمان

چند تا ترفند و اسکریپت در مورد زمان درست کردم که ممکنه به دردمون بخوره

اعلام زمان

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

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

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

یک تایمر ساده

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

انتقال فایل بین دو لپتاپ لینوکسی

توجه: این مطلب قدیمی است و صرفا جهت آرشیو حفظ شده است. ممکن است امروزه برخی موارد یکسان نباشند.

اگر لپتاپ جدیدی خریده باشید و بخواید که فایلهای لپتاپ قدیمی رو به جدیده منتقل کنید، یک راه ابتدایی اینه که فایلها رو روی فلش مموری جابجا کنید! که عملا کار بیهوده ایه.

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

بعد از اینکه کامپیوترها رو با یک کابل شبکه به هم وصل کردید باید برای هر دستگاه یک IP تعریف کنید.

در هر دستگاه به قسمت کانکشن‌ها برید و این موارد رو اعمال کنید:

۱- در قسمت IPv4 تنظیمات IP رو از حالت اتوماتیک به Manual تغییر بدید و بعد به طور مثال برای هر کامپیوتر این مقادیر رو وارد کنید:

 gateway  netmask  address
 255.255.255.0  10.0.0.1 کامپیوتر اول
 255.255.255.0  10.0.0.2 کامپیوتر دوم

و بعد کانکشن ها رو فعال کنید. حالا با پینگ کردن آدرس هر کدوم از کامپیوترها میتونیم به متصل بودنشون مطمئن بشیم.

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

در کامپیوتر مقصد، بسته python-pyftpdlib مربوط به پایتون رو نصب میکنیم

حالا در دایرکتوری ای که میخوایم فایلها رو از اون منتقل کنیم یک ترمینال باز میکنیم و این دستور رو اجرا میکنیم

python -m pyftpdlib -w

حالا میتونیم در کامپیوتر مقصد با استفاده از یک نرم افزار FTP مثل Filezila به راحتی به کامپیوتر مبدا وصل بشیم و فایلها رو منتقل کنیم. IP کامپیوتر اول رو میدیم و کانکت میشیم.

لینوکس و پخش کننده‌های بلوتوث!

توجه: این مطلب قدیمی است و صرفا جهت آرشیو حفظ شده است. ممکن است امروزه برخی موارد یکسان نباشند.

گوش دادن به موسیقی و رادیو و تقریبا هر چیز دیگه‌ای که بشه شنید یکی از اصلی ترین تفریحات منه. تقریبا 95 درصد همه چیزایی که گوش میکنم روی موبایلم ذخیره شده یا از طریق اپ‌های متنوع ارائه دهنده محتوای صوتی پخش میشه. خب که چی؟!‌ مشکل اینجاست که کیفیت صدای بلندگوی موبایل اصلا خوب نیست و حجم صدای مناسبی هم نداره. کاری که میخوام انجام بدم اینه که به طریقی صدای گوشی رو به لپتاپ منتقل کنم تا بتونم از یک اسپیکر یا هدفون همزمان برای موبایل و لپتاپ استفاده کنم و مجبور نباشم هر کدوم رو جدا متصل کنم. اگر با یک PC میخواستم این کار رو انجام بدم خیلی خیلی ساده بود. کارت صدا مادربردها 3 تا جک AUX داشتند که یکی برای خروجی بلندگو (همون سبزه) یکی مخصوص ورودی میکروفن(صورتی) یکی هم برای ورودی‌های غیرمیکروفن (آبی). حالا فقط کافی بود یکم سیم کشی کنم و آبی رو بزنم به گوشی و سبز رو بزنم به اسپیکر (احتمالا یه کوچولو تنظیمات نرم‌افزاری) و پایان. ولی خب من از سیم‌کشی الکی متنفرم و علاوه براین لپتاپ من فقط یک پورت aux داره که دقیقا هم نمیدونم توش چه خبره به علاوه برای اتصال اسپیکر بهش نیاز دارم! پس باید به یک روش هیجان‌انگیر(!)‌ دیگه گوشی رو به لپتاپم متصل کنم. اکثر توزیع‌های دسکتاپ گنو/لینوکس pulseaudio را به صورت پیشفرض نصب دارند. pulseaudio برنامه‌ایه که بین نرم‌افزار های مختلف و سخت افزارهای خروجی و ورودی صدا قرار میگیره و به شما اجازه میده کلی کار عجیب و غریب انجام بدید. مثلا صدای یک برنامه خاص رو کم کنید یا کلا قطع کنید، یا صدای اون برنامه رو بفرستید برای pulseaudioای که روی یک کامپیوتر دیگه اونور دنیا نصب شده و از اونجا بدید به خروجی صدا!

ادامه مطلب

اضافه کردن چند کلید دلخواه به کیبورد!

من یکی از کسانی هستم که کمتر از کیبرد لپتاپ استفاده میکنند و تقریبا 90 درصد اوقات یک کیبرد به لپتاپ متصل میکنم. اما کیبرد دوم من یک کیبرد کاملا ساده است(هیچ کلید اضافه ای برای کنترل مدیا و غیره ندارد) و خب این مساله کمی آزاردهنده است که برای رد کردن یک موسیقی از ماوس یا کیبرد لپتاپ استفاده کنم!

برای حل این مشکل 2 راه حل بیشتر نداشتم:

1- تغییر تنظمیات keyboard shortcut اوبونتو. این راه حل قطعا راه مناسبی نیست، چون نمیشه بیش از یک میانبر برای دستورهای کنترل مدیا تنظیم کرد(شاید بشه ولی من اطلاع ندارم!)، پس کل میانبر های اصلی کیبرد لپتاپ از کار می افتاد که اصلا خوشایند نیست.

2- اضافه کردن این کلید ها به کیبرد. (منظورم این نیست که به صورت فیزیکی چنتا کلید اضافه کنم!) یعنی چنتا شرتکات جدید داشته باشم که ازشون برای کنترل مدیا استفاده کنم.

ساده ترین راهی که برای این کار به نظر من رسید استفاده از  xdotool بود. از این ابزار میتوان برای شبیه سازی ورودی های موس و کیبرد (و سایر ورودی ها!)، و تغییر اندازه پنجره ها، و ... استفاده کرد. استفاده ما در اینجا خیلی ساده است و زیاد درگیر این ابزار نمیشیم. اگر علاقه دارید بیشتر با این پکیج آشنا بشید man در خدمت شماست!

خب xdotool یک دستور داره به اسم key که اسم هر کلیدی که بهش میگید رو فشار میده! (البته واقعا فشار نمیده! مجازیه!) مثلا:

 xdotool key a

به xserver میگه که a روی کیبرد فشار داده شد!

ادامه مطلب

چند ترفند ssh برای انتقال فایل

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

یک راه حل جالب برای این مشکلات استفاده مستقیم از خود ssh است. مثلا به کمک دستور زیر میتوان فایلی را از سرور به کلاینت منتقل کرد.

ssh <server_ip> cat /path/to/file >/path/to/file/on/client

حال برای مثال اگر با فایلی مواجه باشیم که خواندن آن نیاز به دستور روت دارد به سادگی میتوان نوشت:

ssh -tt <server_name> sudo cat /path/to/file > /path/to/save/file

اما مزایای این روش فقط به همین جا محدود نمیشود میتوان کار های جالب تری انجام داد که برای sftp غیر ممکن است. مثلا:

ssh <server_ip> curl http://example.com >/path/to/save
ssh <server_ip> "dd if=/dev/sdx |gzip -c9" >/path/to/save

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

ادامه مطلب

مخفی کردن فایلها در لینوکس بدون گذاشتن نقطه

همون طور که لینوکسی ها میدونن، برای اینکه فایل یا پوشه ای رو در لینوکس مخفی کنیم باید اول اسمش یک نقطه یعنی . بذاریم. مثلا فایل یا فولدری به نام .linuxvaman بعنوان مخفی در نظر گرفته میشه. گاهی اوقات پیش میاد که ما دوست نداریم فایلی رو ببینیم، مثلا یه فایل log از یه برنامه ایجاد میشه تا اتفاقات مربوط به اون برنامه رو در خودش نگه داره. حالا اگه ما بیایم اول اسم این فایل یک نقطه بذاریم عملا کار بیهوده ای کردیم. چون در اجرای بعدی اون برنامه دوباره فایل با نام اصلی خودش ساخته میشه.

اما یک راه بسیار ساده برای مخفی کردن فایلها و پوشه ها در لینوکس وجود داره، بدون تغییر نام اونها و بدون گذاشتن نقطه در ابتدای اسامی!

کافیه یک فایل به این اسم در پوشه ای که میخواهید فایلها و پوشه هایی رو مخفی کنید بسازید .hidden و در اون اسامی چیزهایی که میخواید هر کدوم در یک خط بنویسید و ذخیره کنید. و بعد یک بار فایل منیجر رو ببندید و باز کنید. خواهید دید که فایلها مخفی شدند. و البته با کلید Ctrl + H نمایش داده میشن.

چقدر خوب واقعا!




حاصل سر و کله زدن های من با لینوکس