لینوکس و من

۴ مطلب با کلمه‌ی کلیدی «nvidia» ثبت شده است

نصب 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




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

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

استفاده از گرافیک nvidia در لینوکس

یکی از سوالاتی که همیشه ذهن من رو درگیر خودش میکرد این بود که چرا من 2 تا پردازشگر گرافیکی روی لپتاپم دارم اما فقط میتونم از پردازشگر اینتل استفاده کنم و این که اصلا چطور میشه بین این دوتا سویچ کرد؟! تااین که نشستم ته و توی قضیه رو در آوردم.

داشتن دو پردازشگر گرافیکی در کنار هم نتیجه تکنولوژیه به نام ٬آپتیموس٬ که شرکت nvidia اون رو توسعه میده و فلسفه اصلیش هم اینه که روی لپتاپ ها 2 تا پردازشگر داشته باشیم که یکی ضعیف‌تر و کم مصرف‌تر باشه و یک پردازشگر قوی (پرمصرف) برای پردازش‌های بزرگتر. این کار باعث میشه که لپتاپ دیرتر شارژش رو در شرایط عادی از دست بده و اگر یک پردازش بزرگ داشتید یک پردازشگر پرقدرت برای انجامش داشته باشد.

توی ویندوز همه این کارا خیلی راحت انجام میشه.(و از حق نگذریم در این زمینه خیلی خوب کار میکنه) اما توی لینوکس این کار خیلی باحال‌تره یعنی من میتونم به راحتی کامند بزنم و یک برنامه رو با پردازشگر nvidia اجرا کنم یا این که بذارم با همون intel اجرا بشه.

معمولا وقتی که روی یک لپتاپ با تکنولوژی اپتیموس لینوکس نصب میکنید اکثر توزیع ها درایور های intel رو نصب و از اون استفاده میکنند و پردازشگر nvidia (قویتره!) رو میذارن خاک بخوره! ولی خب قطعا راه هایی وجود داره برای استفاده از این نیروی خفته!

1- بعضی لپتاپ ها توی BIOS این امکان رو دارن که بین گرافیک ها سویچ کنید. یعنی یکی رو خاموش کنید یا هر دو رو فعال کنید. یعنی کافیه پردازشگر intel رو غیرفعال کنید وسیستم رو بوت کنید تا کل سیستم از nvidia استفاده کنه. خب این کار مشکلات خودش رو داره . اولا، این کار لپتاپ رو پرمصرف میکنه و مشکل دوم این که بعضی مادربودها توی بایوس چنین امکانی رو ندارن ( اینو میگم چون روی لپتاپ خودم اینجوری بود....یا شاید من پیداش نکردم)
2- استفاده از درایور رسمی nvidia که چند تا مشکل داره. اولا که اجازه نمیده درست و حسابی بین GPU ها سوییچ کنید، دوما درایورش ( معادل فارسی درایور چیه؟!‌ راننده!!) یک درایور بسته است ... خودتون میدونید دیگه ( سوما ... اعتراف میکنم که دلیل اصلی که از این روش استفاده نمی‌کنم اینه که نتونستم کانفیگش کنم... یعنی با کانفیک xorg به مشکل خوردم و بعد از دو روز تلاش ولش کردم... شاید بعدا یک پست درباره این روش گذاشتم )
3- استفاده از درایور بازمتن nouveau که امکان سویچ کردن رو میده اما بازم چند مشکل داره . اولا نسبت به درایور رسمی nvidia عملکرد ضعبف‌تری داره ، دوما هیچ امکان و تنظیماتی برای صرفه‌جوبی در مصرف انرژی نداره.(من که کلا سمتش نرفتم... اگر کسی تجربه‌ای داره خوشحال میشم اگر کامنت کنه)
4- اما روش چهارم استفاده از زنبور‌عسل ( کلا چیز مفیدیه...آفرین بهش!) یک جواب بازمتن به تمام نیازهای لینوکسی هایی که میخوان از تمام نیروهای نهفته در سخت‌افزار لپتاپـشون استفاده کنند!

*چون مطلب داره طولانی میشه توضیحات درباره این روش رو در ادامه مطلب قرار دادم

به کار گیری nvidia optimus در debian

