پیرو پست قبلی، من نیاز داشتم تا فایلهای خاصی رو با ویرایشگر متنی nano باز کنم. تا الان برای این کار در ترمینال دستور nano
رو با مسیر مورد نظرم میدادم. مثلا:
$ nano ~/myscripts/test.sh
اما حالا با اضافه کردن nano به منوی open with کافیه وقتی توی فایل منیجر هر جا که هستم روی فایل دبل کلیک کنم تا اون فایل در یک پنجره ترمینال با nano باز بشه.
فایل .desktop
برای این کار مشابه زیر خواهد بود. قسمت کامند بستگی به این داره که از چه ترمینالی استفاده میکنید. kgx
همون console گنوم هست.
~/.local/share/applications/open-with-nano.desktop[Desktop Entry]
Type=Application
Name=Nano
MimeType=application/x-sh;
Exec=kgx -e nano %f
NoDisplay=true
StartupNotify=true
Icon=utilities-x-terminal
وقتی میخوایم یک فایل خاصی رو با یک اپلیکیشن دیگه ای بجز پیشفرض باز کنیم سراغ منوی Open With میریم. اما اگر برنامه مورد نظر ما در لیست نبود چی؟ بعضی از دسکتاپ ها این امکان رو فراهم کردند که بتونیم browse کنیم و برنامه مورد نظر رو پیدا کنیم. اما بعضی دسکتاپ ها امکان browse در اینجا رو ندارند. حالا اگه هدف ما اجرای اون فایل با یک کامند بخصوص باشه چی؟!
داستانی که برای من پیش اومد در مورد فایلهای chm است. همون طور که میدونید اینها فایلهای help ویندوز هستند. اما برخی کتابهای قدیمی بودند که با این فرمت ساخته شده بودند و تبدیل کردن اونها به مثلا pdf کاری بیهوده بود. برنامه های لینوکسی که بتونن فایلهای chm رو باز کنن هم خیلی ضعیف و قدیمی هستن و اغلب دیگه کار نمیکنن. مثل chmsee یا xchm. اما یک نرم افزار اوپن سورس به نام SumatraPDF با حجمی بسیار کم وجود داره که میتونه انواع فایلهای pdf و chm و epub رو به راحتی و به درستی باز کنه. اما متاسفانه فقط تحت ویندوز نوشته شده. ولی با wine به راحتی قابل اجرا است.
ولی اگر سیستم نفهمید، ما چطور بهش بفهمونیم که فایلهای chm رو با برنامه ای از برنامه های wine باز کنه؟! کار سختی نیست... یک فایل با نام دلخواه و با محتوای مشابه در مسیر زیر ایجاد میکنیم:
~/.local/share/applications/wine-chm-opwth.desktop[Desktop Entry]
Type=Application
Name=SumatraPDF
MimeType=application/vnd.ms-htmlhelp;
Exec=wine '/PATH/TO/SumatraPDF.exe' %f
NoDisplay=true
StartupNotify=true
Icon=/PATH/TO/ICON/SumatraPDF.png
حالا بعد از یک بار خروج و ورود دوباره به دسکتاپ آیتم مورد نظر ما در منوی Open With ظاهر شده.
شما میتونید برای فایل تایپ های مختلف کارهای مشابهی بکنید. برای اینکه mimetype صحیح فایلها رو بدونید، سری به این لینک بزنید
همون طور که میدونید آفیسسوییت های متعددی وجود دارند که اکثرا سعی کرده اند از آفیس مایکروسافت تقلید کنند و شکل و شمایل اون رو در نرم افزار خودشون پیاده سازی کنند. بعضی از این آفیسسوییت ها برای دسکتاپ لینوکس هم توسعه داده میشن و موفق هم هستند. از معروف ترین اونها WPS Office, Collabora Office, OnlyOffice هستند که ظاهری بسیار شبیه به آفیس مایکروسافت دارند.
در این بین، آفیس قدیمی LibreOffice که در اکثر توزیع های لینوکسی نصب میشه، حداقل در ظاهر پیشرفت بسیار آهسته ای داره و هیچ وقت هم تلاش نکرده خودش رو شبیه به مایکروسافت بکنه. اما چند وقت پیش بود که بالاخره یک تغییر ظاهر اساسی در خودش ایجاد کرد و کمی به روز شد.
در این پست میخوام یک تم GTK رو معرفی بکنم که رنگ و استایل آفیس مایکروسافت رو داره و ما میتونیم از اون برای LibreOffice استفاده کنیم تا ظاهری "از نظر من" دلنشین تری داشته باشیم.
برای این کار کافیه این فایل رو دانلود کنید و در پوشه
~/.local/share/themes
کاربر خودتون از حالت فشرده خارجش کنید. و بعد LibreOfficeرو با این دستور اجرا کنید. در واقع ما به سیستم میگیم فلان برنامه رو با تم مورد نظر ما اجرا کنه.
برای برنامه writer:
$ GTK_THEME=libmod-writer libreoffice --writer --nologo
برای impress
و calc
و math
و draw
هم به جای writer
اونها رو قرار بدید. در نهایت هم فایل اجرایی اونها رو ویرایش کنید تا این تغییرات همیشگی باشن. برای اینکار فایل .desktop
مورد نظر رو پیدا کنید و در خط مربوط به فرمان بدین شکل عمل کنید. و یا اینکه اینجا رو ببینید.
Exec=env GTK_THEME=libmod-writer libreoffice --writer --nologo %U
اما ایراد این روش اونجا معلوم میشه که شما وقتی یک بار libreoffice رو مثلا با writer اجرا میکنید، اگر همون موقع impress رو هم اجرا کنید دیگه impress تم قرمز به خودش نمیگیره و همون تم آبی رو به خودش میگیره. یعنی هر کدوم رو که اول اجرا کردید بعدی هم با همون تم باز میشه. کاریش هم نمیشه کرد... (بنابراین نتیجه میگیریم که عکس فوق ساختگی است 😬 )
اگر LibreOffice رو از Flatpak نصب کردید هم بایستی عبارت GTK_THEME=libmod-writer
یا یکی دیگه از تم ها رو بعنوان یک متغیر برای برنامه آفیس تعیین کنید:
$ flatpak override --env=GTK_THEME=libmod-writer --user org.libreoffice.LibreOffice
من راهی پیدا نکردم که برای Flatpak برای هر کدوم از برنامه ها به صورت جدا env تعریف کنم. چون فقط یک libreoffice وجود داره که Flatpak میشناستش. یعنی باید برای همه برنامه های آفیس یک رنگ رو انتخاب کنید.
توجه کنید برای اینکه Flatpak تم شما رو بشناسه فایل تم ها حتما باید در مسیر ~/.themes
باشن. و نه در جای دیگه.
و نکته آخر اینکه صفحه سازنده این تم اینجا است. من رنگ ها رو کمی تغییر دادم تا همون رنگ های آفیس مایکروسافت باشن و پهنای بوردر رنگی رو هم کمی کاهش دادم. همچنین برای draw و math هم درست کردم که در فایل اصلی نیستن.
مدتها بود که یک اسکریپت دم دستی رو برای راحت تر کردن فانکشنهای پکمن استفاده میکردم. که البته ایرادهای فنی و اسکریپتی زیادی داشت. سر انجام با راهنمایی های چند تا دوست خوب توی گروه های آرچ، دستی به سر و روی اسکریپت کشیدم.
هدف این اسکریپت اینه که یک سری عملکردهای رایج و به درد بخور پکمن رو که بعضا دستورات بلندی میشن و نمیشه به یاد سپرد، به دستورات کوتاه تبدیل کنیم.
ویژگی ها و کارهایی که این اسکریپت میکنه:
با یک udev rule ساده میتونیم به سیستم بگیم وقتی شارژر قطع شد، بکلایت (نور صفحه) رو کم کنه و وقتی شارژر وصل شد نور صفحه رو زیاد کنه.
فایل زیر رو ایجاد کنید و به جای دستوری که من نوشتم، دستور مورد نظر خودتون رو وارد کنید. راه های متعددی برای تغییر بکلایت وجود داره. یکی از اونها brightnessctl
هست.
/etc/udev/rules.d/99-backlight-ac-battery.rules
## ACTION TO DO WHEN ON BATTERY
SUBSYSTEM=="power_supply", ATTR{online}=="0", ENV{POWER}="off", RUN+="/usr/bin/brightnessctl set 30%"
## ACTION TO DO WHEN ON CHARGER
SUBSYSTEM=="power_supply", ATTR{online}=="1", ENV{POWER}="on", RUN+="/usr/bin/brightnessctl set 70%"
و بعد یک بار دستور زیر رو اجرا کنید تا این rule توسط سیستم شناسایی بشه
$ sudo udevadm control --reload-rules
همون طور که میدونید در لینوکس برای دسترسی به درایوها باید اونها رو در یک فولدر mount کرد. ولی جالبه که بدونید میتونیم هر یک از محتویات یک درایو ماونت شده رو هم در جاهای دیگه ماونت کرد! به این کار میگن bind (بخوانید بایند) دو تا فولدر به هم.
یک چیزی شبیه به ایجاد کردن لینک که با دستور ln
انجام میدیم. منتها با یک سری تفاوت های کوچک...
ln
ما یک شورتکات از مقصد میسازیم. درواقع فولدر واقعی وجود نداره. اما در bind ما یک فولدر میسازیم و محتویات یک فولدر دیگه رو داخلش ماونت میکنیم.bindfs
هم bind کرد که نیاز به دسترسی root نداره، ولی خب برای نصب پکیج باید دسترسی root داشته باشید!من در هاردم، چند تا فولدر دارم به نام های Documents, Downloads, Pictures, Videos, Music. یعنی همون هایی که در فولدر home کاربری هم داریم. تا الان با ln یک شورتکات از هر کدوم این ها در فولدر home داشتم. ولی حالا فولدرهای روی هارد رو با فولدرهای متناظرشون در فولدر home کاربر bind کردم. ظاهر قضیه بهتر شده. یعنی دیگه خبری از فلش روی آیکن نیست و انگار واقعا همه چیز در home قرار داره.
توجه: بعد از نوشتن این مطلب متوجه شدم فعلا امکان Trash کردن فایلها در مسیرهای bind شده دستکم در دسکتاپها وجود نداره. ولی در cli با trash-cli میشه اینکار رو کرد. اما بعدا متوجه شدم که با bindfs میشه! پایین تر توضیح دادم.
برای اینکه بدونید چطوری، ادامه مطلب رو ببینید...
حاصل سر و کله زدن های من با لینوکس