DBUS-LAUNCH(1) دستورهای کاربر DBUS-LAUNCH(1)

dbus-launch - ابزار راه‌اندازی یک گذرگاه پیام از اسکریپت شل

dbus-launch [--version] [--help] [--sh-syntax] [--csh-syntax] [--auto-syntax] [--binary-syntax] [--close-stderr] [--exit-with-session] [--exit-with-x11] [--autolaunch=MACHINEID] [--config-file=FILENAME] [PROGRAM] [ARGS...]

دستور dbus-launch برای راه‌اندازی یک نمونه از گذرگاه نشست dbus-daemon از طریق یک اسکریپت شل استفاده می‌شود. این دستور معمولاً از اسکریپت‌های ورود کاربر فراخوانی می‌گردد. بر خلاف خود دیمن، dbus-launch پس از اجرا خارج می‌شود، بنابراین می‌توان از علامت‌های نقل‌قول وارونه (backticks) یا ساختار $() برای خواندن اطلاعات خروجی از dbus-launch استفاده کرد.

بدون هیچ آرگومانی، dbus-launch یک نمونه از گذرگاه نشست را راه‌اندازی کرده و نشانی و شناسه فرایند (PID) آن نمونه را در خروجی استاندارد چاپ می‌کند.

می‌توانید برنامه‌ای را برای اجرا مشخص کنید؛ در این حالت، dbus-launch یک نمونه گذرگاه نشست را راه‌اندازی می‌کند، متغیرهای محیطی مناسب را به گونه‌ای تنظیم می‌کند که برنامه مشخص‌شده بتواند گذرگاه را پیدا کند، و سپس برنامه مشخص‌شده را با آرگومان‌های تعیین‌شده اجرا می‌نماید. برای نمونه‌ها به بخش زیر مراجعه کنید.

اگر برنامه‌ای را اجرا کنید، dbus-launch اطلاعات مربوط به گذرگاه جدید را در خروجی استاندارد چاپ نخواهد کرد.

هنگامی که dbus-launch اطلاعات گذرگاه را در خروجی استاندارد چاپ می‌کند، به طور پیش‌فرض در قالب جفت‌های کلید-مقدار ساده است. با این حال، می‌توانید با استفاده از گزینه‌های --sh-syntax، --csh-syntax، --binary-syntax یا --auto-syntax شیوه‌های نگارش متناوبی را درخواست کنید. تعدادی از این گزینه‌ها باعث می‌شوند dbus-launch کدهای شل را برای برپایی متغیرهای محیطی تولید کند.

با گزینه --auto-syntax، دستور dbus-launch به مقدار متغیر محیطی SHELL نگاه می‌کند تا مشخص کند کدام نحو شل باید استفاده شود. اگر SHELL به "csh" ختم شود، کد سازگار با csh تولید می‌شود؛ در غیر این صورت، کد سازگار با شل بورن (Bourne shell) منتشر می‌گردد. به جای ارسال --auto-syntax، می‌توانید با استفاده از --sh-syntax برای نحو Bourne، یا --csh-syntax برای نحو csh، به صراحت یک نحو خاص را تعیین کنید. در اسکریپت‌ها، پایدارتر است که از --auto-syntax اجتناب کنید، چرا که قاعدتاً مشخص است اسکریپت شما با چه شلی نوشته شده است.

برای اطلاعات بیشتر درباره D-Bus به نشانی https://www.freedesktop.org/wiki/Software/dbus مراجعه کنید. همچنین صفحه راهنمای dbus-daemon را ببینید.

توزیع‌هایی که dbus-launch را به عنوان بخشی از یک نشست استاندارد X اجرا می‌کنند، باید پس از راه‌اندازی کارساز X و در دسترس قرار گرفتن آن، دستور dbus-launch --exit-with-session را به عنوان یک پوشش (wrapper) پیرامون کلاینت اصلی X (معمولاً یک مدیر نشست یا مدیر پنجره) اجرا کنند، مانند این مثال‌ها:

dbus-launch --exit-with-session gnome-session

dbus-launch --exit-with-session openbox

dbus-launch --exit-with-session ~/.xsession

اگر توزیع شما این کار را انجام نمی‌دهد، می‌توانید با اجرای مدیر نشست یا مدیر پنجره خود به همان روش در اسکریپتی که توسط نشست X شما اجرا می‌شود، مانند ~/.xsession، ~/.xinitrc یا ~/.Xclients، به نتایج مشابهی دست یابید.

