انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ ( حل شد )  (دفعات بازدید: 1020 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین mrnubuntu

  • Newbie
  • *
  • ارسال: 23
سلام وقت همگی بخیر

میخواستم بدونم چجوری میتونم این کارو

echo 60 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold
@reboot root echo 60 > /sys/class/power_supply/BAT0/charge_control_end_threshold >>> /etc/crontab

با استفاده از udev انجام بدم و اینکه با کدومش بهتر crontab یا udev ( در خصوص کار من )

و اینکه میخوام بدونم روشی وجود داره که 3 تا حالت داشته باشه ینی 60 و 80 و 100 که بتونم بین اینها بتونم سویچ کنم هر موقع خواستم ( که دیگه اون کامند به اون بلندی رو نزنم )

از ابونتو 20.04 استفاده میکنم راستی

ممنونم
« آخرین ویرایش: 22 اردیبهشت 1400، 06:16 ب‌ظ توسط mrnubuntu »

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5124
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #1 : 20 اردیبهشت 1400، 10:11 ق‌ظ »
فرقی نداره از کدوم روش استفاده کنید. udev یا crontab هر دو یه نتیجه میدن.
ولی udev معمولا برای اینکار‌ها استفاده میشه.
اول برید و ببینید توی این مسیر BAT1 هست یا BAT0 (معمولا از 0 شروع میشه)
/sys/class/power_supply
بعد یه فایل توی مسیر /etc/udev/rules.d/ بسازید. شکل کلی اسمش اینجوری باشه. اول یه عدد، بعد خط فاصله، بعد اسم و آخرش پسوند rules. داشته باشه. مثل این:
99-name.rules
داخلش اینو بنویسید.
KERNEL=="BAT0", SUBSYSTEM=="power_supply", ATTR{charge_control_end_threshold}="60"
بعد از خاموش روشن کردن، تنظیمات باید اعمال بشه.

تا جایی که من بلدم میشه برای سوال دوم یه اسکریپت بسازید که درصد رو از شما بگیره و اون دستور بلند رو با مقداری که دادید اجرا کنه تا لازم نباشه هر بار کل اون دستور رو وارد کنید. یه راه دیگه هم اینه که برای خودتون چنتا alias برای هر حالات مختلف درست کنید.
حالا بگید از کدوم روش می‌خواهید استفاده کنید؟
میدونید که زکات علم نشر آن است

آفلاین mrnubuntu

  • Newbie
  • *
  • ارسال: 23
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #2 : 20 اردیبهشت 1400، 06:23 ب‌ظ »
فرقی نداره از کدوم روش استفاده کنید. udev یا crontab هر دو یه نتیجه میدن.
ولی udev معمولا برای اینکار‌ها استفاده میشه.
اول برید و ببینید توی این مسیر BAT1 هست یا BAT0 (معمولا از 0 شروع میشه)
/sys/class/power_supply
بعد یه فایل توی مسیر /etc/udev/rules.d/ بسازید. شکل کلی اسمش اینجوری باشه. اول یه عدد، بعد خط فاصله، بعد اسم و آخرش پسوند rules. داشته باشه. مثل این:
99-name.rules
داخلش اینو بنویسید.
KERNEL=="BAT0", SUBSYSTEM=="power_supply", ATTR{charge_control_end_threshold}="60"
بعد از خاموش روشن کردن، تنظیمات باید اعمال بشه.

تا جایی که من بلدم میشه برای سوال دوم یه اسکریپت بسازید که درصد رو از شما بگیره و اون دستور بلند رو با مقداری که دادید اجرا کنه تا لازم نباشه هر بار کل اون دستور رو وارد کنید. یه راه دیگه هم اینه که برای خودتون چنتا alias برای هر حالات مختلف درست کنید.
حالا بگید از کدوم روش می‌خواهید استفاده کنید؟


سلام بابت پاسخ ممنونم

اگر میشه روش ساختن alias رو توضیح بدین و اینکه اصلا چی هستش؟
در مورد اسکریپت هم ینی خودم میتونم با پایتون بنویسم؟ اگر بله لطفا راهنمایی کنید

ممنونم

آفلاین danadarvishzadeh

  • Newbie
  • *
  • ارسال: 7
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #3 : 20 اردیبهشت 1400، 11:07 ب‌ظ »
این امکان محدود به برند میشه؟
لپ تاپ من acerئه و فایل charge_control_end_threshold توی دایرکتوری‌ای که گفتید رو ندارم

آفلاین mrnubuntu

  • Newbie
  • *
  • ارسال: 23
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #4 : 21 اردیبهشت 1400، 01:27 ب‌ظ »
این امکان محدود به برند میشه؟
لپ تاپ من acerئه و فایل charge_control_end_threshold توی دایرکتوری‌ای که گفتید رو ندارم


اینکه این فایل تو دایرکتوری شما وجود نداره رو نمیدونم ولی اینو میدونم ممکنه BAT ها متفاوت باشه مثلا برای من BAT1 هستش بجای BAT0
لپ تاپ من Asus

آفلاین danadarvishzadeh

  • Newbie
  • *
  • ارسال: 7
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #5 : 21 اردیبهشت 1400، 05:20 ب‌ظ »
این امکان محدود به برند میشه؟
لپ تاپ من acerئه و فایل charge_control_end_threshold توی دایرکتوری‌ای که گفتید رو ندارم


اینکه این فایل تو دایرکتوری شما وجود نداره رو نمیدونم ولی اینو میدونم ممکنه BAT ها متفاوت باشه مثلا برای من BAT1 هستش بجای BAT0
لپ تاپ من Asus


اها اها
خیلی ممنونم
واسه من اسمش BAT0ئه

یه سرچ زدم و بنظر میاد فقط برای thinkpadها و asus این پارامتر هست  ::)

