acpid(8) System Manager's Manual acpid(8)

acpid - دیمن پیشرفته رویدادهای مدیریت توان و پیکربندی (ACPI)

acpid [گزینه‌ها]

acpid برای باخبر ساختن برنامه‌های فضای کاربری از رویدادهای ACPI طراحی شده است. به‌طور پیش‌فرض، acpid باید در هنگام راه‌اندازی سیستم آغاز به کار کند و به عنوان یک فرآیند پس‌زمینه اجرا خواهد شد. این دیمن یک فایل رویدادها (به‌طور پیش‌فرض /proc/acpi/event) را باز کرده و تلاش می‌کند خطوط کاملی را که نمایانگر رویدادهای ACPI هستند بخواند. اگر فایل رویدادها وجود نداشته باشد، acpid تلاش خواهد کرد از طریق لایه ورودی و netlink به هسته لینوکس متصل شود. هنگامی که یک رویداد ACPI از یکی از این منابع دریافت می‌شود، acpid فهرستی از قوانین را بررسی کرده و قوانینی را که با آن رویداد مطابقت دارند اجرا می‌کند. اگر یک فایل قفل (به‌طور پیش‌فرض /var/lock/acpid) وجود داشته باشد، acpid تمام رویدادهای دریافتی ACPI را نادیده خواهد گرفت.

قوانین با فایل‌های پیکربندی ساده تعریف می‌شوند. acpid در یک دایرکتوری پیکربندی (به‌طور پیش‌فرض /etc/acpi/events) جستجو کرده و تمامی فایل‌های معمولی را که نام آن‌ها صرفاً از حروف بزرگ و کوچک انگلیسی، ارقام، زیرخط و خط تیره تشکیل شده است (مشابه run-parts(8)) و با یک نقطه ('.') شروع نشده یا با مدک (~) پایان نمی‌یابند، تجزیه می‌کند. هر فایل باید دو چیز را تعریف کند: یک رویداد (event) و یک اقدام (action). هر خط خالی، یا خطوطی که نخستین نویسه آن‌ها علامت هش ('#') باشد، نادیده گرفته می‌شوند. خطوط نامربوط به عنوان هشدار علامت‌گذاری می‌شوند، اما مهلک نیستند. هر خط دارای سه بخش است: کلید، یک علامت مساوی، و مقدار. کلید می‌تواند تا ۶۳ نویسه باشد و به حروف بزرگ و کوچک حساس نیست (اما فاصله‌ها مهم هستند). مقدار می‌تواند تا ۵۱۱ نویسه باشد و به حروف بزرگ و کوچک و فاصله‌ها حساس است.

مقدار رویداد یک عبارت منظم است (نگاه کنید به regcomp(3)) که رویدادها با آن مطابقت داده می‌شوند.

مقدار اقدام یک خط فرمان است که هر زمان رویدادی منطبق با قانون مربوطه رخ دهد، از طریق /bin/sh فراخوانی خواهد شد. خط فرمان ممکن است شامل نویسه‌های ویژه پوسته باشد و آن‌ها حفظ خواهند شد. تنها نویسه‌های ویژه در مقدار اقدام، موارد اسکیپ‌شده با "%" هستند. رشته "%e" با متن دقیق رویدادی که اقدام برای آن فراخوانی شده جایگزین خواهد شد. این رشته ممکن است حاوی فاصله باشد، بنابراین خط فرمان در صورتی که یک توکن واحد می‌خواهد باید "%e" را در نقل‌قول قرار دهد. رشته "%%" با یک علامت واقعی "%" جایگزین خواهد شد. تمام حالت‌های اسکیپ دیگر "%" رزرو شده هستند و باعث بارگذاری نشدن قانون خواهند شد.

این قابلیت امکان تعریف چندین قانون برای یک رویداد یکسان (گرچه هیچ ترتیبی تضمین نمی‌شود) و همچنین تعریف یک قانون برای چندین رویداد را فراهم می‌سازد. برای وادار کردن acpid به بارگذاری مجدد پیکربندی قوانین، سیگنال SIGHUP را به آن ارسال کنید.

شبه‌اقدام <drop> باعث می‌شود رویداد به طور کامل نادیده گرفته شده و هیچ پردازش دیگری روی آن صورت نگیرد؛ کلاینت‌هایی که از طریق سوکت دامنه یونیکس (پایین‌تر را ببینید) متصل شده‌اند از این رویداد باخبر نخواهند شد. این قابلیت ممکن است در برخی دستگاه‌ها، مانند بعضی لپ‌تاپ‌ها که در فواصل زمانی مکرر رویدادهای کاذب باتری تولید می‌کنند، مفید باشد. نام این شبه‌اقدام می‌تواند با یک گزینه خط فرمان بازتعریف شود.