nvidia optimus یک تکنولوژی در کارت گرافیک های nvidia هست که خلاصه اش این میشه که هر وقت لازم باشه nvidia روشن میشه و به کار گرفته میشه. مثلا هنگام دیدن فیلم های با کیفیت یا بازی های سه بعدی خفن!  بنابراین از این طریق باعث کاهش مصرف باتری و کاهش تولید گرما میشه.
این توی ویندوز بصورت اتوماتیک انجام میشه. اما در لینوکس به خودی خود انجام نمیشه. پروژه ای به نام bumblebee راه افتاده تا بتونه در این زمینه کمک کنه. اما باز کاملا اتوماتیک نخواهد بود...
در ادامه متوجه میشید که چگونه bumblebee رو برای یک لینوکس بر پایه ی دبیان (نه اوبونتو) راه اندازی کنیم.
نکته: این مطلب مخصوص نسخه های ۳۲ بیتی هست.
خب... یه راه استفاده از سورس بسته ها هست که پیشنهاد نمیشه! راه سر راست تر رو میریم.

۰- بسته های nvidia-glx , nvidia-kernel-common, nvidia-kernel-dkms رو نصب کنید.

۱- یک ترمینال باز کنید و با دستور su وارد کاربر ریشه  بشید.
۲- این دستور رو اجرا کنید:
wget -O - http://suwako.nomanga.net/suwako.asc | apt-key add -
۳- فایل مخزن ها رو باز کنید:
sudo gedit /etc/apt/sources.list
۴- دو خط زیر رو به فایل مخزن ها اضافه کنید و save کنید
deb http://suwako.nomanga.net/debian sid main contrib deb-src http://suwako.nomanga.net/debian sid main
۵- بسته ها رو به روز رسانی کنید (نیاز به اینترنت هست)
apt-get update
۶- حالا bumblebee رو نصب کنید:
apt-get install bumblebee bumblebee-nvidia
اگر نصب نشد و حرفش این بود که Virtualgl نمیتونه نصب بشه، از این سایت دانلودش کنید و نصبش کنید. و بعد bumblebee رو نصب کنید.

۷- حالا کاربر خودتون رو به گروه bumblebee اضافه کنید. به جای $USER نام کاربری خودتون رو بذارید. مثلا amin
adduser $USER bumblebee
۸- دستور زیر رو هم اجرا کنید:
sudo update-alternatives --set glx /usr/lib/mesa-diverted
۹- فایل تنظیمات bumblebee رو باز کنید:
sudo gedit /etc/bumblebee/bumblebee.conf

مقدار عبارت TurnCardOffAtExit رو از false به true تغییر بدید. مقدار عبارت Driver= رو به nvidia تغییر بدید. مقدار عبارت AllowFallbackToIGC رو هم به false تغییر بدید. و مقدار عبارت PMMethod= رو هم به bbswitch تغییر بدید.

۱۰- این فایل رو باز کنید:
sudo gedit /etc/modprobe.d/blacklist.conf
و عبارت blacklist nouveau رو به آخرش اضافه کنید و save کنید.

حالا reboot کنید. اگه خوش شانس باشید (!) نباید مشکلی پیش بیاد.
با دستور optirun میتونید برنامه ای که نیاز دارید nvidia روشن باشه و کار کنه اجراش کنید. مثلا این طوری:

optirun firefox

بعد از بستن برنامه (در اینجا فایرفاکس) nvidia خاموش میشه. این نهایت کاریه که میشه انجام داد تا از nvidia optimus استفاده کرد.
برای اطلاعات بیشتر میتونید به اینجا و برای نحوه ی نصب از روی سورس به اینجا مراجعه کنید.

کنولوژی Optimus کارت گرافیک های nvidia و لینوکس

خب… نتبوک ۱۲۱۵n از تکنولوژی optimus کارتهای گرافیک nvidia استفاده میکنه. این تکنولوژی این امکان رو برامون ایجاد میکنه که کارت گرافیک در حالت هایی که نیازی بهش نیست، خاموش بشه و سیستم فقط با گرافیک های اینتل خود مادربرد کار کنه. این باعث میشه که طول باتری خیلی زیادتر بشه و سیستم هم بیخودی داغ نکنه.

در ویندوز به خاطر اینکه حالا هر چی، این درایور ها آماده اند و کاربر نیازی به سر و کله زدن نداره. و درایورها اتوماتیک بین کارت گرافیک ها سوییچ میشن. اما در لینوکس این درایور ها آماده نیستند و باید یکم تلاش کنیم تا بتونیم از این تکنولوژی استفاده کنیم. یه پروژه ای به نام bumblebee با تلفظ ˈbʌmblbiː در این لینک به ما در این امر کمک میکنه. اما اتوماتیک نمیتونه سوییچ کنه. باید هر وقت خودمون خواستیم یه کار خفن بکنیم، کارت گرافیک nvidia رو روشن کنیم. خب… اگر کاربر اوبونتو هستید، خیلی راحت :