آفلاین mrnubuntu

  • Newbie
  • *
  • ارسال: 23
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #6 : 22 اردیبهشت 1400، 12:10 ق‌ظ »
با نوشتن متغیر محیطی میشه اینکارو کرد؟

مثل این:

[left]Command = 60 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold[/left]
و اینو با chmod 755 اجرایی کنم بعد به PATH اضافه کنم و هر جا خواستم بین 60 و 80 و 100 سوییچ کنم

این راه اصولیه یا خیر ممنونم میشم راهنمایی کنید

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5124
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #7 : 22 اردیبهشت 1400، 03:51 ب‌ظ »
نقل‌قول
سلام بابت پاسخ ممنونم

اگر میشه روش ساختن alias رو توضیح بدین و اینکه اصلا چی هستش؟
در مورد اسکریپت هم ینی خودم میتونم با پایتون بنویسم؟ اگر بله لطفا راهنمایی کنید

ممنونم

alias یعنی اسم مستعار. یه مثالش la می‌تونه باشه. دستوری به اسم la وجود نداره. و وقتی شما می‌زنید la در اصل ls -a اجرا میشه. می‌تونید فایل bashrc. رو توی هوم خودتون رو ببینید. alias ها رو اینجوری تعریف می‌کنند:
alias alias-name='long command'
برای مورد شما میشه اینجوری توی فایل bashrc. تعریف کرد.
alias bat-to60='echo 60 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold'همینجوری برای ۸۰ و درصد‌های دیگه هم میشه اعمال کرد. البته بهتره alias های جدید رو توی فایل bash-aliases. توی هوم خودتون بزارید تا فایل bashrc. عوض نشه.

درباره اسکریپت هم میشه با پایتون نوشتش ولی با bash هم میشه.
من اینو با bash برای شما نوشتم. اول چک میکنه که ورودی بین ۱ تا ۱۰۰ باشه. اگه بود بقیه اجرا میشه، اگه نبود، دوباره از کاربر می‌خواهد که ورودی بده.

اگه اینو همینجوری یه جای دیگه استفاده کنید، احتمالا به مشکل می‌خورید، چون بررسی نمی‌کنه که آیا یاتری وجود داره یا اسم باتری چی هست یا اصلا باتری از این ویژگی پشتیبانی می‌کنه یا نه.
#!/bin/bash
while :
do
      read -p "Pleas enter percentage (an integer between 1 to 100): " INPUT
      if [ $i -gt 0 ] && [ $i -lt 101 ]; then

            echo "$INPUT" | tee /sys/class/power_supply/BAT1/charge_control_end_threshold

            if [ $? -eq 0]; then
                  echo "charge_control_end_threshold successfully set to $INPUT"
            else
                  echo "Somthing happend and charge_control_end_threshold could not set to $INPUT"
            fi

            break

      else
            echo "Invalid input."