علاوه بر فایل‌های قوانین، acpid اتصالات روی یک سوکت دامنه یونیکس (به‌طور پیش‌فرض /var/run/acpid.socket) را نیز می‌پذیرد. هر برنامه‌ای می‌تواند به این سوکت متصل شود. پس از برقراری اتصال، acpid متن تمامی رویدادهای ACPI را به کلاینت ارسال خواهد کرد. کلاینت مسئولیت فیلتر کردن پیام‌های مورد نظر خود را بر عهده دارد. acpid سوکت کلاینت را نمی‌بندد، مگر در صورت دریافت SIGHUP یا خروج acpid.

برای راه‌اندازی سریع‌تر، این سوکت می‌تواند از طریق stdin منتقل شود تا نیازی به ایجاد سوکت توسط acpid نباشد. علاوه بر این، اگر سوکتی به عنوان stdin منتقل شود، acpid به دیمن تبدیل نخواهد شد و در پیش‌زمینه اجرا می‌شود. این رفتار برای پشتیبانی از systemd(1) ارائه شده است.

acpid تمامی فعالیت‌های خود و همچنین خروجی استاندارد (stdout) و خطای استاندارد (stderr) هر اقدام را در syslog ثبت خواهد کرد.

تمامی فایل‌ها و دایرکتوری‌های پیش‌فرض را می‌توان با گزینه‌های خط فرمان تغییر داد.

این گزینه دایرکتوری‌ای را که acpid در آن به دنبال فایل‌های پیکربندی قوانین می‌گردد تغییر می‌دهد. مقدار پیش‌فرض /etc/acpi/events است.
این گزینه حداکثر تعداد اتصالات سوکت غیر ریشه را که می‌توانند به سوکت acpid برقرار شوند تغییر می‌دهد. مقدار پیش‌فرض 256 است.
این گزینه سطح اشکال‌زدایی acpid را یک واحد افزایش می‌دهد.
این گزینه فایل رویدادی را که acpid رویدادها را از آن می‌خواند تغییر می‌دهد. مقدار پیش‌فرض /proc/acpi/event است.
این گزینه acpid را وادار می‌کند تا برای رویدادهای ACPI از لایه ورودی هسته لینوکس و رابط netlink استفاده کند.
این گزینه با جلوگیری از انشعاب (forking) در هنگام راه‌اندازی، acpid را در پیش‌زمینه نگه می‌دارد و موجب می‌شود پیام‌های گزارش به جای syslog در stderr ثبت شوند.
این گزینه به acpid می‌گوید که اطلاعات مربوط به تمامی رویدادها و اقدامات را ثبت کند.
این گزینه فایل قفل مورد استفاده برای متوقف کردن پردازش رویدادها را تغییر می‌دهد. مقدار پیش‌فرض /var/lock/acpid است.
این گزینه مالکیت گروهی سوکت دامنه یونیکس را که acpid رویدادها را روی آن منتشر می‌کند تغییر می‌دهد.
این گزینه دسترسی‌های سوکت دامنه یونیکس را که acpid رویدادها را روی آن منتشر می‌کند تغییر می‌دهد. مقدار پیش‌فرض 0666 است.
این گزینه نام سوکت دامنه یونیکس را که acpid باز می‌کند تغییر می‌دهد. مقدار پیش‌فرض /var/run/acpid.socket است.
این گزینه به acpid دستور می‌دهد که هیچ سوکت دامنه یونیکسی باز نکند. این گزینه بر گزینه -s مقدم است و سایر گزینه‌های مربوط به سوکت را باطل می‌کند.
این گزینه به acpid می‌گوید که از فایل مشخص‌شده به عنوان فایل pid خود استفاده کند. اگر فایل وجود داشته باشد، حذف شده و بازنویسی می‌شود. مقدار پیش‌فرض /var/run/acpid.pid است.
این گزینه شبه‌اقدامی را تعریف می‌کند که به acpid می‌گوید تمام پردازش‌های مربوط به یک رویداد، شامل باخبر ساختن کلاینت‌ها، لغو شود. مقدار پیش‌فرض <drop> است.
این گزینه پردازش ویژه دکمه بی‌صدا (mute) را برای مدل‌های خاصی از ThinkPad فعال می‌کند؛ مدل‌هایی که نشانگر LED بی‌صدای آن‌ها در صورت نگه داشتن دکمه از هماهنگی با وضعیت بی‌صدا خارج می‌شود. با این گزینه، دکمه بی‌صدا رویدادهای زیر را هماهنگ با تعداد دفعات فشردن (و متعاقباً، وضعیت نشانگر LED) تولید خواهد کرد:

button/mute MUTE (key pressed) K
button/mute MUTE (key released) K
اطلاعات نسخه را نمایش داده و خارج می‌شود.
راهنما را نمایش داده و خارج می‌شود.

این مثال در صورت فشردن دکمه روشن/خاموش (power)، سیستم شما را خاموش می‌کند.

یک فایل به نام /etc/acpi/events/power ایجاد کنید که حاوی موارد زیر باشد:


event=button/power
action=/etc/acpi/power.sh "%e"

سپس فایلی به نام /etc/acpi/power.sh ایجاد کنید که شامل موارد زیر باشد:

/sbin/shutdown -h now "Power button pressed"

حال، زمانی که acpid در حال اجرا باشد، فشردن دکمه روشن/خاموش باعث می‌شود قانون موجود در /etc/acpi/events/power اسکریپت /etc/acpi/power.sh را فعال کند. سپس این اسکریپت سیستم را خاموش خواهد کرد.

acpid برنامه ساده‌ای است که اسکریپت‌ها را در پاسخ به رویدادهای ACPI از هسته اجرا می‌کند. هنگامی که مشکلی پیش می‌آید، اشکال به ندرت از خود acpid است. در ادامه پیشنهادهایی برای یافتن رایج‌ترین منشأهای مشکلات مرتبط با ACPI ارائه شده است.

هنگام عیب‌یابی acpid، مهم است بدانید که بخش‌های دیگر سیستم نیز ممکن است در حال رسیدگی به رویدادهای ACPI باشند. systemd(1) قادر به مدیریت کلید روشن/خاموش و رویدادهای گوناگون دیگری است که معمولاً توسط acpid مدیریت می‌شوند. برای اطلاعات بیشتر به شرح HandlePowerKey در logind.conf(5) مراجعه کنید. همچنین برخی مدیر پنجره‌ها مدیریت معمول دکمه روشن/خاموش و سایر رویدادها را از acpid می‌گیرند.

از kacpimon(8) می‌توان برای تایید دریافت رویدادهای مورد انتظار ACPI استفاده کرد. برای شیوه کار مناسب به صفحه راهنمای kacpimon(8) مراجعه کنید. اگر رویدادها دریافت نمی‌شوند، احتمالاً با مشکل درایور هسته مواجه هستید.

اگر رویدادهای مورد انتظار دریافت می‌شوند، باید بررسی کنید که آیا مدیر پنجره شما مسئول رسیدگی به این رویدادها است یا خیر. برخی چنین هستند و برخی خیر (برای نمونه در اوبونتو 14.04 (Unity/GNOME)، تنظیماتی برای درب لپ‌تاپ در بخش تنظیمات سیستم > توان > فیلدهای «هنگام بسته شدن درب لپ‌تاپ» وجود دارد). اگر مدیر پنجره شما مسئول رسیدگی به رویداد مشکل‌دار است و آن را به درستی پیکربندی کرده‌اید، احتمالاً مشکل از مدیر پنجره است.

در نهایت، نگاهی به /etc/acpi/events (بالا را ببینید) بیندازید. آیا یک فایل پیکربندی برای رویداد مربوطه در آنجا وجود دارد (مثلاً /etc/acpi/events/lidbtn برای رویدادهای باز/بسته شدن درب لپ‌تاپ)؟ آیا به درستی به یک اسکریپت (مثلاً /etc/acpi/lid.sh) متصل است؟ آیا آن اسکریپت به درستی کار می‌کند؟ برای یک اسکریپت acpid غیرعادی نیست که فعال بودن یک مدیر پنجره را بررسی کند و در صورت وجود، کاری انجام ندهد. این بدان معناست که مدیریت این رویداد بر عهده مدیر پنجره گذاشته شده است.

acpid باید روی هر هسته لینوکسی که از سال ۲۰۰۳ به بعد منتشر شده کار کند.

/proc/acpi/event
/dev/input/event*
/etc/acpi/
/var/run/acpid.socket
/var/run/acpid.pid
/var/lock/acpid

هیچ اشکال شناخته‌شده‌ای وجود ندارد. برای ارسال گزارش‌های اشکال، به وب‌سایت پروژه (PROJECT WEBSITE) در زیر مراجعه کنید.

regcomp(3), sh(1), socket(2), connect(2), init(1), systemd(1), acpi_listen(8), kacpimon(8)

http://sourceforge.net/projects/acpid2

Ted Felix <ted@tedfelix.com>
Tim Hockin <thockin@hockin.org>
Andrew Henroid