ORG.FREEDESKTOP.TIMEDATE1(5) org.freedesktop.timedate1 ORG.FREEDESKTOP.TIMEDATE1(5)

org.freedesktop.timedate1 - رابط کاربری D-Bus سرویس systemd-timedated

systemd-timedated.service(8) یک سرویس سیستمی است که می‌تواند برای کنترل ساعت سیستم و تنظیمات مرتبط به کار رود. این صفحه رابط D-Bus را شرح می‌دهد.

این سرویس رابط‌های زیر را روی گذرگاه ارائه می‌دهد:

node /org/freedesktop/timedate1 {
  interface org.freedesktop.timedate1 {
    methods:
      SetTime(in  x usec_utc,
              in  b relative,
              in  b interactive);
      SetTimezone(in  s timezone,
                  in  b interactive);
      SetLocalRTC(in  b local_rtc,
                  in  b fix_system,
                  in  b interactive);
      SetNTP(in  b use_ntp,
             in  b interactive);
      ListTimezones(out as timezones);
    properties:
      readonly s Timezone = '...';
      readonly b LocalRTC = ...;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly b CanNTP = ...;
      readonly b NTP = ...;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly b NTPSynchronized = ...;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly t TimeUSec = ...;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly t RTCTimeUSec = ...;
  };
  interface org.freedesktop.DBus.Peer { ... };
  interface org.freedesktop.DBus.Introspectable { ... };
  interface org.freedesktop.DBus.Properties { ... };
};

از SetTime() برای تغییر ساعت سیستم استفاده کنید. مقداری بر حسب میکروثانیه از مبدأ یونیکس (۱ ژانویه ۱۹۷۰ ساعت UTC) ارسال کنید. اگر relative برابر با true باشد، مقدار میکروثانیه ارسالی به زمان فعلی سیستم اضافه خواهد شد. اگر false باشد، زمان فعلی سیستم بر روی مقدار میکروثانیه ارسال‌شده تنظیم خواهد شد. اگر زمان سیستم با این متد تنظیم شود، ساعت سخت‌افزاری (RTC) نیز به‌روزرسانی خواهد شد.

از SetTimezone() برای تنظیم منطقه زمانی سیستم استفاده کنید. مقداری مانند "Europe/Berlin" برای تنظیم منطقه زمانی ارسال کنید. مناطق زمانی معتبر در /usr/share/zoneinfo/zone.tab فهرست شده‌اند. اگر RTC به گونه‌ای پیکربندی شده باشد که بر اساس زمان محلی نگهداری شود، به همین ترتیب به‌روزرسانی خواهد شد.

از SetLocalRTC() برای کنترل اینکه آیا RTC در زمان محلی است یا UTC استفاده کنید. اکیداً توصیه می‌شود که RTC در UTC نگهداری شود. با این حال، برخی از سیستم‌عامل‌ها (مانند Windows) ساعت RTC را در زمان محلی نگه می‌دارند، که ممکن است فعال کردن این ویژگی را ضروری کند. توجه داشته باشید که این موضوع ممکن است مشکلات متعددی ایجاد کند چرا که تغییرات ساعت تابستانی ممکن است از دست بروند. اگر fix_system برابر با "true" باشد، زمان از RTC مجدداً خوانده شده و ساعت سیستم مطابق با تنظیم جدید تنظیم می‌شود. اگر fix_system برابر با "false" باشد، زمان سیستم با در نظر گرفتن تنظیمات جدید در RTC نوشته می‌شود. در نصاب‌ها و دیسک‌های زنده (livecd) که در آن‌ها RTC احتمالاً قابل اعتمادتر از زمان سیستم است از fix_system=true استفاده کنید. در رابط‌های کاربری پیکربندی که در طول کارکرد عادی سیستم اجرا می‌شوند و در آن‌ها ساعت سیستم احتمالاً قابل اعتمادتر از RTC است از fix_system=false استفاده کنید.

از SetNTP() برای کنترل اینکه آیا ساعت سیستم با استفاده از systemd-timesyncd با شبکه همگام‌سازی می‌شود یا خیر استفاده کنید. این کار سرویس همگام‌سازی زمان انتخاب‌شده را فعال و راه‌اندازی، یا غیرفعال و متوقف خواهد کرد.

متد ListTimezones() فهرستی از مناطق زمانی شناخته‌شده در سیستم محلی را به صورت آرایه‌ای از نام‌ها ("["Africa/Abidjan", "Africa/Accra", ..., "UTC"]") بازمی‌گرداند.

ویژگی Timezone منطقه زمانی پیکربندی‌شده فعلی را نشان می‌دهد. LocalRTC نشان می‌دهد که آیا RTC برای استفاده از UTC (مقدار false) یا منطقه زمانی محلی (مقدار true) پیکربندی شده است یا خیر. CanNTP نشان می‌دهد که آیا سرویسی برای انجام همگام‌سازی زمان از طریق شبکه در دسترس است یا خیر، و NTP نشان می‌دهد که آیا چنین سرویسی فعال است یا خیر.

ویژگی NTPSynchronized نشان می‌دهد که آیا کرنل زمان را همگام‌شده گزارش می‌دهد یا خیر (مقایسه کنید با adjtimex(3)). TimeUSec و RTCTimeUSec زمان فعلی سیستم و ساعت RTC را نشان می‌دهند. هدف از این سه ویژگی این است که به کلاینت‌های راه دور امکان دسترسی به این اطلاعات از طریق D-Bus داده شود. کلاینت‌های محلی می‌توانند مستقیماً به این اطلاعات دسترسی داشته باشند.

هر زمان که تنظیمات Timezone و LocalRTC از طریق دیمن تغییر کنند، سیگنال‌های PropertyChanged به کلاینت‌هایی که مشترک شده‌اند ارسال می‌شوند.

توجه داشته باشید که این سرویس شما را از تغییرات زمان سیستم مطلع نخواهد کرد. برای این منظور از timerfd(3) همراه با CLOCK_REALTIME و TFD_TIMER_CANCEL_ON_SET استفاده کنید.

پارامترهای بولی interactive می‌توانند برای کنترل اینکه آیا polkit[1] باید در صورت لزوم به‌صورت تعاملی از کاربر اطلاعات احراز هویت را درخواست کند یا خیر، استفاده شوند.

اقدام polkit برای SetTimezone() برابر با org.freedesktop.timedate1.set-timezone است. برای SetLocalRTC() برابر با org.freedesktop.timedate1.set-local-rtc بوده، برای SetTime() برابر با org.freedesktop.timedate1.set-time و برای SetNTP() برابر با org.freedesktop.timedate1.set-ntp است. ListTimezones() به هیچ مجوزی نیاز ندارد.

مثال ۱. درون‌نگری org.freedesktop.timedate1 در گذرگاه

$ gdbus introspect --system \
  --dest org.freedesktop.timedate1 \
  --object-path /org/freedesktop/timedate1

این رابط‌های D-Bus از دستورالعمل‌های معمول نسخه‌بندی رابط[2] پیروی می‌کنند.

systemd(1), systemd-timedated.service(8), timedatectl(1), اطلاعات بیشتر درباره نحوه تعامل ساعت سیستم و RTC[3]

1.
polkit
2.
دستورالعمل‌های معمول نسخه‌بندی رابط
3.
اطلاعات بیشتر درباره نحوه تعامل ساعت سیستم و RTC
systemd 261.2