LIRCD(8) System Administration Utilities LIRCD(8)

lircd - دیمن کنترل از راه دور مادون قرمز لینوکس

lircd [گزینه‌ها] [فایل پیکربندی]

وظیفه اصلی lircd رمزگشایی سیگنال‌های مادون قرمز و ارائه رابطی یکپارچه برای برنامه‌های کلاینت است. کلاینت‌ها می‌توانند از طریق یک سوکت دامنه یونیکس (Unix domain socket)، که به صورت پیش‌فرض /var/run/lirc/lircd است، به lircd متصل شوند. با استفاده از این سوکت، آن‌ها کدهای مادون قرمز دریافت شده توسط lircd را دریافت خواهند کرد و می‌توانند دستوراتی به lircd ارسال کنند.

فایل پیکربندی
فایل پیکربندی، به صورت پیش‌فرض /etc/lirc/lircd.conf. یک مسیر نسبی از مبدا /etc/lirc تفسیر می‌شود. فایل پیکربندی پیش‌فرض شامل تمام فایل‌های موجود در /etc/lircd.conf.d است.
هر ریموت کنترلی که باید توسط lircd رمزگشایی شود، معمولاً نیازمند استفاده از یک فایل خاص است، برای مثال با کپی کردن آن در /etc/lirc/lirc.conf.d/. قالب آن در lircd.conf(5) توصیف شده است. فایل‌های پیکربندی را می‌توان با استفاده از irdb-get(1) یا lirc-setup(1) یافت. همچنین تولید فایل پیکربندی با استفاده از irrecord(1) امکان‌پذیر است.

گزینه‌های عمومی:

دستگاه نویسه‌ای (character device) که lircd باید از آن بخواند را انتخاب می‌کند. در حال حاضر پیش‌فرض در اکثر سیستم‌ها /dev/lirc0 است.
برخی راه‌اندازها، از جمله راه‌انداز پیش‌فرض devinput، از دستگاه auto پشتیبانی می‌کنند که نخستین دستگاه قابل استفاده یافته‌شده برای راه‌انداز فعلی را برمی‌گزیند.
هنگام استفاده از راه‌انداز devinput می‌توان از name=STRING یا phys=STRING برای انتخاب دستگاه استفاده کرد؛ lircd در /dev/input به دنبال دستگاهی با توضیحات منطبق خواهد گشت. این مورد زمانی مفید است که نام دستگاه ثابت نباشد. STRING می‌تواند شامل نویسه‌های عمومی '*' و '?' و همچنین '\' برای مشخص کردن آن‌ها به صورت تحت‌اللفظی باشد. از mode2 --driver devinput --list-devices برای فهرست کردن دستگاه‌های واقعی استفاده کنید.
راه‌انداز مورد استفاده. استفاده از --driver help تمام راه‌اندازهای موجود را فهرست می‌کند، بخش بارگذاری راه‌انداز در زیر را ببینید.
نمایش پیام کوتاه راهنما.

سایر گزینه‌ها:

دستور SIMULATE را فعال می‌کند که می‌توان آن را با استفاده از irsend(1) یا API کلاینت صادر کرد. این گزینه امکان شبیه‌سازی رویدادهای IR دلخواه را از خط فرمان فراهم می‌کند. با احتیاط از این گزینه استفاده کنید چرا که به تمامی کاربرانی که به سوکت lircd دسترسی دارند کنترل گسترده‌ای بر سیستم می‌دهد. برای مثال، اگر سیستم خود را طوری پیکربندی کرده باشید که با فشردن یک دکمه روی ریموت کنترل خاموش شود، هر کسی قادر خواهد بود سیستم شما را از خط فرمان خاموش کند.
به سایر سرورهای lircd که یک سوکت شبکه در میزبان و شماره پورت مشخص‌شده ارائه می‌دهند متصل می‌شود (گزینه --listen را ببینید). تعداد چنین اتصال‌هایی در حال حاضر به ۱۰۰ محدود است. نمونه lircd متصل‌شونده، رویدادهای IR را از نمونه lircd که به آن وصل شده است دریافت خواهد کرد. برای اتصال به چندین سرور، آن‌ها را به صورت یک فهرست جداشده با کاما اضافه کنید.
در صورت اجرا به عنوان کاربر root، برنامه lircd پس از باز کردن فایل‌ها و موارد دیگر، مجوزهای خود را کاهش داده و به عنوان کاربر <uid> اجرا می‌شود.
به طور معمول lircd زمانی که نخستین کلاینت متصل می‌شود راه‌انداز را مقداردهی اولیه می‌کند. اگر این گزینه انتخاب شود، راه‌انداز در عوض بلافاصله در زمان شروع مقداردهی اولیه می‌شود.
تنظیم یک یا چند گزینه برای راه‌انداز. آرگومان یک فهرست از جفت‌های key:value است که با '|' جدا شده‌اند. کلید نمی‌تواند شامل فاصله باشد، اما در بخش مقدار مجاز است. نویسه‌های خاصی از جمله '#' و ';' به عنوان نشانگرهای توضیح در فایل پیکربندی استفاده می‌شوند و در هیچ کجایی مجاز نیستند.
امکان استفاده از کدهایی را فراهم می‌کند که برای یک ریموت رمزگشایی شده‌اند اما در lircd.conf تعریف نشده‌اند. کدهای جدید به صورت پویا با یک نام پیش‌فرض ایجاد می‌شوند. این قابلیت آزمایشی بوده و دستخوش انواع تغییرات است. هنوز به طور کامل آزمایش نشده است.
به lircd امکان می‌دهد تا برای اتصال‌های شبکه روی نشانی/پورت داده‌شده گوش فرا دهد. نشانی پیش‌فرض 0.0.0.0 است، به این معنی که اتصال‌ها روی تمامی رابط‌های شبکه پذیرفته خواهند شد. نشانی باید به شکل عددی نقطه‌دار داده شود. پورت به صورت پیش‌فرض 8765 است. نمونه گوش‌دهنده lircd تمامی رویدادهای IR را بدون هیچ بررسی امنیتی به نمونه‌های متصل‌شونده lircd ارسال خواهد کرد.
روی بسترهای غیر glibc آرگومان address:port الزامی است، اما می‌توان آن را به صورت یک رشته خالی داد، مانند --listen= که در این صورت پیش‌فرض آن 0.0.0.0:8765 خواهد بود.
فایل گزارش دیمن lircd را انتخاب می‌کند. logfile یا رشته 'syslog' است که نشان می‌دهد باید از syslog(1) استفاده شود، یا یک مسیر فایل گزارش است. پیش‌فرض استفاده از syslog است.
میزان اطلاعات گزارش‌گیری را تعیین می‌کند. level می‌تواند یک سطح نمادین syslog باشد: 'error'، 'warning'، 'info'، 'notice' یا 'debug'. برنامه lircd همچنین سه سطح اضافی 'trace'، 'trace1' و 'trace2' را تعریف می‌کند که پیام‌های بیشتری تولید می‌کنند ('trace2' بیشترین پیام را می‌آورد). با این حال، در گزارش این پیام‌ها با عنوان 'debug' علامت‌گذاری می‌شوند.
روی بسترهای غیر glibc آرگومان level الزامی است، اما می‌تواند به صورت یک رشته خالی داده شود، مانند --loglevel= که در این صورت پیش‌فرض آن debug خواهد بود.
سطح می‌تواند یک عدد صحیح در محدوده ۳ (تقریباً بدون پیام) تا ۱۰ نیز باشد.
فایلی شامل مقادیر پیش‌فرض برای تمامی گزینه‌ها. مسیر نسبی از دایرکتوری جاری تفسیر می‌شود. بخش [فایل‌ها] در زیر را ببینید.
سوکت دامنه یونیکس را انتخاب می‌کند که lircd کدهای کلید ریموت را در آن می‌نویسد. پیش‌فرض در حال حاضر /var/run/lirc/lircd است.
مجوز فایلی سوکت خروجی را در صورت نیاز به ایجاد، در مبنای هشت تعیین می‌کند. chmod(1) را ببینید. اگر هنگام ایجاد اولیه سوکت هیچ گزینه --permission داده نشود، پیش‌فرض دادن دسترسی خواندن و نوشتن به همه کاربران است (0666 در مبنای هشت). اگر سوکت از قبل وجود داشته باشد این گزینه هیچ تاثیری ندارد.
فایل pid دیمن lircd را انتخاب می‌کند، پیش‌فرض /var/run/lirc/lircd.pid است.
دایرکتوری که lircd راه‌اندازهای فضای کاربری خود را از آن بارگذاری می‌کند تنظیم می‌نماید. این فایل‌ها به صورت *.so هستند و پیش‌فرض آن‌ها طبق توضیحات بخش بارگذاری راه‌انداز یافت می‌شود. آرگومان یک مسیر جستجوی جداشده با ':' است.
حد بالایی برای تعداد تکرارها هنگام ارسال سیگنال تعیین می‌کند. مقدار پیش‌فرض فعلی ۶۰۰ است. یک درخواست SEND_START سیگنال را به همین تعداد بار تکرار خواهد کرد. همچنین اگر تعداد تکرارها در یک درخواست SEND_ONCE از این عدد بیشتر شود، با این عدد جایگزین خواهد شد.