done

اینو توی یه فایل به هر اسمی می‌خواهید بنویسید و ذخیره کنید و حالا دسترسی اجرایی بهش بدید. (فرض می‌کنیم اسمش رو set-battery گذاشتید)
chmod +x set-battery
الان می‌تونید بزاریدش توی مسیر /usr/local/bin/ اینجوری هر موقع نیاز داشتید، می‌تونید با ترمینال ازش استفاده کنید.
sudo mv set-battery /usr/local/bin
الان می‌تونید اینجوری ازش استفاده کنید.
sudo set-battery 65به‌جای ۶۵ می‌تونید هر عدد صحیح بین ۱ تا ۱۰۰ رو بزارید و لپتاپ تا همون اندازه شارژ میشه.
بدیهی هست که توی درصد‌های پایین (کمتر از ۱۰) ممکنه که درست کار نکنه چون معمولا توی اون شرایط باتری رفتار خطی نداره و اندازه گیری مقدارش توسط لپتاپ، خطای قابل توجهی داره و به‌خاطر همین ممکنه نتیجه دلخواه به‌دست نیاد.
میدونید که زکات علم نشر آن است

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5124
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #8 : 22 اردیبهشت 1400، 03:54 ب‌ظ »
این امکان محدود به برند میشه؟
لپ تاپ من acerئه و فایل charge_control_end_threshold توی دایرکتوری‌ای که گفتید رو ندارم
به نظر میاد مدار و چیپ شارژ باتری لپتاپ شما از این قابلیت پشتیبانی نمی‌کنه. توی لپتاپ من هم این فایل وجود نداره و از این قابلیت پشتیبانی نمی‌کنه.
میدونید که زکات علم نشر آن است

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5124
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #9 : 22 اردیبهشت 1400، 03:59 ب‌ظ »
با نوشتن متغیر محیطی میشه اینکارو کرد؟

مثل این:

[left]Command = 60 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold[/left]
و اینو با chmod 755 اجرایی کنم بعد به PATH اضافه کنم و هر جا خواستم بین 60 و 80 و 100 سوییچ کنم

این راه اصولیه یا خیر ممنونم میشم راهنمایی کنید
نمی‌دونم میشه یا نه ولی اون چیزی که توی چنتا ارسال بالاتر گفتم درست کار می‌کنه.
میدونید که زکات علم نشر آن است

آفلاین mrnubuntu

  • Newbie
  • *
  • ارسال: 23
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #10 : 22 اردیبهشت 1400، 04:23 ب‌ظ »
نقل‌قول
سلام بابت پاسخ ممنونم

اگر میشه روش ساختن alias رو توضیح بدین و اینکه اصلا چی هستش؟
در مورد اسکریپت هم ینی خودم میتونم با پایتون بنویسم؟ اگر بله لطفا راهنمایی کنید

ممنونم

alias یعنی اسم مستعار. یه مثالش la می‌تونه باشه. دستوری به اسم la وجود نداره. و وقتی شما می‌زنید la در اصل ls -a اجرا میشه. می‌تونید فایل bashrc. رو توی هوم خودتون رو ببینید. alias ها رو اینجوری تعریف می‌کنند:
alias alias-name='long command'
برای مورد شما میشه اینجوری توی فایل bashrc. تعریف کرد.
alias bat-to60='echo 60 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold'همینجوری برای ۸۰ و درصد‌های دیگه هم میشه اعمال کرد. البته بهتره alias های جدید رو توی فایل bash-aliases. توی هوم خودتون بزارید تا فایل bashrc. عوض نشه.

درباره اسکریپت هم میشه با پایتون نوشتش ولی با bash هم میشه.
من اینو با bash برای شما نوشتم. اول چک میکنه که ورودی بین ۱ تا ۱۰۰ باشه. اگه بود بقیه اجرا میشه، اگه نبود، دوباره از کاربر می‌خواهد که ورودی بده.

