لینوکس و من

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

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

گوش دادن به موسیقی و رادیو و تقریبا هر چیز دیگه‌ای که بشه شنید یکی از اصلی ترین تفریحات منه. تقریبا 95 درصد همه چیزایی که گوش میکنم روی موبایلم ذخیره شده یا از طریق اپ‌های متنوع ارائه دهنده محتوای صوتی پخش میشه. خب که چی؟!‌ مشکل اینجاست که کیفیت صدای بلندگوی موبایل اصلا خوب نیست و حجم صدای مناسبی هم نداره. کاری که میخوام انجام بدم اینه که به طریقی صدای گوشی رو به لپتاپ منتقل کنم تا بتونم از یک اسپیکر یا هدفون همزمان برای موبایل و لپتاپ استفاده کنم و مجبور نباشم هر کدوم رو جدا متصل کنم. اگر با یک PC میخواستم این کار رو انجام بدم خیلی خیلی ساده بود. کارت صدا مادربردها 3 تا جک AUX داشتند که یکی برای خروجی بلندگو (همون سبزه) یکی مخصوص ورودی میکروفن(صورتی) یکی هم برای ورودی‌های غیرمیکروفن (آبی). حالا فقط کافی بود یکم سیم کشی کنم و آبی رو بزنم به گوشی و سبز رو بزنم به اسپیکر (احتمالا یه کوچولو تنظیمات نرم‌افزاری) و پایان. ولی خب من از سیم‌کشی الکی متنفرم و علاوه براین لپتاپ من فقط یک پورت aux داره که دقیقا هم نمیدونم توش چه خبره به علاوه برای اتصال اسپیکر بهش نیاز دارم! پس باید به یک روش هیجان‌انگیر(!)‌ دیگه گوشی رو به لپتاپم متصل کنم. اکثر توزیع‌های دسکتاپ گنو/لینوکس pulseaudio را به صورت پیشفرض نصب دارند. pulseaudio برنامه‌ایه که بین نرم‌افزار های مختلف و سخت افزارهای خروجی و ورودی صدا قرار میگیره و به شما اجازه میده کلی کار عجیب و غریب انجام بدید. مثلا صدای یک برنامه خاص رو کم کنید یا کلا قطع کنید، یا صدای اون برنامه رو بفرستید برای pulseaudioای که روی یک کامپیوتر دیگه اونور دنیا نصب شده و از اونجا بدید به خروجی صدا!
خب این موجود عجیب، یک ماژول داره که به شما اجازه میده از پخش کننده های بلوتوث مثل هدست ها و غیره استفاده کنید. اما چیزی که ما میخوایم درست برعکس اینه، یعنی میخوایم از لپتاپ به عنوان یک پخش کننده بلوتوث استفاده کنیم(چیزی شبیه به اتصال یک میکروفن بلوتوث)، خوش بختانه این موجود این قابلیت رو هم داره. نصب ماژول با توجه به توزیع متفاوته. برای من روی اوبونتو 16.10 نصب شده بود و نیاز به نصب چیز اضافه‌ای نبود. درباره دبیان هم فکر میکنم همینطور باشده. بهرحال اسم پکیج ماژول برای دبیان بیس‌ها اینه pulseaudio-module-bluetooth.
اما اگر توزیع دیگه ای دارید این یه لیست از چیزاییه که بهتره نصب کنید:
 bluez blueman  pulseaudio-module-bluetooth pavucontrol
اگر همه چیز را درست نصب کرده باشید بعد از pair کردن موبایل و لپتاپ، در تنظیمات اندروید قسمت بلوتوث گزینه ای تحت عنوان use for audio source خواهید دید. با فعال کردن این گزینه خروجی صدای موبایل شما به لپتاپ ارسال خواهد شد. در این مرحله به کمک رابط گرافیکی‌ای که برای کنترل pulseaudio استفاده میکنید(با توجه به توزیع و محیط دسکتاپ متفاوت است، در اوبونتو sound setting) میتوانید این ورودی جدید صدا را کنترل کنید. (اگر درباره رابط گرافیکی palseaudio اطلاع ندارید pavucontrol را نصب و استفاده کنید. به علاوه اگر در اتصال بلوتوث به مشکل خوردید blueman یک رابط گرافیکی قابل قبول برای اینکار است.)

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

در ابتدا مطمئن شوید که pulseaudio به درستی نصب و کانفیگ شده باشد. ماژول bluetooth برای pulseaudio معمولا به همراه پکیج اصلی pulseaudio نیست و باید جداگانه نصب شود.
به علاوه bluez و را نصب کنید. گاها پکیج جداگانه ای مثلا bluez-utils وجود دارد که ابزارهای bluez در آن قرار میگیرد و باید آن را هم نصب کرد.
بعد از نصب و کانفیگ bluez دستور bluetoothctl را اجرا کنید از این دستور برای کنترل بلوتوث در خط فرمان استفاده میشود. سپس درستورات زیر را در این محیط اجرا کنید.
power on
agent on
default-agent
scan on
با اجرای این دستورات دستگاه بلوتوث شما فعال شده و شروع به جستوجو میکند. هر گاه دستگاه جدیدی یافته شود پیغامی مشابه زیر نمایش داده میشود
 [NEW] Device FF:FF:FF:FF:FF:FF DeviceName