هنگام رمزگشایی فشردن دکمه یا دریافت سیگنال SIGHUP، دیمن lircd پیام‌هایی را برای تمامی کلاینت‌های متصل مخابره می‌کند.

برای هر فشردن دکمه رمزگشایی‌شده، یک بسته روی سوکت مهیا می‌شود. این داده‌های قابل چاپ با قالب زیر است:

<code> <repeat count> <button name> <remote control name>

برای مثال:

0000000000f40bf0 00 KEY_UP ANIMAX

فیلدها عبارتند از:

یک کد عددی ۱۶ رقمی هگزادسیمال که سیگنال IR را رمزگذاری می‌کند. استفاده از آن در برنامه‌ها منسوخ شده است و باید نادیده گرفته شود.
نشان می‌دهد کاربر چه مدت دکمه را نگه داشته است. شمارنده از 0 شروع می‌شود و هر بار که یک سیگنال IR جدید دریافت شود، یک واحد افزایش می‌یابد.
نام یک کلید است که در فایل lircd.conf تعریف شده است.
مشخصه اجباری name در فایل پیکربندی lircd.conf است.

این بسته‌ها برای تمامی کلاینت‌ها همگانی ارسال می‌شوند. تنها حالت دیگر که lircd به همه کلاینت‌ها پیام می‌فرستد زمانی است که سیگنال SIGHUP را دریافت کرده و فایل پیکربندی خود را با موفقیت مجدداً خوانده باشد. سپس بسته SIGHUP را برای کلاینت‌های خود ارسال می‌کند تا نشان دهد پیکربندی ممکن است تغییر کرده باشد. بسته sighup شامل سه خط است:

BEGIN
SIGHUP
END

برنامه‌ها همچنین می‌توانند از طریق رابط سوکت، دستوراتی به lircd ارسال کنند. رایج‌ترین کار ارسال داده است، اما دستورات دیگری نیز وجود دارد. هر دستور یک خط قابل چاپ تکی است که با یک خط جدید پایان می‌یابد. به ازای هر دستور، lircd با یک بسته پاسخ جواب می‌دهد.

دستورات پشتیبانی‌شده:

به lircd می‌گوید سیگنال IR مرتبط با remote control و button name داده‌شده را ارسال کند، و سپس آن را به تعداد repeats مرتبه تکرار نماید. repeats یک عدد ده‌دهی بین 0 و repeat_max است. مورد اخیر را می‌توان با آرگومان خط فرمان --repeat-max به lircd داد و پیش‌فرض آن ۶۰۰ است. اگر repeats مشخص نشده باشد یا کمتر از حداقل تعداد تکرار برای ریموت کنترل انتخاب‌شده باشد، مقدار کمینه استفاده خواهد شد.
به lircd دستور می‌دهد تکرار دکمه داده‌شده را آغاز کند تا زمانی که دستور SEND_STOP را دریافت نماید. با این حال، تعداد تکرارها به repeat_max محدود است. دیمن lircd در حین تکرار هیچ دستور ارسال جدیدی را نخواهد پذیرفت.
به lircd دستور می‌دهد یک فرمان SEND_START را لغو کند.
بدون آرگومان، lircd با فهرستی از تمامی ریموت کنترل‌های تعریف‌شده پاسخ می‌دهد. با دادن آرگومان ریموت کنترل، lircd با فهرستی از تمامی کلیدهای تعریف‌شده در ریموت مشخص پاسخ می‌دهد.
با دادن یک مسیر، lircd شروع به ثبت تمام داده‌های دریافتی در آن فایل می‌کند. لاگ شامل خطوط قابل چاپ تعریف‌شده در mode2(1) است که مدت زمان‌های پالس/فاصله را شرح می‌دهد. بدون مسیر، فایل گزارش فعلی بسته شده و گزارش‌گیری متوقف می‌شود.
باعث می‌شود lircd تابع drvctl_func(DRVCTL_SET_OPTION, option) را فراخوانی کند به طوری که option از key و value تجزیه‌شده تشکیل شده است. بسته برگشتی نشان‌دهنده نتیجه فراخوانی drvctl_func است.
با دریافت key data، به lircd دستور می‌دهد آن را به تمامی کلاینت‌ها ارسال کند، یعنی شبیه‌سازی کند که این کلید رمزگشایی شده است. key data باید دقیقاً مطابق با بسته توصیف‌شده در [قالب پیام‌های همگانی سوکت] قالب‌بندی شود؛ به ویژه تعداد ارقام در code و repeat count به صورت سخت‌کدشده است. این دستور تنها زمانی پذیرفته می‌شود که گزینه خط فرمان --allow-simulate فعال باشد.
باعث می‌شود lircd تابع drvctl_func(LIRC_SET_TRANSMITTER_MASK, &channels) را فراخوانی کند، که در آن channels مقدار رمزگشایی‌شده transmitter mask است. برای اطلاعات بیشتر lirc(4) را ببینید.
به lircd می‌گوید یک بسته پاسخ نسخه را ارسال کند.