sudo apt-add-repository ppa:mj-casalogic/bumblebee

sudo apt-get update

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

حالا باید از لود شدن درایور های کدباز nvidia که nouveau نام دارند جلوگیری کنیم:

sudo gedit /etc/modprobe.d/blacklist.conf

و عبارت blacklist  nouveau رو به آخرش اضافه کنید و یه بار ریبوت کنید.

اگر تنظیمات رو درست انجام دادید، حالا کارت گرافیک nvidia شما باید خاموش شده باشه. و شما تفاوت رو در صدای فن دستگاه و همچنین طول زمان باتری به طور محسوس خواهید دید. دستور acpi رو وارد کنید تا زمان باتری رو بهتون نشون بده. برنامه bumblebee ui که در منو ها هم اومده، این امکان رو میده که بصورت گرافیکی هر وقت که خواستید nvidia رو روشن کنید.

و اما پارسیکس…! چون پارسیکس عزیز از دبیان هست، بنابراین میریم سراغ debumblebee که باید سورس برنامه رو بگیریم و از روی سورس اون رو نصب کنیم. خب این کار رو کردم ولی متاسفانه در میانه ی راه با خطاهای زیادی روبرو شدم . اول شما این بسته رو نصب کنید. بعد این ها رو از طریق synaptic پیدا و نصب کنید. nvidia-kernel-common , nvidia-kernel,dkms.


یکمی کار پیچیده میشه. قرار نیست از bumblebee استفاده کنیم! چون من در لینوکس کار گرافیکی عجیبی انجام نمیدم، و همین اینتل برام کافیه، تصمیم گرفتم کلا nvidia رو به قولی از مدار خارج کنم. دو تا اسکریپت پیدا کردم که کارت رو روشن و خاموش میکنه. و یه اسکریپت هم وضعیت کارت رو بهمون میگه. بنابراین حالا با دو سه تا دستور، میتونم کارت رو به دلخواه خودم روشن خاموش کنم. چه خوب! از این سایت مدل دستگاهتون رو پیدا کنید! و یه جا نگهش دارید…

حالا این فایل برای خاموش کردن، این فایل برای روشن کردن و این فایل برای اعلام وضعیت رو هم دانلود کنید. فایل خاموش کردن رو با یه ویرایشگر متن باز کنید و خطی که اینو داره پیداش کنید: _SB.PCI0.P0P4.GFX0._DSM  همون طور که میبینید این یه عبارت ویژه است.  (مخصوص ۱۲۱۵n) از توی همون سایتی که گفتم یه جا نگهش دارید عبارت های ویژه ی مدل خودتون رو پیدا کنید و جایگزین این بکنید. و همین طور برای روشن کردن.

حالا با اجرای مثلا disablecard در ترمینال، کارت nvidia بعد از دو سه ثانیه خاموش میشه و شما قشنگ متوجهش میشید. و اگر acpi بگیرید میبینید که باتری در حالت فول شارژ از ۳ ساعت و نیم به ۴:۴۵ میرسه. و این فوق العاده است…

حالا شما برای اینکه این خاموش شدن در هر باری که سیستم بوت میشه اتفاق بیفته باید اون رو به crontab بسپارید! راه ساده و گرافیکیش استفاده از برنامه gnome-schedule هست. این اسکریپت رو مثلا در /usr/bin قرار بدید و با دستور sudo در هنگام بوت برای اجرا شدن تنظیمش کنید. (من کاربر خودم رو مجوز بدون پسورد برای sudo دادم).

خب… با اجرای اسکریپت nvidiastatus هم وضعیت روشن/خاموش بودن کارت بهتون گفته میشه. برای راحتی کار این اسکریپت ها رو در /usr/bin قرار بدید تا با یه دستور ساده sudo disablecard کارت خاموش و با sudo enablecard روشن بشه. و با nvidiastatus وضعیت اعلام بشه.

من گذاشتم به طور پیشفرض خاموش باشه. چون بهش نیاز ندارم. این اسکریپت ها و روش ها منبع مشخصی نداشتند که بخوام ذکر کنم. در اینترنت بصورت تکه تکه وجود دارند.