به علاوه با اجرای دستور devices تمام دستگاه‌های موجود نمایش داده خواهند شد.
 info FF:FF:FF:FF:FF:FF
برای pair شدن با دستگاه مورد نظر از دستور pair استفاده میکنیم و به عنوان آرگومان مک‌آدرس دستگاه بلوتوث
 pair FF:FF:FF:FF:FF:FF
همچنین به کمک دستور info میتوان اطلاعاتی درباره امکانات دستگاه مورد نظر یافتحال کافسیت دستور زیر را وارد کرده و به دستگاه متصل شوید:
 connect FF:FF:FF:FF:FF:FF
اگر نصب ماژول pulseaudio به درستی انجام شده باشد پس از اتصال، موبایل یا هر وسیله دیگر از اتصال به یک پخش کننده صوتی آگاه میشود و با پخش هر فایل صوتی صدای آن به اسپیکر لپتاپ منتقل خواهد شد. در غیر این صورت تنضیمات دستگاه خود را کنترل کنید. در صورتی که در پخش کننده خود مشکلی ندارید نرم‌افزار هایی مثل ponymix , pamixer و غیره به شما اجازه میدهند pulseaudio را از خط فرمان تنظیم کنید. به علاوه برای pulseaudio یک میکسر تحت وب نیز موجود است که به کمک آن میتوانید pulseaudio را از راه دور کنترل کنید

برنامه کوچک Gpick برای رنگ‌باز ها!

برنامه ی کوچکی وجود داره به نام gpick که بسیار برای کسایی که با کارهایی مثل ویرایش تصاویر یا اونهایی که کار طراحی قالب میکنند کاربردیه.


به راحتی میتونید با امکاناتی که این برنامه داره از هر جای صفحه نمایش کد رنگ ها رو بدست بیارید

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

من یکی از کسانی هستم که کمتر از کیبرد لپتاپ استفاده میکنند و تقریبا 90 درصد اوقات یک کیبرد به لپتاپ متصل میکنم. اما کیبرد دوم من یک کیبرد کاملا ساده است(هیچ کلید اضافه ای برای کنترل مدیا و غیره ندارد) و خب این مساله کمی آزاردهنده است که برای رد کردن یک موسیقی از ماوس یا کیبرد لپتاپ استفاده کنم!
برای حل این مشکل 2 راه حل بیشتر نداشتم:
1- تغییر تنظمیات keyboard shortcut اوبونتو. این راه حل قطعا راه مناسبی نیست، چون نمیشه بیش از یک میانبر برای دستورهای کنترل مدیا تنظیم کرد(شاید بشه ولی من اطلاع ندارم!)، پس کل میانبر های اصلی کیبرد لپتاپ از کار می افتاد که اصلا خوشایند نیست.
2- اضافه کردن این کلید ها به کیبرد. (منظورم این نیست که به صورت فیزیکی چنتا کلید اضافه کنم!) یعنی چنتا شرتکات جدید داشته باشم که ازشون برای کنترل مدیا استفاده کنم.
ساده ترین راهی که برای این کار به نظر من رسید استفاده از  xdotool بود. از این ابزار میتوان برای شبیه سازی ورودی های موس و کیبرد (و سایر ورودی ها!)، و تغییر اندازه پنجره ها، و ... استفاده کرد. استفاده ما در اینجا خیلی ساده است و زیاد درگیر این ابزار نمیشیم. اگر علاقه دارید بیشتر با این پکیج آشنا بشید man در خدمت شماست!
خب xdotool یک دستور داره به اسم key که اسم هر کلیدی که بهش میگید رو فشار میده! (البته واقعا فشار نمیده! مجازیه!) مثلا:
 xdotool key a
به xserver میگه که a روی کیبرد فشار داده شد!
خب تا الأن یه کد کوچک دارم که میتونم جای اینکه به خودم زحمت بدم، دستم رو دراز کنم و کلیدی رو روی کیبرد لپتاپ فشار بدم، به کامپیوتر دستور بدم اینکارو انجام بده!
هدف اینه که فایلهای سیستمی یک رام رسمی دانلود شده (در اینجا برای گوشی های هواوی) را از داخل فایل مربوطه استخراج کنیم.
برای اینکار در لینوکس، نیاز به Perl داریم. یک اسکریپت آماده که در ادامه مطلب اون رو کپی کنید و در یک فایل با پسوند pl ذخیره کنید.

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