پروتکل تضمین می‌کند که پیام‌های همگانی با بسته‌های پاسخ تداخل پیدا نخواهند کرد. اما پیام‌های همگانی ممکن است در هر نقطه‌ای بین بسته‌ها ظاهر شوند. تنها استثنا بسته‌های SIGHUP هستند. این بسته‌ها ممکن است درست پس از ارسال یک دستور به lircd ظاهر شوند، بنابراین باید اطمینان حاصل کنید که آن‌ها را با پاسخ‌ها اشتباه نگیرید.

قالب بسته پاسخ به صورت زیر است:

BEGIN
<command>
[SUCCESS|ERROR]
[DATA
n
n lines of data]
END

اگر دستور با موفقیت انجام شده باشد، داده‌ها فقط برای دستوراتی ارسال می‌شوند که اطلاعاتی را بازمی‌گردانند. توجه داشته باشید که بسته‌ای حاوی ۰ خط داده می‌تواند یک پاسخ معتبر باشد.

به طور سنتی lircd به عنوان root اجرا می‌شده است زیرا دسترسی به دستگاه‌های هسته مانند /dev/lirc0 به طور پیش‌فرض نیازمند مجوزهای root است. با این حال، اجرای یک سرویس طولانی‌مدت به این شیوه یک مشکل امنیتی عمده است.

توزیع lirc شامل قوانین udev نمونه است که /dev/lirc[0-9] و دستگاه‌های USB و سریال را برای کاربر lirc قابل دسترسی می‌سازد. با استفاده از این قوانین، می‌توان lircd را به عنوان یک کاربر و گروه عادی مانند lirc اجرا کرد.

/etc/lirc/lircd.conf
فایل پیکربندی اصلی، lircd.conf(5) را ببینید.
/etc/lirc/lirc_options.conf
فایل گزینه‌ها. دیمن lircd مقادیر زیر بخش [lircd] در این فایل را مدیریت می‌کند. مکان آن را می‌توان با استفاده از گزینه خط فرمان -O/--options-file یا متغیر محیطی LIRC_OPTIONS_PATH تغییر داد. مقادیر موجود در اینجا به عنوان پیش‌فرض برای هر گزینه‌ای که در خط فرمان ذکر نشده باشد استفاده می‌شوند.

مسیر فایل گزینه‌ها، بخش فایل‌ها را ببینید.
مسیر بارگذاری افزونه، بخش بارگذاری راه‌انداز را ببینید.
در صورت تنظیم، اشکال‌زدایی را در مراحل اولیه که گزینه --debug هنوز تجزیه نشده است فعال می‌کند.

راه‌اندازها به صورت پویا بارگذاری می‌شوند. این کار از یک مسیر سنتی جداشده با ':' در سیستم‌های یونیکس انجام می‌شود که در آن هر جزء در مسیر جستجو می‌شود (بخش ابتدایی اول، بخش انتهایی آخر).

مسیر مورد استفاده برای این کار بر اساس اولویت نزولی زیر تعیین می‌شود:

  • گزینه --plugindir.
  • مدخل 'plugindir' در بخش [lircd] از فایل lirc_options.conf.
  • متغیر محیطی LIRC_PLUGINDIR.
  • مقدار پیش‌فرض سخت‌کدشده (/usr/lib/lirc/plugins).

با دریافت SIGHUP، دیمن lircd فایل پیکربندی lircd.conf را مجدداً می‌خواند (اما نه lirc_options.conf) و اگر فایل تغییر کرده باشد خود را تطبیق می‌دهد.
با دریافت SIGUSR1، دیمن lircd خروجی تمیز انجام می‌دهد.

lircd یک دیمن است. باید در یک اسکریپت راه‌اندازی وابسته به سیستم شروع شود. به طور پیش‌فرض، lirc با فایل‌های systemd عرضه می‌شود که کاربر را قادر می‌سازد تا سرویس lircd را کنترل کند.

irdb-get(1)
lirc-setup(1)
lircd.conf(5)
irrecord(1)
lirc(4)
lircd-uinput(8)

Last change: Jun 2017 lircd 0.10.2