برای راه‌اندازی یک نشست D-Bus درون یک نشست حالت متنی، از dbus-launch استفاده نکنید. به جای آن، dbus-run-session(1) را ببینید.

## بررسی وجود دیمن گذرگاه برای اطمینان
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
    ## در صورت پیدا نشدن، یک نمونه جدید راه‌اندازی شود
    eval `dbus-launch --sh-syntax`
    echo "D-Bus per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
fi

توجه داشته باشید که در این حالت، dbus-launch خارج می‌شود و dbus-daemon به هنگام خروج از سیستم (logout) به طور خودکار متوقف نخواهد شد.

اگر متغیر DBUS_SESSION_BUS_ADDRESS برای فرایندی که تلاش می‌کند از D-Bus استفاده کند تنظیم نشده باشد، فرایند به طور پیش‌فرض تلاش خواهد کرد dbus-launch را با گزینه --autolaunch فراخوانی کند تا یک گذرگاه نشست جدید راه‌اندازی کند یا نشانی گذرگاه موجود را روی نمایشگر X یا در فایلی در ~/.dbus/session-bus/ پیدا نماید.

هر زمان که راه‌اندازی خودکار رخ دهد، برنامه‌ای که ناچار به راه‌اندازی یک گذرگاه جدید شده است در دنیای کوچک و مجزای خود قرار می‌گیرد؛ در صورتی که این برنامه بخواهد از خدمات متعددی در گذرگاه استفاده کند، این وضعیت می‌تواند عملاً به راه‌اندازی یک نشست کاملاً جدید منجر شود. بسته به برنامه و کاری که قصد انجام آن را دارد، این حالت می‌تواند نامطلوب یا حتی کاملاً معیوب باشد.

دو دلیل متداول برای راه‌اندازی خودکار وجود دارد. یکی اتصال ssh به یک ماشین راه دور است. راهکار ایده‌آل برای این حالت، بازفرستی DBUS_SESSION_BUS_ADDRESS به همان روشی است که DISPLAY هدایت می‌شود. در این فاصله، اگر مایل باشید می‌توانید فایل پیکربندی session.conf را ویرایش کنید تا گذرگاه نشست شما روی TCP گوش دهد، و متغیر DBUS_SESSION_BUS_ADDRESS را به صورت دستی تنظیم نمایید.

دومین دلیل رایج برای راه‌اندازی خودکار، دستور su به کاربری دیگر و نمایش برنامه‌های X در حال اجرا با هویت کاربر دوم روی نمایشگر متعلق به کاربر اول است. شاید راه‌حل ایده‌آل در این حالت اجازه دادن به کاربر دوم برای اتصال به گذرگاه نشست کاربر اول باشد، همان‌طور که می‌توانند به نمایشگر کاربر اول متصل شوند. با این وجود، سازوکاری برای این کار توسعه داده نشده است.

شما همیشه می‌توانید با تنظیم دستی DBUS_SESSION_BUS_ADDRESS از راه‌اندازی خودکار جلوگیری کنید. راه‌اندازی خودکار به این دلیل اتفاق می‌افتد که نشانی پیش‌فرض در صورت تنظیم نشدن هیچ مقداری، "autolaunch:" است؛ بنابراین اگر هر نشانی دیگری تنظیم شده باشد، هیچ راه‌اندازی خودکاری رخ نخواهد داد. با این حال می‌توانید راه‌اندازی خودکار را در یک نشانی گذرگاه نشست صریح به عنوان گزینه یدکی (fallback) بگنجانید، برای نمونه DBUS_SESSION_BUS_ADDRESS="something:,autolaunch:" - در این حالت اگر نشانی اول کار نکند، فرایندها به طور خودکار راه‌اندازی می‌شوند. (متغیر نشانی گذرگاه حاوی فهرستی از نشانی‌ها برای آزمایش است که با کاما از هم جدا شده‌اند.)

گزینه --autolaunch یک جزئیات پیاده‌سازی داخلی از libdbus در نظر گرفته می‌شود و در واقع برنامه‌هایی برای تغییر آن وجود دارد. در هر صورت دلیل موجهی برای استفاده از آن در خارج از پیاده‌سازی libdbus وجود ندارد.

گزینه‌های زیر پشتیبانی می‌شوند:

--auto-syntax

انتخاب --csh-syntax یا --sh-syntax بر پایه متغیر محیطی SHELL.

--binary-syntax

نوشتن نشانی گذرگاه به صورت خاتمه‌یافته با نویسه پوچ (nul-terminated) در stdout، سپس شناسه فرایند (PID) گذرگاه به صورت یک عدد صحیح دودویی با اندازه sizeof(pid_t)، و سپس شناسه پنجره X گذرگاه به صورت یک عدد صحیح دودویی با اندازه sizeof(long). اعداد صحیح با ترتیب بایتی ماشین هستند، نه ترتیب بایتی شبکه یا هر ترتیب استاندارد دیگر.

--close-stderr

بستن جریان خروجی خطای استاندارد پیش از شروع دیمن D-Bus. این گزینه زمانی مفید است که می‌خواهید پیام‌های خطای dbus-launch را دریافت کنید اما نمی‌خواهید dbus-daemon جریان را برای برنامه شما باز نگه دارد.

--config-file=FILENAME

ارسال --config-file=FILENAME به دیمن گذرگاه، به جای ارسال آرگومان --session به آن. به صفحه راهنمای dbus-daemon مراجعه کنید.

--csh-syntax

تولید کد سازگار با csh برای برپایی متغیرهای محیطی.

--exit-with-x11

اگر این گزینه مشخص شود، یک فرایند مراقب ("babysitter") ماندگار ایجاد خواهد شد که به کارساز X متصل می‌شود. اگر نتواند متصل شود، راه‌اندازی با شکست مواجه می‌شود. در صورتی که فرایند مراقب اتصال X خود را از دست بدهد، دیمن گذرگاه پیام را می‌کشد و تمام کلاینت‌های آن را قطع می‌کند (که باید در پاسخ خارج شوند). این کار از باقی ماندن فرایندهای دیمن از نشست X کاربر پس از پایان یافتن نشست X جلوگیری می‌کند.

--exit-with-session

اگر این گزینه مشخص شود، یک فرایند مراقب ("babysitter") ماندگار، مشابه با حالت --exit-with-x11 ایجاد خواهد شد. اگر نتواند به کارساز X متصل شود، به جای آن ترمینالی را که dbus-launch از آن آغاز شده نظارت می‌کند، و اگر سیگنال HUP روی stdin دریافت کند، دیمن گذرگاه پیام کشته خواهد شد. این گزینه توصیه نمی‌شود زیرا ورودی را از ترمینالی که در آن شروع شده مصرف می‌کند؛ این گزینه عمدتاً برای سازگاری با گذشته فراهم شده است.

--autolaunch=MACHINEID

این گزینه مشخص می‌کند که dbus-launch باید برای یافتن یک نشست قبلاً راه‌اندازی‌شده جست‌وجو کرده و مقادیر یافت‌شده در آنجا را مجدداً استفاده کند. اگر نشستی یافت نشود، نشست جدیدی را آغاز می‌کند. در صورت مشخص شدن --autolaunch، گزینه --exit-with-session به صورت ضمنی فعال می‌شود. این گزینه منحصراً برای استفاده libdbus است و نباید آن را به صورت دستی استفاده کنید. این رفتار ممکن است در آینده تغییر کند.

--sh-syntax

تولید کد سازگار با شل بورن (Bourne shell) برای برپایی متغیرهای محیطی.

--version

چاپ نسخه dbus-launch و خروج.

--help

چاپ اطلاعات راهنمای dbus-launch و خروج.

اگر دستور dbus-launch myapp را (همراه با هر گزینه دیگری) اجرا کنید، با خاتمه یافتن myapp دیمن dbus-daemon خارج نخواهد شد؛ زیرا این‌گونه فرض می‌شود که myapp بخشی از یک نشست بزرگتر است، نه اینکه خود به تنهایی یک نشست مستقل باشد.

مراجعه کنید به:

https://dbus.freedesktop.org/doc/AUTHORS

لطفاً گزارش‌های باگ را به فهرست پستی یا سامانه پیگیری باگ D-Bus ارسال کنید؛ مراجعه کنید به:

https://www.freedesktop.org/wiki/Software/dbus

dbus-daemon(1)، dbus-run-session(1)، dbus-send(1)، dbus-monitor(1)

03/02/2025 D-Bus 1.16.2