اگه اینو همینجوری یه جای دیگه استفاده کنید، احتمالا به مشکل می‌خورید، چون بررسی نمی‌کنه که آیا یاتری وجود داره یا اسم باتری چی هست یا اصلا باتری از این ویژگی پشتیبانی می‌کنه یا نه.
#!/bin/bash
while :
do
      read -p "Pleas enter percentage (an integer between 1 to 100): " INPUT
      if [ $i -gt 0 ] && [ $i -lt 101 ]; then

            echo "$INPUT" | tee /sys/class/power_supply/BAT1/charge_control_end_threshold

            if [ $? -eq 0]; then
                  echo "charge_control_end_threshold successfully set to $INPUT"
            else
                  echo "Somthing happend and charge_control_end_threshold could not set to $INPUT"
            fi

            break

      else
            echo "Invalid input."
done

اینو توی یه فایل به هر اسمی می‌خواهید بنویسید و ذخیره کنید و حالا دسترسی اجرایی بهش بدید. (فرض می‌کنیم اسمش رو set-battery گذاشتید)
chmod +x set-battery
الان می‌تونید بزاریدش توی مسیر /usr/local/bin/ اینجوری هر موقع نیاز داشتید، می‌تونید با ترمینال ازش استفاده کنید.
sudo mv set-battery /usr/local/bin
الان می‌تونید اینجوری ازش استفاده کنید.
sudo set-battery 65به‌جای ۶۵ می‌تونید هر عدد صحیح بین ۱ تا ۱۰۰ رو بزارید و لپتاپ تا همون اندازه شارژ میشه.
بدیهی هست که توی درصد‌های پایین (کمتر از ۱۰) ممکنه که درست کار نکنه چون معمولا توی اون شرایط باتری رفتار خطی نداره و اندازه گیری مقدارش توسط لپتاپ، خطای قابل توجهی داره و به‌خاطر همین ممکنه نتیجه دلخواه به‌دست نیاد.


بابت راهنمایی ممنونم خیلی کامل بود و مشکلم حل شد ✌



آفلاین mrnubuntu

  • Newbie
  • *
  • ارسال: 23
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #11 : 22 اردیبهشت 1400، 04:34 ب‌ظ »
برای دوستانی که BAT0 رو ندارن BAT1 رو نگاه کنن (البته اگر لپ تاپشون ساپورت میکنه )

برای دوستانی هم که لپ تاپشون Asus هستش تو کرنل 5.4 به بالا ماژولی هستش به نام asus_nb_wmi که اینکارو براشون انجام میده

بدک نیست به این https://pypi.org/project/asus-charge-control/ لینک نگاهی بندازین خیلی مفیده و در واقع دیگه نیازی به نوشتن اسکریپت جداگانه نیستش با نصب این پکیج راحت میتونین اینکارو انجام بدین

اینم لینک github

https://github.com/cforrester1988/asus-charge-control

کسانی هم که لپ تاپ Lenovo دارن خود tlp همچین قابلیتی بهشون میده تا باطری رو از مدار خارج کنن بصورت نرم افزاری ولی متاسفانه روی لپ های دیگه این قابلیت رو نمیتونین از طریق tlp انجام بدین تا جایی که من میدونم

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5124
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #12 : 22 اردیبهشت 1400، 05:46 ب‌ظ »
یه حل شد به عنوان موضوع اضافه کنید. بهتره که برنامه‌هایی که معرفی کردید، توی ویکی وارد بشه.
میدونید که زکات علم نشر آن است

آفلاین danadarvishzadeh

  • Newbie
  • *
  • ارسال: 7
  • جنسیت : پسر
پاسخ : نوشتن قاون udev برای حالت های مختلف شارژ لپ تاپ
« پاسخ #13 : 22 اردیبهشت 1400، 09:18 ب‌ظ »
این امکان محدود به برند میشه؟
لپ تاپ من acerئه و فایل charge_control_end_threshold توی دایرکتوری‌ای که گفتید رو ندارم
به نظر میاد مدار و چیپ شارژ باتری لپتاپ شما از این قابلیت پشتیبانی نمی‌کنه. توی لپتاپ من هم این فایل وجود نداره و از این قابلیت پشتیبانی نمی‌کنه.

خیلی خیلی ممنونم از توضیحتون