perl /pat/to/script.pl /path/to/UPDATE.APP
حالا در همون محل اسکریپت یک فولدر ایجاد میشه به نام output که یه سری فایل توی اون ذخیره میشن. اینها همون پارتیشن ها و قسمت های مختلف رام هستن که روی سخت افزار گوشی شما قرار میگیرن و با پسوند img هستند. (شما هر رام از هر گوشی ای داشته باشید و فایلهای img اون رو استخراج کرده باشید میتونید از ادامه ی ماجرا استفاده کنید.

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

حالا با این دستور، فایلهای img رام به فایلهای imgی تبدیل میشن که میتونیم بوسیله mount اونها رو ببینیم.

 ./simg2img factoryfs.img output.img

که البته factoryfs.img مثلا فایل سیستمی ای هست که شما از رام استخراج کردید.

حالا با کمک mount محتویات داخلش رو میتونیم ببینیم
 mount -o loop /path/to/output.img /mnt/img

برای دیدن اسکریپت perl به ادامه مطلب برید

قسمت های نارنجی مسیرهایی است که وجود دارند.

ویرایش فایل های موزیک

ابزارهای گرافیکی و غیر گرافیکی مختلفی برای ویرایش فایلهای موسیقی وجود دارند. یکی از معروف های اونها Easytag هست. اما امروز میخواستم نصبش کنم متوجه شدم که برای اجرا شدن نیاز به کتابخانه های گنوم داره. من هم که بالکل با xfce کار میکنم.
به جاش نرم افزار puddletag رو نصب کردم و دیدم که چقدر عالی تر و کاربردی تر از easytag طراحی شده.


عکس از وبلاگ دیگر است

قابلیت های زیادی داره که کاملا نیاز های شما رو در مرتب سازی آرشیو موسقیتون برطرف میکنه. کمتر از دو مگابایت هم با بسته های اضافی البته، دانلود لازم داشت.

ویرایش:
برنامه Easytag برای اجرا شدن این خطا رو میداد:
(easytag:5954): GLib-GIO-ERROR **: Settings schema 'org.gnome.EasyTAG' is not installed

Trace/breakpoint trap (core dumped)

که من فکر کردم این مربوط به کتابخانه های گنوم میشه. اما یه سرچی زدم و مشکل با اجرای این دستور برطرف شد:
 sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

ضمنا، جامعه ی لینوکس جای آدم‌های بی‌تربیت نیست. همین طور این وبلاگ جای کامنت های آدم های بی تربیتی که پدر مادرشون وسیله پیشگیری نداشتن نیست.
این یک مطلب لینوکسی نیست. اما چون مشکل خیلیهاست نوشتم

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

  • آندرویدهای پایین تر از نسخه ۴.۴ این مشکل رو ندارند. با نصب نرم افزار Blacklist pro میتونن خیلی راحت پیامک های تبلیغاتی رو با انواع و اقسام روشها بلاک کنند. مثلا تعیین کنند اگر در یک پیامک کلمه "تخفیف" وجود داشت، فیلتر بشه. یا تعیین کنند هر شماره ای که با ۰۹۰۳ شروع شد فیلتر بشه و ... (در ادامه توضیح داده شده است)

  • آندروید های ۴.۴ و بالاتر متاسفانه به دلیل تغییراتی که در سیستم مدیریت اس ام اس توسط گوگل در آندروید داده شد این امکان دیگه وجود نداره که چند تا برنامه بتونن روی اس ام اس ها مدیریت کنند. بنابراین فقط در صورتی میتونین اس ام اسی رو فیلتر کنین که این ویژگی در خود برنامه ی مدیریت اس ام اس‌های شما وجود داشته باشه. که اکثر برنامه های اس ام اس پیشفرض گوشی این ویژگی رو ندارند. برنامه هایی هم که قابلیت فیلتر کردم اس ام اس بصورت کلمه ی داخل پیامک ها رو دارند بسیار کم هستند و من هرچی برنامه بود امتحان کردم اما مفید واقع نشد.
اما یک راه حل برای آندروید های ۴.۴ (و احتمالا بالاتر، چون من امتحان نکردم) وجود داره. و اون عملیات به ظاهر پیچیده اما در باطن ساده ای که در ادامه ی مطلب بخونید...

اول برای اینکه بفمید ورژن آندروید شما چیه، از منوی گوشی آخریییین گزینه یعنی About phone رو انتخاب کنید. اونجا نسخه آندروید شما رو نوشته 

چند ترفند 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 بهره برد.
علاوه بر این میتوان از این مزیت در جهت عکس نیز استفاده کرد. مثلا به کمک این دستور میتوان از سیستم بکاپ گرفت و مستقیما روی یک کامپیوتر روی شبکه ذخیره کرد:
"dd if=/dev/sdx| gzip -c9 |ssh <server_name> "cat > /path/to/file
تذکر: فراموش کردن " ها میتواند نتایج جالبی داشته باشد :)
حتی میتوان فایل هایی را بازنویسی کرد که ویرایش آنها نیاز به دستور روت دارد.
cat /file/on/client |ssh -tt <server_address> sudo tee /path/to/file
نکته:‌ درصورت استفاده از sudo در دستورات ssh باید از سویچ -tt استفاده کنید.

علاوه بر همه این مثال ها میتوان از قدرت bash و ابرازهای مختلف استفاده کرد و به ترکیب‌های هیجان‌انگیز بیشتری رسید. اگر مثال های جالبتری به ذهنتان رسید آنهارا باما در میان بگذارید.

آپدیت:
به توصیه یکی از دوستان تصمیم گرفتم توضیح مختصری درباره دستور scp به این پست اضافه کنم.