| XDG-DBUS-PROXY(1) | User Commands | XDG-DBUS-PROXY(1) |
نام (NAME)
xdg-dbus-proxy - پروکسی فیلترکننده اتصالات D-Bus
خلاصه دستور (SYNOPSIS)
xdg-dbus-proxy [OPTION...] [ADDRESS PATH [OPTION...]...]
توضیحات (DESCRIPTION)
دستور xdg-dbus-proxy یک پروکسی فیلترکننده برای اتصالات D-Bus است. آرگومانهای آن یک یا چند جفت ADDRESS-PATH هستند که گذرگاههای مورد نظر برای پروکسی شدن را به همراه گزینههای تعیینکننده فیلترینگ مشخص میکنند.
عملیات پایه (Basic Operation)
پروکسی به سوکت دامنه یونیکس در PATH گوش میدهد و به ازای هر کلاینتی که به سوکت متصل شود، یک اتصال جدید به ADDRESS مشخصشده D-Bus (معمولاً گذرگاه نشست) باز میکند و دادهها را میان آن دو هدایت مینماید. در طول مرحله احراز هویت، تمام دادهها به همان صورت دریافتی هدایت میشوند و همچنین برای اولین بایت صفر (1 byte zero)، اعتبارنامههای پروکسی نیز به گذرگاه ارسال میشود.
پس از احراز هویت اتصال، دو حالت وجود دارد: فیلترشده و فیلترنشده. در حالت فیلترنشده، همه پیامها همانطور که دریافت میشوند ارسال میگردند. در حالت فیلترشده، سیاستهای مشخص اعمال میشوند تا تعیین کنند کدام پیامها مجاز هستند و کدام پیامها باید دور ریخته شوند.
فیلترینگ تنها بر سیگنالهای خروجی، فراخوانیهای متد و سیگنالهای همگانی ورودی اعمال میشود. تمامی پاسخها (خطاها یا بازگشتهای متد) تنها یک بار برای هر فراخوانی متدِ در انتظار مجاز شمرده میشوند و در غیر این صورت هرگز مجاز نیستند.
اگر یک کلاینت پیامی از همتای دیگری در گذرگاه دریافت کند، نام یکتای فرستنده نمایان میشود تا کلاینت بتواند چرخه عمر فراخواننده را از طریق سیگنالهای NameOwnerChanged دنبال کند. اگر کلاینتی متدی را روی یک نام فراخوانی کند یا سیگنال همگانی از آن دریافت نماید (حتی اگر به زیرمجموعهای از مسیرها یا رابطها فیلتر شده باشد)، سیاست پایه آن نام از آن پس (حداقل) TALK در نظر گرفته میشود.
سیاستها (Policy)
سیاست فیلترینگ شامل نگاشتی از نامهای شناختهشده به یکی از سیاستهای SEE، TALK یا OWN است. سیاست اولیه پیشفرض این است که کاربر تنها مجاز به ارتباط (TALK) با خود گذرگاه (org.freedesktop.DBus، یا بدون تعیین مقصد) و ارتباط (TALK) با شناسه یکتای خود است. تمامی کلاینتهای دیگر نامرئی هستند.
در ادامه توضیحات مربوط به سطوح سیاستها آمده است (هر سطح شامل سطوح پیش از خود نیز میشود):
SEE
نام/شناسه در پاسخ ListActivatableNames قابل مشاهده است
میتوانید GetNameOwner را روی نام فراخوانی کنید
میتوانید NameHasOwner را روی نام فراخوانی کنید
سیگنالهای NameOwnerChanged را روی نام مشاهده میکنید
هنگام قطع اتصال کلاینت، سیگنالهای NameOwnerChanged را روی شناسه مشاهده میکنید
میتوانید متدهای GetXXX را روی نام/شناسه فراخوانی کنید تا به عنوان مثال pid همتا را به دست آورید
هنگام ارسال پیام به نام/شناسه، به جای NameHasNoOwner خطای AccessDenied دریافت میکنید
TALK
سیگنالهای همگانی را از نام/شناسه دریافت خواهید کرد (در صورتی که قاعده تطبیق برای آنها داشته باشید)
میتوانید StartServiceByName را روی نام فراخوانی کنید
OWN
سیاست با گزینههای --see، --talk و --own مشخص میشود. نامهای شناختهشده در این گزینهها میتوانند دارای پسوند '.*' باشند. نام "org.foo.*" با "org.foo"، "org.foo.bar" و "org.foo.bar.gazonk" مطابقت دارد، اما با "org.foobar" مطابقت ندارد.
سیاستها برای نامهای شناختهشده تعیین میشوند، اما بر مالک آن نام نیز تأثیر میگذارند، به طوری که سیاست مربوط به یک شناسه یکتا، اجتماع سیاستهای تمام نامهایی است که مالک آنهاست. به دلایل فنی، سیاست برای یک نام یکتا «چسبنده» (sticky) است؛ بدین معنا که بالاترین سیاست اعطا شده توسط نامی که زمانی در مالکیت بوده حفظ میشود، حتی زمانی که کلاینت آن نام را آزاد کند. جلوگیری از این امر در یک پروکسی به شیوهای عاری از شرایط رقابتی (race-free) غیرممکن است. اما در عمل به ندرت مشکلساز میشود، زیرا کلاینتهای اندکی نامها را آزاد کرده و در گذرگاه باقی میمانند.
علاوه بر سیاست پایه SEE/TALK/OWN، میتوان قواعد پیچیدهتری را در مورد فراخوانیهای متد مجاز و سیگنالهای همگانی قابل دریافت از نامهای شناختهشده تعیین کرد. یک قاعده میتواند فراخوانیها/سیگنالهای مجاز را به یک مسیر شیء خاص یا زیردرختی از مسیرهای شیء محدود کند، و میتواند رابط مجاز را تا یک متد یا نام سیگنال منفرد محدود سازد.
قواعد با گزینههای --call و --broadcast مشخص میشوند. مقدار RULE در این گزینهها رابطها، متدها و مسیرهای شیء مجاز را تعیین میکند. این مقدار باید به فرمت [METHOD][@PATH] باشد، که در آن METHOD میتواند '*' یا یک رابط D-Bus (احتمالاً با پسوند '.*') یا یک نام متد کاملاً واجد شرایط باشد، و PATH یک مسیر شیء D-Bus است (احتمالاً با پسوند '/*').
گزینهها (OPTIONS)
هنگامی که گزینهها چندین بار استفاده شوند، آخرین گزینه اعمال میشود، مگر اینکه خلاف آن مشخص شده باشد.
گزینههای عمومی:
--help
--version
--fd=FD
--args=FD
گزینههای پروکسی:
این گزینهها فقط بعد از یک ADDRESS قابل استفاده هستند و برای پروکسی آن نشانی اعمال میشوند.
--filter
--log
--sloppy-names
--see=NAME
--talk=NAME
--own=NAME
--call=NAME=RULE
--broadcast=NAME=RULE
مثالها (EXAMPLES)
$ xdg-dbus-proxy --fd=26 unix:path=/run/usr/1000/bus /run/usr/1000/.dbus-proxy/session-bus-proxy --filter --own=org.gnome.ghex.* --talk=ca.desrt.dconf --call=org.freedesktop.portal.*=* --broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*
| flatpak |