| ORG.FREEDESKTOP.LOGIN1(5) | org.freedesktop.login1 | ORG.FREEDESKTOP.LOGIN1(5) |
نام (NAME)
org.freedesktop.login1 - رابط کاربری D-Bus سرویس systemd-logind
توضیحات (DESCRIPTION)
systemd-logind.service(8) یک سرویس سیستمی است که ورودهای کاربر و جایگاهها (seats) را پیگیری میکند.
این دیمن هم یک رابط کتابخانهٔ C و هم یک رابط D-Bus ارائه میدهد. رابط کتابخانه ممکن است برای دروننگری و مشاهدهٔ وضعیت ورودهای کاربر و جایگاهها استفاده شود. رابط گذرگاه همان قابلیتها را ارائه میدهد، اما علاوه بر آن میتواند برای ایجاد تغییرات در وضعیت سیستم نیز به کار رود. برای اطلاعات بیشتر لطفاً به sd-login(3) مراجعه کنید.
شیء MANAGER (THE MANAGER OBJECT)
این سرویس رابطهای زیر را روی شیء Manager در گذرگاه ارائه میدهد:
node /org/freedesktop/login1 {
interface org.freedesktop.login1.Manager {
methods:
GetSession(in s session_id,
out o object_path);
GetSessionByPID(in u pid,
out o object_path);
GetUser(in u uid,
out o object_path);
GetUserByPID(in u pid,
out o object_path);
GetSeat(in s seat_id,
out o object_path);
ListSessions(out a(susso) sessions);
ListSessionsEx(out a(sussussbto) sessions);
ListUsers(out a(uso) users);
ListSeats(out a(so) seats);
ListInhibitors(out a(ssssuu) inhibitors);
@org.freedesktop.systemd1.Privileged("true")
CreateSession(in u uid,
in u pid,
in s service,
in s type,
in s class,
in s desktop,
in s seat_id,
in u vtnr,
in s tty,
in s display,
in b remote,
in s remote_user,
in s remote_host,
in a(sv) properties,
out s session_id,
out o object_path,
out s runtime_path,
out h fifo_fd,
out u uid,
out s seat_id,
out u vtnr,
out b existing);
@org.freedesktop.systemd1.Privileged("true")
CreateSessionWithPIDFD(in u uid,
in h pidfd,
in s service,
in s type,
in s class,
in s desktop,
in s seat_id,
in u vtnr,
in s tty,
in s display,
in b remote,
in s remote_user,
in s remote_host,
in t flags,
in a(sv) properties,
out s session_id,
out o object_path,
out s runtime_path,
out h fifo_fd,
out u uid,
out s seat_id,
out u vtnr,
out b existing);
ReleaseSession(in s session_id);
ActivateSession(in s session_id);
ActivateSessionOnSeat(in s session_id,
in s seat_id);
LockSession(in s session_id);
UnlockSession(in s session_id);
LockSessions();
UnlockSessions();
KillSession(in s session_id,
in s whom,
in i signal_number);
KillUser(in u uid,
in i signal_number);
TerminateSession(in s session_id);
TerminateUser(in u uid);
TerminateSeat(in s seat_id);
SetUserLinger(in u uid,
in b enable,
in b interactive);
AttachDevice(in s seat_id,
in s sysfs_path,
in b interactive);
FlushDevices(in b interactive);
PowerOff(in b interactive);
PowerOffWithFlags(in t flags);
Reboot(in b interactive);
RebootWithFlags(in t flags);
Halt(in b interactive);
HaltWithFlags(in t flags);
Suspend(in b interactive);
SuspendWithFlags(in t flags);
Hibernate(in b interactive);
HibernateWithFlags(in t flags);
HybridSleep(in b interactive);
HybridSleepWithFlags(in t flags);
SuspendThenHibernate(in b interactive);
SuspendThenHibernateWithFlags(in t flags);
Sleep(in t flags);
CanPowerOff(out s result);
CanReboot(out s result);
CanHalt(out s result);
CanSuspend(out s result);
CanHibernate(out s result);
CanHybridSleep(out s result);
CanSuspendThenHibernate(out s result);
CanSleep(out s result);
ScheduleShutdown(in s type,
in t usec);
CancelScheduledShutdown(out b cancelled);
Inhibit(in s what,
in s who,
in s why,
in s mode,
out h pipe_fd);
CanRebootParameter(out s result);
SetRebootParameter(in s parameter);
CanRebootToFirmwareSetup(out s result);
SetRebootToFirmwareSetup(in b enable);
CanRebootToBootLoaderMenu(out s result);
SetRebootToBootLoaderMenu(in t timeout);
CanRebootToBootLoaderEntry(out s result);
SetRebootToBootLoaderEntry(in s boot_loader_entry);
SetWallMessage(in s wall_message,
in b enable);
signals:
SecureAttentionKey(s seat_id,
o object_path);
SessionNew(s session_id,
o object_path);
SessionRemoved(s session_id,
o object_path);
UserNew(u uid,
o object_path);
UserRemoved(u uid,
o object_path);
SeatNew(s seat_id,
o object_path);
SeatRemoved(s seat_id,
o object_path);
PrepareForShutdown(b start);
PrepareForShutdownWithMetadata(b start,
a{sv} metadata);
PrepareForSleep(b start);
properties:
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
@org.freedesktop.systemd1.Privileged("true")
readwrite b EnableWallMessages = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
@org.freedesktop.systemd1.Privileged("true")
readwrite s WallMessage = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly u NAutoVTs = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly as KillOnlyUsers = ['...', ...];
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly as KillExcludeUsers = ['...', ...];
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly b KillUserProcesses = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly s RebootParameter = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b RebootToFirmwareSetup = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t RebootToBootLoaderMenu = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly s RebootToBootLoaderEntry = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly as BootLoaderEntries = ['...', ...];
readonly b IdleHint = ...;
readonly t IdleSinceHint = ...;
readonly t IdleSinceHintMonotonic = ...;
readonly s BlockInhibited = '...';
readonly s BlockWeakInhibited = '...';
readonly s DelayInhibited = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t InhibitDelayMaxUSec = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t UserStopDelayUSec = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly as SleepOperation = ['...', ...];
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandlePowerKey = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandlePowerKeyLongPress = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleRebootKey = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleRebootKeyLongPress = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleSuspendKey = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleSuspendKeyLongPress = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleHibernateKey = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleHibernateKeyLongPress = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleLidSwitch = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleLidSwitchExternalPower = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleLidSwitchDocked = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s HandleSecureAttentionKey = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t HoldoffTimeoutUSec = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s IdleAction = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t IdleActionUSec = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b PreparingForShutdown = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly a{sv} PreparingForShutdownWithMetadata = [...];
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b PreparingForSleep = ...;
readonly (st) ScheduledShutdown = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s DesignatedMaintenanceTime = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Docked = ...;
readonly b LidClosed = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b OnExternalPower = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly b RemoveIPC = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t RuntimeDirectorySize = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t RuntimeDirectoryInodesMax = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t InhibitorsMax = ...;
readonly t NCurrentInhibitors = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t SessionsMax = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t NCurrentSessions = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t StopIdleSessionUSec = ...;
};
interface org.freedesktop.DBus.Peer { ... };
interface org.freedesktop.DBus.Introspectable { ... };
interface org.freedesktop.DBus.Properties { ... };
};
متدها (Methods)
GetSession() ممکن است برای دریافت مسیر شیء نشست برای نشست با شناسهٔ مشخصشده استفاده شود. به طور مشابه، GetUser() و GetSeat() به ترتیب اشیاء کاربر و جایگاه (seat) را دریافت میکنند. GetSessionByPID() و GetUserByPID() شیء نشست/کاربری را که PID مشخصشده به آن تعلق دارد (در صورت وجود) دریافت میکنند.
ListSessions() آرایهای از تمام نشستهای جاری را برمیگرداند. ساختارهای موجود در آرایه از فیلدهای زیر تشکیل شدهاند: session id (شناسه نشست)، user id (شناسه کاربر)، user name (نام کاربر)، seat id (شناسه جایگاه)، و session object path (مسیر شیء نشست). اگر نشستی جایگاهی متصل نداشته باشد، فیلد شناسه جایگاه یک رشتهٔ خالی خواهد بود.
ListSessionsEx() آرایهای از تمام نشستهای جاری را با فرادادههای بیشتر نسبت به ListSessions() برمیگرداند. ساختارهای موجود در آرایه شامل فیلدهای زیر هستند: session id، user id، user name، seat id، leader pid، session class، tty name، idle hint، idle hint monotonic timestamp، و session object path. فیلدهای tty و seat id در صورتی که نشست به ترتیب tty مرتبطی نداشته باشد یا جایگاهی به نشست متصل نباشد، میتوانند خالی باشند.
ListUsers() آرایهای از تمام کاربرانی که در حال حاضر وارد سیستم شدهاند را برمیگرداند. ساختارهای موجود در آرایه از فیلدهای زیر تشکیل شدهاند: شناسه کاربر، نام کاربر، مسیر شیء کاربر.
ListSeats() آرایهای از تمام جایگاههای موجود در حال حاضر را برمیگرداند. ساختار موجود در آرایه از فیلدهای زیر تشکیل شده است: شناسه جایگاه، مسیر شیء جایگاه.
ListInhibitors() تمام مهارکنندههای (inhibitors) فعال کنونی را فهرست میکند. این متد آرایهای از ساختارها شامل what (چه چیزی)، who (چه کسی)، why (چرا)، mode (حالت)، uid (شناسه کاربر)، و pid (شناسه فرایند) را برمیگرداند.
CreateSession()، CreateSessionWithPIDFD()، و ReleaseSession() ممکن است برای باز کردن یا بستن نشستهای ورود استفاده شوند. این فراخوانیها هرگز نباید مستقیماً توسط کلاینتها فراخوانی شوند. ایجاد/بستن نشستها منحصراً وظیفهٔ PAM و ماژول pam_systemd(8) آن است.
ActivateSession() نشست با شناسهٔ مشخصشده را به پیشزمینه میآورد. ActivateSessionOnSeat() همین کار را انجام میدهد، اما تنها در صورتی که شناسه جایگاه مطابقت داشته باشد.
LockSession() از نشست با شناسهٔ مشخصشده درخواست میکند که قفل صفحه را فعال کند. UnlockSession() از نشست با شناسهٔ مشخصشده درخواست میکند تا در صورت وجود قفل صفحهٔ فعال، آن را حذف کند. این کار با ارسال سیگنالهای Lock() و Unlock() از شیء نشست مربوطه پیادهسازی شده است که مدیران نشست باید آنها را شنود کنند.
LockSessions() از تمام نشستها میخواهد قفل صفحهٔ خود را فعال کنند. این متد میتواند برای قفل کردن دسترسی به کل ماشین در یک اقدام استفاده شود. به طور مشابه، UnlockSessions() از تمام نشستها درخواست میکند که قفل صفحهٔ خود را غیرفعال کنند.
KillSession() ممکن است برای ارسال یک سیگنال یونیکس به یک یا تمام فرایندهای یک نشست استفاده شود. به عنوان آرگومان، شناسه نشست، یکی از رشتههای "leader" یا "all" و یک شماره سیگنال را میگیرد. اگر "leader" ارسال شود، فقط فرایند پیشگام (leader) نشست متوقف میشود. اگر "all" ارسال شود، تمام فرایندهای نشست متوقف میشوند.
KillUser() ممکن است برای ارسال یک سیگنال یونیکس به تمام فرایندهای یک کاربر استفاده شود. به عنوان آرگومان، شناسه کاربر و یک شماره سیگنال را میگیرد.
TerminateSession()، TerminateUser()، TerminateSeat() ممکن است به ترتیب برای پایان دادن اجباری به یک نشست مشخص، تمام فرایندهای یک کاربر، و تمام نشستهای متصل به یک جایگاه مشخص استفاده شوند. نشست، کاربر و جایگاه با شناسههای مربوط به خود مشخص میشوند.
SetUserLinger() ماندگاری کاربر (user lingering) را فعال یا غیرفعال میکند. در صورت فعال بودن، دایرکتوری زمان اجرای کاربر نگهداشته میشود و کاربر میتواند پس از خروج از سیستم (log out) نیز به اجرای فرایندها ادامه دهد. در صورت غیرفعال بودن، دایرکتوری زمان اجرا به محض خروج کاربر از بین میرود. SetUserLinger() سه آرگومان میپذیرد: UID، یک مقدار بولی برای فعال/غیرفعال کردن و یک مقدار بولی که تعاملی بودن مجوزدهی polkit[1] را کنترل میکند (به زیر مراجعه کنید). توجه داشته باشید که وضعیت ماندگاری کاربر به صورت ماندگار روی دیسک ذخیره میشود.
AttachDevice() ممکن است برای اختصاص یک دستگاه خاص به یک جایگاه خاص استفاده شود. دستگاه توسط مسیر /sys/ آن شناسایی میشود و باید واجد شرایط اختصاص به جایگاه باشد. AttachDevice() سه آرگومان میگیرد: شناسه جایگاه، مسیر sysfs، و یک مقدار بولی برای کنترل تعاملی بودن polkit (به زیر مراجعه کنید). تخصیصهای دستگاه به صورت پایدار روی دیسک ذخیره میشوند. برای ایجاد یک جایگاه جدید، کافی است یک شناسه جایگاه استفادهنشده از قبل را مشخص کنید. برای اطلاعات بیشتر درباره منطق انتساب جایگاه به sd-login(3) مراجعه کنید.
FlushDevices() تمام انتسابهای صریح دستگاهها به جایگاهها را حذف کرده و همهٔ انتسابها را به مقادیر پیشفرض خودکار بازنشانی میکند. تنها آرگومانی که میگیرد مقدار بولی تعاملی بودن polkit است (به زیر مراجعه کنید).
PowerOff()، Reboot()، Halt()، Suspend()، و Hibernate() منجر به خاموش شدن سیستم، راهاندازی مجدد (reboot)، متوقف شدن (halt - خاموش شدن بدون قطع برق)، تعلیق (suspend - ذخیره وضعیت سیستم در RAM و خاموش شدن CPU)، یا خواب زمستانی (hibernate - ذخیره وضعیت سیستم روی دیسک و خاموش شدن ماشین) میشوند. HybridSleep() باعث میشود سیستم وارد حالت خواب ترکیبی (hybrid-sleep) شود، یعنی سیستم هم در حالت خواب زمستانی و هم در حالت تعلیق قرار میگیرد. SuspendThenHibernate() باعث میشود سیستم ابتدا به حالت تعلیق درآید و سپس بعداً با استفاده از یک تایمر RTC بیدار شده و به حالت خواب زمستانی برود. تنها آرگومان آن مقدار بولی تعاملی بودن polkit یعنی interactive است (به زیر مراجعه کنید). هدف اصلی این فراخوانیها این است که خطمشی polkit را اعمال میکنند و در نتیجه به کاربران غیرمجاز نیز اجازهٔ خاموش کردن/راهاندازی مجدد/تعلیق/خواب زمستانی را میدهند. آنها همچنین قفلهای مهارکننده را برای کاربران غیرمجاز اعمال میکنند. Sleep() به طور خودکار مناسبترین عملیات خواب پشتیبانیشده توسط ماشین را انتخاب میکند. عملیات نامزد خواب برای بررسی پشتیبانی را میتوان از طریق تنظیم SleepOperation= در logind.conf(5) پیکربندی کرد. رابطهای کاربری باید این فراخوانیها را به عنوان سازوکار اصلی برای خاموش کردن/راهاندازی مجدد/تعلیق/خواب زمستانی ماشین ارائه دهند. متدهای PowerOffWithFlags()، RebootWithFlags()، HaltWithFlags()، SuspendWithFlags()، HibernateWithFlags()، HybridSleepWithFlags()، SuspendThenHibernateWithFlags()، و Sleep() برای امکان گسترشپذیری، آرگومان flags را میپذیرند که به شرح زیر تعریف شده است:
#define SD_LOGIND_ROOT_CHECK_INHIBITORS (UINT64_C(1) << 0) #define SD_LOGIND_KEXEC_REBOOT (UINT64_C(1) << 1) #define SD_LOGIND_SOFT_REBOOT (UINT64_C(1) << 2) #define SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP (UINT64_C(1) << 3) #define SD_LOGIND_SKIP_INHIBITORS (UINT64_C(1) << 4)
هنگامی که flags برابر 0 باشد، این متدها دقیقاً مانند نسخههای بدون پرچم رفتار میکنند. از نسخهٔ 257 سیستمدی، مهارکنندههای از نوع "block" روی عملیات درخواستی توسط هر دو دسته کاربران مجاز و غیرمجاز اعمال میشوند. پیش از این، آنها فقط توسط کاربران غیرمجاز رعایت میشدند، به استثنای کاربری که مالک مهارکننده بود. رفتار اخیر اکنون از طریق نوع قفل مهارکنندهٔ "block-weak" در دسترس است. SD_LOGIND_ROOT_CHECK_INHIBITORS (0x01) باعث میشود قفلهای "block-weak" مانند قفلهای معمولی "block" رفتار کنند، یعنی تضمین میکند که برای هر کاربری رعایت شوند. پرچم SD_LOGIND_SKIP_INHIBITORS (0x10) میتواند برای نادیده گرفتن هر دو نوع مهارکنندهٔ "block" و "block-weak" مشخص شود (روی مهارکنندههای "delay" تأثیری ندارد). هنگامی که SD_LOGIND_KEXEC_REBOOT (0x02) تنظیم شود، RebootWithFlags() در صورت بارگذاری بودن هسته kexec، راهاندازی مجدد kexec را انجام میدهد. هنگامی که SD_LOGIND_SOFT_REBOOT (0x04) تنظیم شود، یا SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP (0x08) تنظیم شده و یک سیستم فایل ریشه جدید روی "/run/nextroot/" راهاندازی شده باشد، RebootWithFlags() تنها یک راهاندازی مجدد در فضای کاربری (userspace reboot) انجام میدهد. SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP و SD_LOGIND_KEXEC_REBOOT میتوانند با هم ترکیب شوند که در این حالت soft-reboot اولویت دارد.
SetRebootParameter() پارامتری را برای عملیات راهاندازی مجدد بعدی تنظیم میکند. برای اطلاعات بیشتر شرح reboot در systemctl(1) و reboot(2) را ببینید.
SetRebootToFirmwareSetup()، SetRebootToBootLoaderMenu()، و SetRebootToBootLoaderEntry() اقدامی را که باید پس از راهاندازی مجدد از بوتلودر انجام شود پیکربندی میکنند: به ترتیب ورود به حالت تنظیمات میانافزار (firmware setup mode)، منوی بوتلودر، یا یک مدخل خاص در بوتلودر. برای رابط خط فرمان متناظر به systemctl(1) مراجعه کنید.
CanPowerOff()، CanReboot()، CanHalt()، CanSuspend()، CanHibernate()، CanHybridSleep()، CanSuspendThenHibernate()، CanSleep()، CanRebootParameter()، CanRebootToFirmwareSetup()، CanRebootToBootLoaderMenu()، و CanRebootToBootLoaderEntry() آزمایش میکنند که آیا سیستم از عملیات مربوطه پشتیبانی میکند و آیا کاربر فراخواننده مجاز به اجرای آن است یا خیر. یکی از مقادیر "na"، "yes"، "no"، "challenge"، "inhibited"، "inhibitor-blocked"، و "challenge-inhibitor-blocked" را برمیگردانند. اگر "na" برگردانده شود، عملیات به دلیل عدم پشتیبانی سختافزار، هسته یا درایورها در دسترس نیست. اگر "yes" برگردانده شود، عملیات پشتیبانی میشود و کاربر میتواند بدون نیاز به احراز هویت بیشتر عملیات را اجرا کند. اگر "no" برگردانده شود، عملیات در دسترس است اما کاربر مجاز به اجرای آن نیست. اگر "challenge" برگردانده شود، عملیات در دسترس است اما فقط پس از احراز هویت. اگر "inhibited" برگردانده شود، عملیات معمولاً بدون احراز هویت در دسترس است اما در حال حاضر مهار شده است. این عملیات فقط در صورتی در دسترس است که مهارکنندهها نادیده گرفته شوند و پس از احراز هویت. اگر "inhibitor-blocked" برگردانده شود، عملیات معمولاً بدون احراز هویت در دسترس است اما در حال حاضر مهار شده است. تا زمانی که مهارکننده فعال بماند، کاربر مجاز به اجرای عملیات نیست. "challenge-inhibitor-blocked" نیز مشابه است: عملیات معمولاً پس از احراز هویت در دسترس است اما یک مهارکننده فعال مانع اجرای عملیات توسط کاربر میشود.
ScheduleShutdown() یک عملیات خاموشسازی type را برای زمان usec به میکروثانیه از مبدأ زمان یونیکس (UNIX epoch) زمانبندی میکند. متناوباً، اگر usec برابر "UINT64_MAX" باشد و یک بازهٔ نگهداری پیکربندی شده باشد، systemd-logind به جای آن از زمان بعدی بازهٔ نگهداری استفاده خواهد کرد. type میتواند یکی از مقادیر "poweroff"، "dry-poweroff"، "reboot"، "dry-reboot"، "halt"، و "dry-halt" باشد. (انواع "dry-" در عمل اقدام خاموشسازی را اجرا نمیکنند.) CancelScheduledShutdown() یک خاموشسازی زمانبندیشده را لغو میکند. پارامتر خروجی cancelled در صورتی که عملیات خاموشسازی زمانبندی شده بود، true است.
توجه داشته باشید که usec تنها یک حد پایین است: عملیات خاموشسازی در اسرع وقت اجرا میشود، اما نه پیش از زمان مشخصشده. برچسب زمانی در گذشته یک خطا نیست، بلکه صرفاً به این معنی است که عملیات فوراً اجرا میشود. این امر مهم است، زیرا درخواست برای خاموش شدن فوری، یا مدت زمان بسیار کوتاهی در آینده، معمولاً در زمان پردازش، مربوط به گذشته است.
SetWallMessage() پیام همگانی (wall message - پیامی که به تمام پایانهها فرستاده میشود و در یک رکورد utmp(5) ذخیره میگردد) را برای عملیات خاموشسازی زمانبندیشدهٔ بعدی تنظیم میکند. پارامتر wall_message دلیل خاموشسازی را مشخص میکند (و ممکن است خالی باشد) که در پیام خاموشسازی گنجانده خواهد شد. پارامتر enable مشخص میکند که آیا پیام همگانی در هنگام خاموش شدن چاپ شود یا خیر.
Inhibit() یک قفل مهارکننده ایجاد میکند. این متد چهار پارامتر میگیرد: what، who، why، و mode. what یک یا چند مورد از "shutdown"، "sleep"، "idle"، "handle-power-key"، "handle-suspend-key"، "handle-hibernate-key"، "handle-lid-switch" است که با دو نقطه (:) از هم جدا شدهاند، برای مهار کردن خاموش شدن/راهاندازی مجدد، تعلیق/خواب زمستانی، منطق خودکار بیکاری، یا مدیریت کلیدهای سختافزاری. who باید یک رشتهٔ کوتاه و خوانا برای انسان باشد که برنامهای را که قفل را میگیرد شناسایی کند. why باید یک رشتهٔ کوتاه و خوانا برای انسان باشد که دلیل گرفتن قفل را مشخص کند. در نهایت، mode یکی از مقادیر "block" یا "delay" است که کدگذاری میکند آیا مهار باید اجباری در نظر گرفته شود یا این که فقط باید عملیات را تا یک حداکثر زمان معین به تأخیر بیندازد، در حالی که "block-weak" و انواع آن مهارکنندهای ایجاد میکنند که در برخی شرایط به طور خودکار نادیده گرفته میشود. این متد یک توصیفگر فایل (file descriptor) برمیگرداند. قفل در همان لحظهای که این توصیفگر فایل و تمام کپیهای آن بسته شوند، آزاد میشود. برای اطلاعات بیشتر در مورد منطق مهار به قفلهای مهارکننده (Inhibitor Locks)[2] مراجعه کنید.
سیگنالها (Signals)
هر زمان که وضعیت مهار یا وضعیت بیکاری تغییر کند، سیگنالهای PropertyChanged به کلاینتهایی که مشترک شدهاند ارسال میشوند.
سیگنال SecureAttentionKey() هنگامی ارسال میشود که کاربر کلیدهای ترکیبی Ctrl+Alt+Shift+Esc را فشار دهد تا از مدیر ورود بخواهد صفحهٔ خوشآمدگویی (greeter) را نمایش دهد، به عنوان مثال در صورت قفل شدن یا بنبست کامپوزیتور گرافیکی (deadlocked compositor).
سیگنالهای SessionNew()، SessionRemoved()، UserNew()، UserRemoved()، SeatNew()، و SeatRemoved() هر بار که یک نشست ایجاد یا حذف شود، یک کاربر وارد یا خارج شود، یا یک جایگاه اضافه یا حذف شود، ارسال میشوند. هر کدام از آنها شامل شناسه شیء به همراه مسیر شیء هستند.
سیگنالهای PrepareForShutdown()، PrepareForShutdownWithMetadata()، و PrepareForSleep() دقیقاً قبل از (با آرگومان "true" ) یا بعد از (با آرگومان "false" ) اینکه سیستم به ترتیب برای راهاندازی مجدد/خاموش شدن و تعلیق/خواب زمستانی خاموش شود، ارسال میشوند. این سیگنالها ممکن است توسط برنامهها برای ذخیره دادهها روی دیسک، آزادسازی حافظه، یا انجام کارهای دیگری که باید اندکی قبل از خاموشسازی/خواب انجام شوند، در ارتباط با قفلهای مهارکنندهٔ تأخیری (delay inhibitor locks) استفاده شوند. پس از تکمیل این کار، آنها باید قفلهای مهارکننده خود را آزاد کنند تا عملیات بیش از این به تأخیر نیفتد. برای اطلاعات بیشتر به قفلهای مهارکننده (Inhibitor Locks)[2] مراجعه کنید. سیگنال PrepareForShutdownWithMetadata() علاوه بر این، فهرستی از فیلدهای متادیتای جفت کلید/مقدار را ارسال میکند. در حال حاضر این سیگنال یک رشتهٔ type ارسال میکند که نوع خاموشسازی را مشخص میسازد. نوع میتواند یکی از موارد "power-off"، "reboot"، "halt"، "kexec" یا "soft-reboot" باشد. این سیگنال ابتدا ارسال میشود و به دنبال آن PrepareForShutdown() (برای سازگاری با گذشته) ارسال میگردد.
ویژگیها (Properties)
بیشتر ویژگیها صرفاً پیکربندی را منعکس میکنند، به logind.conf(5) مراجعه کنید. این شامل موارد زیر است: NAutoVTs، KillOnlyUsers، KillExcludeUsers، KillUserProcesses، IdleAction، InhibitDelayMaxUSec، InhibitorsMax، UserStopDelayUSec، HandlePowerKey، HandleSuspendKey، HandleHibernateKey، HandleLidSwitch، HandleLidSwitchExternalPower، HandleLidSwitchDocked، IdleActionUSec، HoldoffTimeoutUSec، RemoveIPC، RuntimeDirectorySize، RuntimeDirectoryInodesMax، InhibitorsMax، و SessionsMax.
ویژگی IdleHint وضعیت نشانهٔ بیکاری (idle hint) سیستم را منعکس میکند. اگر سیستم بیکار باشد، بسته به پیکربندی ممکن است وارد تعلیق یا خاموشسازی خودکار شود.
IdleSinceHint و IdleSinceHintMonotonic برچسبهای زمانی آخرین تغییر مقدار بولی نشانهٔ بیکاری را به ترتیب در ساعتهای CLOCK_REALTIME و CLOCK_MONOTONIC به میکروثانیه از مبدأ زمان کدگذاری میکنند.
ویژگیهای BlockInhibited، BlockWeakInhibited، و DelayInhibited قفلهای فعال کنونی در حالتهای مربوطه را کدگذاری میکنند. آنها فهرستهایی با جداکننده دو نقطه از "shutdown"، "sleep"، و "idle" هستند (به بالا مراجعه کنید).
NCurrentSessions و NCurrentInhibitors شامل تعداد نشستها و مهارکنندههای ثبتشدهٔ فعلی هستند.
ویژگی BootLoaderEntries حاوی فهرستی از مدخلهای بوتلودر است. این شامل مدخلهای بوتلودر تعریفشده در پیکربندی و هر مدخل بارگذار اضافی گزارششده توسط بوتلودر است. برای اطلاعات بیشتر به systemd-boot(7) مراجعه کنید.
ویژگیهای بولی PreparingForShutdown و PreparingForSleep در فاصلهٔ زمانی بین دو سیگنال PrepareForShutdown() و PrepareForSleep() به ترتیب true هستند. ویژگی PreparingForShutdownWithMetadata فهرستی از فیلدهای متادیتای جفت کلید/مقدار را ارائه میدهد. در حال حاضر این ویژگی یک بولی preparing را فهرست میکند که متناظر با ویژگی PreparingForShutdown است، و در صورتی که یک خاموشسازی در حال آمادهسازی باشد، همچنین شامل یک رشتهٔ type خواهد بود که نوع خاموشسازی را مشخص میکند. نوع میتواند یکی از موارد "power-off"، "reboot"، "halt"، "kexec" یا "soft-reboot" باشد. توجه داشته باشید که این ویژگیها سیگنالهای PropertyChanged ارسال نمیکنند.
ویژگی RebootParameter مقداری را که با متد SetRebootParameter() شرح داده شده در بالا تنظیم شده است نشان میدهد.
ScheduledShutdown جفت مقدار تنظیمشده با متد ScheduleShutdown() شرح داده شده در بالا را نشان میدهد.
RebootToFirmwareSetup، RebootToBootLoaderMenu، و RebootToBootLoaderEntry هنگامی true هستند که عملیات پس از راهاندازی مجدد مربوطه به ترتیب با SetRebootToFirmwareSetup()، SetRebootToBootLoaderMenu()، یا SetRebootToBootLoaderEntry() انتخاب شده باشد.
ویژگیهای WallMessage و EnableWallMessages دلیل خاموشسازی و کلید فعالسازی پیام همگانی را منعکس میکنند که میتوانند با متد SetWallMessage() شرح داده شده در بالا تنظیم شوند.
Docked در صورتی که ماشین به یک داک متصل باشد true است. LidClosed هنگامی که درب (لپتاپ) بسته باشد true است. OnExternalPower هنگامی که ماشین به یک منبع برق خارجی متصل باشد true است.
امنیت (Security)
شماری از عملیات از طریق سیستم امتیازات polkit محافظت میشوند. SetUserLinger() نیازمند امتیاز org.freedesktop.login1.set-user-linger است. AttachDevice() نیازمند org.freedesktop.login1.attach-device و FlushDevices() نیازمند org.freedesktop.login1.flush-devices است. PowerOff()، Reboot()، Halt()، Suspend()، Hibernate() بسته به اینکه آیا نشستهای دیگری وجود دارند یا مهارکنندههای فعال حاضر هستند، به ترتیب نیازمند org.freedesktop.login1.power-off، org.freedesktop.login1.power-off-multiple-sessions، org.freedesktop.login1.power-off-ignore-inhibit، org.freedesktop.login1.reboot، org.freedesktop.login1.reboot-multiple-sessions، org.freedesktop.login1.reboot-ignore-inhibit، org.freedesktop.login1.halt، org.freedesktop.login1.halt-multiple-sessions، org.freedesktop.login1.halt-ignore-inhibit، org.freedesktop.login1.suspend، org.freedesktop.login1.suspend-multiple-sessions، org.freedesktop.login1.suspend-ignore-inhibit، org.freedesktop.login1.hibernate، org.freedesktop.login1.hibernate-multiple-sessions، org.freedesktop.login1.hibernate-ignore-inhibit هستند. HybridSleep() و SuspendThenHibernate() از همان امتیازات Hibernate() استفاده میکنند. Sleep() از مهارکنندههای عملیات خواب انتخابشده بهصورت خودکار استفاده میکند. SetRebootParameter() نیازمند org.freedesktop.login1.set-reboot-parameter است.
SetRebootToFirmwareSetup() نیازمند org.freedesktop.login1.set-reboot-to-firmware-setup است. SetRebootToBootLoaderMenu() نیازمند org.freedesktop.login1.set-reboot-to-boot-loader-menu است. SetRebootToBootLoaderEntry() نیازمند org.freedesktop.login1.set-reboot-to-boot-loader-entry است.
ScheduleShutdown() و CancelScheduledShutdown() نیازمند همان امتیازات (فهرستشده در بالا) برای عملیات فوری خاموشسازی/راهاندازی مجدد/توقف سیستم هستند.
Inhibit() بسته به نوع و حالت قفل گرفتهشده، از طریق یکی از امتیازهای org.freedesktop.login1.inhibit-block-shutdown، org.freedesktop.login1.inhibit-delay-shutdown، org.freedesktop.login1.inhibit-block-sleep، org.freedesktop.login1.inhibit-delay-sleep، org.freedesktop.login1.inhibit-block-idle، org.freedesktop.login1.inhibit-handle-power-key، org.freedesktop.login1.inhibit-handle-suspend-key، org.freedesktop.login1.inhibit-handle-hibernate-key، org.freedesktop.login1.inhibit-handle-lid-switch محافظت میشود.
پارامترهای بولی interactive میتوانند برای کنترل اینکه آیا polkit در صورت نیاز باید از کاربر به صورت تعاملی گواهیهای احراز هویت بخواهد یا خیر، استفاده شوند.
اشیاء SEAT (SEAT OBJECTS)
node /org/freedesktop/login1/seat/seat0 {
interface org.freedesktop.login1.Seat {
methods:
Terminate();
ActivateSession(in s session_id);
SwitchTo(in u vtnr);
SwitchToNext();
SwitchToPrevious();
properties:
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Id = '...';
readonly (so) ActiveSession = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly b CanTTY = ...;
readonly b CanGraphical = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly a(so) Sessions = [...];
readonly b IdleHint = ...;
readonly t IdleSinceHint = ...;
readonly t IdleSinceHintMonotonic = ...;
};
interface org.freedesktop.DBus.Peer { ... };
interface org.freedesktop.DBus.Introspectable { ... };
interface org.freedesktop.DBus.Properties { ... };
};
متدها (Methods)
Terminate() و ActivateSession() مشابه با TerminateSeat() و ActivationSessionOnSeat() روی شیء Manager کار میکنند.
SwitchTo() به نشست روی ترمینال مجازی vtnr سوییچ میکند. SwitchToNext() و SwitchToPrevious() به ترتیب به نشستهای بعدی و قبلی روی جایگاه بر اساس ترتیب ترمینالهای مجازی سوییچ میکنند. اگر نشست فعالی وجود نداشته باشد، آنها به ترتیب به اولین و آخرین نشست روی جایگاه سوییچ میکنند.
سیگنالها (Signals)
هر زمان که ActiveSession، Sessions، CanGraphical، CanTTY، یا وضعیت بیکاری تغییر کند، سیگنالهای PropertyChanged به کلاینتهایی که مشترک شدهاند ارسال میشوند.
سیگنالها تنها روی اشیائی که به یک شناسه جایگاه خاص ارجاع دارند صادر میشوند، نه روی اشیاء تسهیلکنندهٔ "/org/freedesktop/login1/seat/self" یا "/org/freedesktop/login1/seat/auto" چرا که آنها فقط نسبت به فراخوانندهٔ متد قابل ارجاعگشایی هستند.
ویژگیها (Properties)
ویژگی Id شناسهٔ جایگاه را کدگذاری میکند.
ActiveSession نشست فعال کنونی را در صورت وجود کدگذاری میکند. این ویژگی ساختاری متشکل از شناسه نشست و مسیر شیء است.
CanTTY کدگذاری میکند که آیا نشست برای ورودهای متنی مناسب است یا خیر، و CanGraphical مشخص میسازد که آیا برای نشستهای گرافیکی مناسب است یا خیر.
ویژگی Sessions آرایهای از تمام نشستهای جاری این جایگاه است که هر کدام در ساختاری متشکل از شناسه و مسیر شیء کدگذاری شدهاند.
ویژگیهای IdleHint، IdleSinceHint، و IdleSinceHintMonotonic وضعیت بیکاری را کدگذاری میکنند، مشابه مواردی که روی شیء Manager ارائه شدهاند، اما به طور خاص برای این جایگاه.
اشیاء USER (USER OBJECTS)
node /org/freedesktop/login1/user/_1000 {
interface org.freedesktop.login1.User {
methods:
Terminate();
Kill(in i signal_number);
properties:
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly u UID = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly u GID = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Name = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t Timestamp = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t TimestampMonotonic = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s RuntimePath = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Service = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Slice = '...';
readonly (so) Display = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly s State = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly a(so) Sessions = [...];
readonly b IdleHint = ...;
readonly t IdleSinceHint = ...;
readonly t IdleSinceHintMonotonic = ...;
readonly b Linger = ...;
};
interface org.freedesktop.DBus.Peer { ... };
interface org.freedesktop.DBus.Introspectable { ... };
interface org.freedesktop.DBus.Properties { ... };
};
متدها (Methods)
Terminate() و Kill() مشابه با متدهای TerminateUser() و KillUser() روی شیء manager عمل میکنند.
سیگنالها (Signals)
هر زمان که Sessions یا وضعیت بیکاری تغییر کند، سیگنالهای PropertyChanged به کلاینتهایی که مشترک شدهاند ارسال میشوند.
سیگنالها فقط روی اشیائی که به یک UID خاص ارجاع دارند صادر میشوند، نه روی شیء تسهیلکنندهٔ "/org/freedesktop/login1/user/self" چرا که self تنها نسبت به فراخوانندهٔ متد قابل ارجاعگشایی است.
ویژگیها (Properties)
ویژگیهای UID و GID شناسهٔ عددی کاربر (UID) و شناسهٔ گروه اصلی (GID) یونیکس کاربر را کدگذاری میکنند.
ویژگی Name نام کاربری را کدگذاری میکند.
Timestamp و TimestampMonotonic زمان ورود کاربر را به میکروثانیه از مبدأ زمان به ترتیب در ساعتهای CLOCK_REALTIME و CLOCK_MONOTONIC کدگذاری میکنند.
RuntimePath مسیر زمان اجرای کاربر را کدگذاری میکند، یعنی $XDG_RUNTIME_DIR. برای جزئیات به مشخصات دایرکتوری پایه XDG[3] مراجعه کنید.
Service شامل نام واحد سرویس سیستمدی کاربری این کاربر است. به هر کاربر وارد شده یک سرویس کاربری اختصاص داده میشود که یک نمونهٔ systemd کاربری را اجرا میکند. این معمولاً نمونهای از user@.service است.
Slice شامل نام واحد برش (slice) سیستمدی کاربری این کاربر است. هر کاربر واردشده یک برش اختصاصی دریافت میکند.
Display کدگذاری میکند که کدام نشست گرافیکی باید به عنوان نمایشگر اصلی رابط کاربری (UI) برای کاربر استفاده شود. این ساختاری است که شناسه نشست و مسیر شیء نشست مورد استفاده را کدگذاری میکند.
State وضعیت کاربر را کدگذاری میکند و یکی از مقادیر "offline"، "lingering"، "online"، "active"، یا "closing" است. برای اطلاعات بیشتر در مورد وضعیتها به sd_uid_get_state(3) مراجعه کنید.
Sessions آرایهای از ساختارها است که تمام نشستهای جاری کاربر را کدگذاری میکند. هر ساختار از شناسه و مسیر شیء تشکیل شده است.
ویژگیهای IdleHint، IdleSinceHint، و IdleSinceHintMonotonic وضعیت نشانهٔ بیکاری کاربر را کدگذاری میکنند، مشابه ویژگیهای Manager's، اما مختص این کاربر.
ویژگی Linger نشان میدهد که آیا ماندگاری (lingering) برای این کاربر فعال است یا خیر.
اشیاء SESSION (SESSION OBJECTS)
node /org/freedesktop/login1/session/1 {
interface org.freedesktop.login1.Session {
methods:
Terminate();
Activate();
Lock();
Unlock();
SetIdleHint(in b idle);
SetLockedHint(in b locked);
Kill(in s whom,
in i signal_number);
TakeControl(in b force);
ReleaseControl();
SetType(in s type);
SetClass(in s class);
SetDisplay(in s display);
SetTTY(in h tty_fd);
TakeDevice(in u major,
in u minor,
out h fd,
out b inactive);
ReleaseDevice(in u major,
in u minor);
PauseDeviceComplete(in u major,
in u minor);
SetBrightness(in s subsystem,
in s name,
in u brightness);
signals:
PauseDevice(u major,
u minor,
s type);
ResumeDevice(u major,
u minor,
h fd);
Lock();
Unlock();
properties:
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Id = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly (uo) User = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Name = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t Timestamp = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t TimestampMonotonic = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly u VTNr = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly (so) Seat = ...;
readonly s TTY = '...';
readonly s Display = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly b Remote = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s RemoteHost = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s RemoteUser = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly as ExtraDeviceAccess = ['...', ...];
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Service = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Desktop = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly s Scope = '...';
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly u Leader = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly t LeaderPIDFDId = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly u Audit = ...;
readonly s Type = '...';
readonly s Class = '...';
readonly b Active = ...;
readonly s State = '...';
readonly b IdleHint = ...;
readonly t IdleSinceHint = ...;
readonly t IdleSinceHintMonotonic = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly b CanIdle = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
readonly b CanLock = ...;
readonly b LockedHint = ...;
};
interface org.freedesktop.DBus.Peer { ... };
interface org.freedesktop.DBus.Introspectable { ... };
interface org.freedesktop.DBus.Properties { ... };
};
متدها (Methods)
Terminate()، Activate()، Lock()، Unlock()، و Kill() مشابه با فراخوانیهای متناظر روی شیء Manager عمل میکنند.
SetIdleHint() توسط شیء نشست فراخوانی میشود تا وضعیت بیکاری نشست را در هر بار تغییر، بهروزرسانی کند.
TakeControl() به یک فرایند اجازه میدهد کنترل دسترسی مدیریتشدهٔ انحصاری به دستگاهها را برای آن نشست در دست بگیرد. در هر زمان تنها یک اتصال D-Bus میتواند کنترلکنندهٔ یک نشست معین باشد. اگر آرگومان force تنظیم شده باشد (فقط ریشه/root)، کنترلکنندهٔ موجود اخراج شده و جایگزین میشود. در غیر این صورت، اگر از قبل یک کنترلکننده وجود داشته باشد، این متد شکست میخورد. توجه داشته باشید که این متد به کاربران D-Bus محدود است که UID مؤثر آنها روی کاربر نشست یا ریشه تنظیم شده باشد.
ReleaseControl() کنترل یک نشست معین را رها میکند. بستن اتصال D-Bus نیز به طور ضمنی کنترل را آزاد میسازد. برای اطلاعات بیشتر به TakeControl() مراجعه کنید. این متد همچنین تمام دستگاههایی را که کنترلکننده از طریق TakeDevice() درخواست مالکیت آنها را کرده بود، آزاد میکند.
SetType() اجازه میدهد نوع نشست به صورت پویا تغییر یابد. این متد تنها توسط کنترلکنندهٔ کنونی نشست قابل فراخوانی است. اگر TakeControl() فراخوانی نشده باشد، این متد شکست خواهد خورد. علاوه بر این، به محض اینکه کنترل آزاد شود (چه با فراخوانی ReleaseControl() یا بستن اتصال D-Bus)، نوع نشست به مقدار اصلی خود بازنشانی خواهد شد. این امر به جلوگیری از ورود نشست به یک وضعیت ناسازگار، مثلاً در صورت خرابی و کرش کردن کنترلکننده، کمک میکند. تنها آرگومان type نوع نشست جدید است.
SetClass() به فراخواننده اجازه میدهد کلاس نشست را به صورت پویا تغییر دهد. این متد ممکن است تنها توسط کاربری که مالک نشست است فراخوانی شود. در حال حاضر، این فراخوانی ممکن است منحصراً برای تغییر کلاس از "user-incomplete" به "user" استفاده شود. فراخوانی همگام (synchronous) است، و تنها پس از اینکه مدیر سرویس کاربر در صورت لزوم با موفقیت راهاندازی شد بازمیگردد. تنها آرگومان type نوع جدید نشست است.
SetDisplay() اجازه میدهد نام نمایشگر نشست گرافیکی تغییر داده شود. این زمانی مفید است که سرور نمایشگر به عنوان بخشی از نشست راهاندازی شود. این متد تنها میتواند توسط کنترلکنندهٔ کنونی نشست فراخوانی شود. اگر TakeControl() فراخوانی نشده باشد، این متد شکست خواهد خورد. تنها آرگومان display نام نمایشگر جدید است.
SetTTY() اجازه میدهد نام دستگاه نشست تغییر داده شود. این زمانی مفید است که دستگاه tty تنها پس از احراز هویت شناخته شود. این متد تنها توسط کنترلکنندهٔ کنونی نشست قابل فراخوانی است. اگر TakeControl() فراخوانی نشده باشد، این متد شکست خواهد خورد. تنها آرگومان tty_fd یک دستهٔ فایل (file handle) به دستگاه tty جدید است.
TakeDevice() به یک کنترلکنندهٔ نشست اجازه میدهد توصیفگر فایل (file descriptor) را برای یک دستگاه خاص دریافت کند. شمارههای اصلی و فرعی (major and minor) دستگاه نویسهای (character device) را وارد کنید و systemd-logind یک توصیفگر فایل برای دستگاه بازمیگرداند. در حال حاضر تنها مجموعهٔ محدودی از انواع دستگاهها پشتیبانی میشوند (اما ممکن است گسترش یابد). systemd-logind در صورتی که نشست غیرفعال باشد، به طور خودکار توصیفگر فایل را بیصدا (mute) میکند و به محض فعال شدن مجدد نشست، آن را از سر میگیرد. این تضمین میکند که یک نشست تنها در صورتی میتواند به دستگاههای نشست دسترسی داشته باشد که نشست فعال باشد. توجه داشته باشید که این سازوکار لغو/ازسرگیری ناهمگام (asynchronous) است و ممکن است در هر زمان معینی رخ دهد. این قابلیت تنها روی دستگاههایی کار میکند که به جایگاه نشست دادهشده متصل باشند. نیازی نیست که یک فرایند دسترسی مستقیم به گره دستگاه داشته باشد. systemd-logind تنها نیاز دارد که شما کنترلکنندهٔ نشست فعال باشید (به TakeControl() مراجعه کنید). همچنین توجه داشته باشید که هر دستگاه تنها میتواند یک بار درخواست شود. تا زمانی که آن را آزاد نکنید، فراخوانیهای بعدی TakeDevice() شکست خواهند خورد.
ReleaseDevice() یک دستگاه را دوباره آزاد میکند (به TakeDevice() مراجعه کنید). این کار همچنین به طور ضمنی توسط ReleaseControl() یا هنگام بستن اتصال D-Bus انجام میشود.
PauseDeviceComplete() به یک کنترلکنندهٔ نشست اجازه میدهد پس از دریافت یک سیگنال PauseDevice("pause") یک دستگاه را به صورت همگام متوقف (pause) کند. سیگنالهای اجباری (یا پس از یک مهلت زمانی داخلی) به طور خودکار توسط systemd-logind به صورت ناهمگام تکمیل میشوند.
SetLockedHint() ممکن است برای تنظیم "نشانهٔ قفل" (locked hint) به locked استفاده شود، یعنی اطلاعاتی در این مورد که آیا نشست قفل است یا خیر. این متد برای استفاده توسط محیط رومیزی در نظر گرفته شده تا به systemd-logind اطلاع دهد که چه زمانی نشست قفل و بازگشایی شده است.
SetBrightness() ممکن است برای تنظیم روشنایی صفحه نمایش استفاده شود. این متد برای استفاده توسط محیط رومیزی در نظر گرفته شده و به برنامههای غیرمجاز اجازه میدهد به روشی کنترلشده به تنظیمات سختافزاری دسترسی پیدا کنند. پارامتر subsystem یک زیرسیستم هسته را مشخص میکند، یا "backlight" یا "leds". پارامتر name نام یک دستگاه را تحت زیرسیستم مشخصشده تعیین میکند. پارامتر brightness روشنایی را مشخص میکند. محدوده توسط درایورهای اختصاصی تعریف میشود، به /sys/class/subsystem/name/max_brightness مراجعه کنید.
سیگنالها (Signals)
کنترلکنندهٔ نشست فعال منحصراً رویدادهای PauseDevice() و ResumeDevice() را برای هر دستگاهی که از طریق TakeDevice() درخواست کرده بود دریافت میکند. آنها هر زمان که دستگاهی متوقف یا از سر گرفته شود، کنترلکننده را مطلع میسازند. اگر نشست یک دستگاه غیرفعال باشد، آن دستگاه هرگز از سر گرفته نمیشود. همچنین توجه داشته باشید که سیگنالهای PauseDevice() قبل از سیگنال PropertyChanged برای وضعیت Active ارسال میشوند. عکس این قضیه برای ResumeDevice() صادق است. یک دستگاه ممکن است به دلایل نامعلومی با وجود فعال بودن Session همچنان در حالت تعلیق/توقف باقی بماند.
یک سیگنال PauseDevice() شمارههای اصلی و فرعی و یک رشتهٔ توصیفکنندهٔ نوع را به عنوان آرگومان حمل میکند. force به این معنی است که دستگاه از قبل توسط systemd-logind متوقف شده بود و سیگنال صرفاً یک اعلان ناهمگام است. pause به این معنی است که systemd-logind به شما مقدار محدودی زمان میدهد تا دستگاه را متوقف کنید. شما باید از طریق PauseDeviceComplete() به این سیگنال پاسخ دهید. این سازوکار توقف همگام برای سازگاری با گذشته در برابر VTها استفاده میشود و systemd-logind مختار است که از آن استفاده نکند. همچنین در صورتی که در زمان مناسب پاسخ ندهید (یا به هر دلیل دیگری) مختار است یک PauseDevice() اجباری ارسال کند. gone به این معنی است که دستگاه از سیستم جدا شده است و دیگر هیچ اعلانی در مورد آن دریافت نخواهید کرد. نیازی به فراخوانی ReleaseDevice() نیست. در صورتی که دستگاه جدیدی به ترکیب شمارههای اصلی+فرعی اختصاص یابد، میتوانید مجدداً TakeDevice() را فراخوانی کنید.
ResumeDevice() هر زمان که یک نشست فعال باشد و یک دستگاه از سر گرفته شود ارسال میگردد. این سیگنال شمارههای اصلی/فرعی را به عنوان آرگومان حمل کرده و یک توصیفگر فایل باز جدید ارائه میدهد. شما باید به توصیفگر جدید سوییچ کرده و توصیفگر قدیمی را ببندید. تضمین نمیشود که آنها در هسته توصیفگر فایل باز زیرین یکسانی داشته باشند (به جز برای مجموعه محدودی از انواع دستگاهها).
هر زمان که Active یا وضعیت بیکاری تغییر کند، سیگنالهای PropertyChanged به کلاینتهایی که مشترک شدهاند ارسال میشوند.
Lock()/Unlock() زمانی ارسال میشود که از نشست درخواست شود صفحه قفل/بازگشایی شود. مدیر نشست باید به این سیگنال گوش دهد و بر اساس آن عمل کند. این سیگنال در نتیجهٔ متدهای Lock() و Unlock() به ترتیب ارسال میشود.
سیگنالها فقط روی اشیائی که به یک شناسه نشست خاص ارجاع دارند صادر میشوند، نه روی اشیاء تسهیلکنندهٔ "/org/freedesktop/login1/session/self" یا "/org/freedesktop/login1/session/auto" چرا که آنها تنها نسبت به فراخوانندهٔ متد قابل ارجاعگشایی هستند.
ویژگیها (Properties)
Id شناسه نشست را کدگذاری میکند.
User شناسه کاربریِ کاربری را که این نشست متعلق به اوست کدگذاری میکند. این یک ساختار متشکل از UID یونیکس و مسیر شیء است.
Name نام کاربری را کدگذاری میکند.
Timestamp و TimestampMonotonic میکروثانیهها را از مبدأ زمان هنگام ایجاد نشست، به ترتیب در CLOCK_REALTIME یا CLOCK_MONOTONIC کدگذاری میکنند.
VTNr شماره ترمینال مجازی نشست را در صورت وجود، و در غیر این صورت 0 کدگذاری میکند.
Seat جایگاهی را که این نشست متعلق به آن است (در صورت وجود) کدگذاری میکند. این ساختاری متشکل از شناسه و مسیر شیء جایگاه است.
TTY مسیر TTY هستهٔ نشست را در صورتی که این یک ورود متنی باشد کدگذاری میکند. اگر نباشد، این یک رشتهٔ خالی است.
Display نام نمایشگر X11 را در صورتی که این یک ورود گرافیکی باشد کدگذاری میکند. اگر نباشد، این یک رشتهٔ خالی است.
Remote کدگذاری میکند که آیا نشست محلی است یا از راه دور (remote).
RemoteHost و RemoteUser در صورتی که این یک نشست از راه دور باشد، میزبان و کاربر از راه دور را کدگذاری میکنند، یا در غیر این صورت یک رشتهٔ خالی خواهند بود.
ExtraDeviceAccess مجموعه دستگاههای سختافزاری اضافی را که به نشست اجازهٔ دسترسی به آنها داده شده است کدگذاری میکند. برای هر "ID" در فهرست، نشست اجازهٔ دسترسی به تمام دستگاههای برچسبگذاریشده با "xaccess-ID" در udev را دریافت میکند.
Service نام سرویس PAM را که نشست را ثبت کرده است کدگذاری میکند.
Desktop محیط رومیزی در حال اجرا در نشست را توصیف میکند (در صورت مشخص بودن).
Scope شامل نام واحد scope سیستمدی این نشست است.
Leader PID فرایندی را که نشست را ثبت کرده است کدگذاری میکند.
LeaderPIDFDId شناسه inode مربوط به pidfd لینوکس برای فرایندی که نشست را ثبت کرده است کدگذاری میکند.
Audit شناسه نشست Kernel Audit را برای نشست در صورت در دسترس بودن حسابرسی کدگذاری میکند.
Type نوع نشست را کدگذاری میکند. این یکی از موارد "unspecified" (برای نشستهای PAM مربوط به cron و مانند آن)، "tty" (برای ورودهای متنی)، "web" (برای ورودهای مبتنی بر وب)، یا "x11"/"mir"/"wayland" (برای ورودهای گرافیکی) است.
Class کلاس نشست را کدگذاری میکند. این یکی از موارد "user" (برای نشستهای کاربری عادی)، "greeter" (برای شبهنشستهای مدیر نمایشگر)، یا "lock-screen" (برای صفحات قفل نمایشگر) است.
Active یک مقدار بولی است که در صورت فعال بودن نشست (یعنی در حال حاضر در پیشزمینه بودن)، true است. این فیلد به دلیل وجود State تا حدی مازاد است.
State وضعیت نشست را کدگذاری میکند و یکی از مقادیر "online"، "active"، یا "closing" است. برای اطلاعات بیشتر در مورد وضعیتها به sd_session_get_state(3) مراجعه کنید.
IdleHint، IdleSinceHint، و IdleSinceHintMonotonic وضعیت نشانهٔ بیکاری این نشست را در بر میگیرند، مشابه شیوهای که ویژگیهای متناظر روی شیء manager این کار را برای کل سیستم انجام میدهند.
LockedHint وضعیت نشانهٔ قفل این نشست را نشان میدهد، همانطور که توسط متد SetLockedHint() شرح داده شده در بالا تنظیم شده است.
CanIdle نشان میدهد که آیا نشست از مفهوم نشانهٔ بیکاری پشتیبانی میکند یا خیر. به طور مشابه، CanLock نشان میدهد که آیا نشست از مفهوم قفل صفحه پشتیبانی میکند یا خیر.
مثالها (EXAMPLES)
مثال ۱. دروننگری مدیر logind روی گذرگاه
$ gdbus introspect --system --dest org.freedesktop.login1 \ --object-path /org/freedesktop/login1
یا
$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1
مثال ۲. دروننگری جایگاه پیشفرض روی گذرگاه
$ gdbus introspect --system --dest org.freedesktop.login1 \ --object-path /org/freedesktop/login1/seat/seat0
یا
$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1/seat/seat0
جایگاه "seat0" جایگاه پیشفرض است، بنابراین وجود خواهد داشت مگر اینکه پیکربندی محلی برای اختصاص مجدد همهٔ دستگاهها به یک جایگاه متفاوت انجام شده باشد. فهرست جایگاهها و کاربران را میتوان با loginctl list-sessions به دست آورد.
مثال ۳. دروننگری یک کاربر منفرد روی گذرگاه
$ gdbus introspect --system --dest org.freedesktop.login1 \ --object-path /org/freedesktop/login1/user/_1000
یا
$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1/user/_1000
مثال ۴. دروننگری org.freedesktop.login1.Session روی گذرگاه
$ gdbus introspect --system --dest org.freedesktop.login1 \ --object-path /org/freedesktop/login1/session/45
یا
$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1/session/45
نسخهبندی (VERSIONING)
این رابطهای D-Bus از دستورالعملهای معمول نسخهبندی رابط[4] پیروی میکنند.
تاریخچه (HISTORY)
شیء Manager
HandlePowerKeyLongPress، HandleRebootKey، HandleRebootKeyLongPress، HandleSuspendKeyLongPress، و HandleHibernateKeyLongPress در نسخهٔ 251 اضافه شدند.
StopIdleSessionUSec در نسخهٔ 252 اضافه شد.
PrepareForShutdownWithMetadata() و CreateSessionWithPIDFD() در نسخهٔ 255 اضافه شدند.
Sleep()، CanSleep()، SleepOperation، و ListSessionsEx() در نسخهٔ 256 اضافه شدند.
HandleSecureAttentionKey، SecureAttentionKey()، PreparingForShutdownWithMetadata، DesignatedMaintenanceTime، CanIdle، CanLock، و BlockWeakInhibited در نسخهٔ 257 اضافه شدند.
اشیاء Session
SetDisplay() در نسخهٔ 252 اضافه شد.
SetTTY() در نسخهٔ 254 اضافه شد.
SetClass() در نسخهٔ 256 اضافه شد.
LeaderPIDFDId در نسخهٔ 258 اضافه شد.
ExtraDeviceAccess در نسخهٔ 260 اضافه شد.
همچنین ببینید (SEE ALSO)
نکات (NOTES)
- 1.
- polkit
- 2.
- قفلهای مهارکننده (Inhibitor Locks)
- 3.
- مشخصات دایرکتوری پایه XDG
- 4.
- دستورالعملهای معمول نسخهبندی رابط
| systemd 261.2 |