
Это расширение позволяет получить удалённый доступ к kdm. Эта возможность в первую очередь предназначена для использования ksmserver и kdesktop из запущенной сессии, но также может быть использована и другими приложениями.
Сокеты -- обычные UNIX® сокеты, которые находяться в подкаталогах каталога определённого опцией FifoDir
=.... Все сокеты названы socket
, и права доступа к подкаталогам, в которых они находятся: rw-rw-rw-
(0666). Это сделано потому, что некоторые операционные системы игнорируют права доступа к файлам сокетов.
Существует два типа сокетов: один глобальный (dmctl), и по одному на каждый дисплей (dmctl-<display>).
Владелец подкаталога глобальнокго сокета -- суперпользователь (root), а подкаталогов сокетов дисплеев -- пользователь запустивший текущую сессию (суперпользователь или другой вошедший в систему пользователь). Группа владельца может быть установлена опцией FifoGroup
=, иначе -- группа суперпользователя(root). Права доступа подкаталогов -- rwxr-x--- (0750).
Поля команды отделены знаками табуляции (\t), поля списков -- пробелами, поля выделенные символами -- знаками \s.
Команды оканчиваются переводом строки (\n).
Тоже самое относится и к возвращаемым значениям. Так ответ при успешном завершении -- ok, возможно перед нм будет запрашиваемая информация. Если при выполнении возникла ошибка -- ответ будет в стиле eerno (например perm, noent, и т.д.), предваряемый более подробным пояснением.
Глобальные команды:
- login
дисплей
(now
|schedule
)пользователь
пароль
[аргументы сессии] Позволяет войти пользователю в систему с определённого дисплея. Если указан параметр
now
, все ранее запущенные и ещё активные сессии закрываются. Аргументы сессии -- строка в стиле printf, для заполнения файла .dmrc. Для НЕ перечисленных значений -- используются значения по умолчанию.- resume
Force return from console mode, even if TTY logins are still active.
- manage
display
[display_class
[auth_name
auth_data
]] Start managing the named foreign display.
display_class
, if specified and non-empty, will be used for configuration matching; see Глава 5, Конфигурационные файлы kdm.auth_name
andauth_data
need to be passed if the display requires X authorization. The format is the same as the 2nd and 3rd column of the xauth list output.- unmanage
display
Stop managing the named foreign display.
Команды для дисплея:
- lock
Дисплей помечается как заблокированный. Если в этом состоянии X-сервер аварийно завершит работу, автоматический повторный вход в систему выполнен не будет, даже если он активирован.
- unlock
Имеет обратное значение по отношению к команде lock, и снова становиться возможным автоматически заходить в систему.
- suicide
Текущий сеанс принудительно закрывается. Автоматический вход в систему запрещён, но отложенная команда «login» разрешена.
Команды для всех сокетов
- caps
Возвращает все возможности сокета:
- kdm
идентифицирует kdm, на случай если другие менеджеры дисплеев тоже поддерживают данный протокол
- list, lock, suicide, login, resume, manage
Соответствующий список поддерживаемых команд
- bootoptions
Поддерживаются: команда listbootoptions и опция
=
к команде shutdown- shutdown <список>
Команда shutdown (выключить) разрешена и доступна для указанных пользователей (они перечисляются в списке через запятую). * — означает все зарегистрированные пользователи.
- nuke <список>
Ускоренное выключение доступно следующим пользователям, перечисленным в списке.
- nuke
Ускоренное выключение доступно всем
- reserve <число>
Зарезервированные дисплеи сконфигурированы, и некоторое их число уже доступно.
- list [
all
|alllocal
] Return a list of running sessions. By default all active sessions are listed (this is useful for a shutdown warning). If
all
is specified, passive sessions are listed as well. Ifalllocal
is specified, passive sessions are listed as well, but all incoming remote sessions are skipped (this is useful for a fast user switching agent).Каждая запись о сеансе представляет собой разделённый запятой набор:
Дисплей или имя консоли
VT name for local sessions, remote host name prefixed by
@
for remote TTY sessions, otherwise emptyИмя зашедшего пользователя, это поле пусто для пустых или пассивных сессий и для исходящих удалённых сессий.
Session type for active local sessions, remote hostname for outgoing remote sessions, empty for passive sessions.
Поле флагов:
*
для дисплеев, принадлежащих опрашиваемому сокету.!
for sessions that cannot be killed by the requesting socket.t
for TTY sessions.
Новые поля могут быть добавлены в будущем.
- reserve
Start a reserve login screen. If nobody logs in within some time, the display is removed again. When the session on the display exits, the display is removed, too.
Разрешено только для сокетов локальных дисплеев и для глобальных сокетов.
- activate (
vt
|display
) Переключиться на определённый виртуальный терминал (VT). Виртуальный терминал может быть определён непосредственно (например,
vt3
) или с помощью использующего его дисплея (например,:2
).Разрешено только для сокетов локальных дисплеев и для глобальных сокетов.
- listbootoptions
Список доступных загрузочных параметров.
The return value contains these tokens:
A list of boot options (as shown in kdm itself).
The default boot option.
The current boot option.
The default and current option are zero-based indices into the list of boot options. If either one is unset or not determinable, it is -1.
- shutdown (
reboot
|halt
) [=
] (bootchoice
ask
|trynow
|forcenow
|schedule
|start (
)-1
|end (
)force
|forcemy
|cancel)
) Послать запрос на выключение системы, или перезагрузку или на останов/выключение питания.
Операционная система, загружаемая после перезагрузки, может быть определена из списка, возвращаемого командой listbootoptions
Запросы на выключение с сокетов соответствующих отдельным дисплеям выполняются, когд текущие сессии на них закрываются. После запроса может появиться диалоговое окно спрашивающее подтверждение и/или аутентификацию.
start
-- время, когда выключение будет произведено. Если перед числом будет знак плюс, то добавляется текущее время. Ноль -- выключить немедленно.end
-- время через которое выключение будет произведено, несмотря на то, что некоторые сессии ещё не закрыты. Если перед числом будет знак плюс, то добавляется текущее время. -1 -- означает бесконечность. Если время истекло и сессии не закрыты, то kdm выполнит одно из следующих действий:cancel
— отменить выключениеforce
— выключить несмотря ни на чтоforcemy
-- выключить активные сессии после предупреждения пользователей. Только для сокетов запущеных для каждого дисплея.
start
иend
задаются в секундах с начала UNIX® эпохи.trynow
синоним для0 0 cancel
,forcenow
синоним для0 0 force
иschedule
синоним для0 -1
.ask
— если этот параметр указан, то делается немедленная попытка выключить дисплей, и если сеанс активен, производиться соответствующий запрос пользователю.- shutdown cancel [
local
|global
} Отменяет отложенное выключение. Глобальные сокеты отменяют только что полученный (ожидающий) запрос на выключение, тогда как сокеты дисплеев отменяют первый запрос в очереди (буферизованный).
- shutdown status
Выводит список с информацией о запросах выключения.
Каждая строка — набор разделённых запятыми полей:
(global|local) -- отложенный (ожидающий), или буферизованный запрос. local может быть возвращён только сокетом дисплея.
(halt|reboot)
начало работы
конец работы
("ask"|"force"|"forcemy"|"cancel")
Идентификационный номер пользователя (UID), или -1 для глобального сокета.
Операционная система, которая будет загружена после выключения, или «-».
В будущем могут быть добавлены новые поля.
Существует два способа использовать сокеты:
Подключиться к нему напрямую. Переменная окружения FifoDir длжна быть экспортирована с именем $
DM_CONTROL
; имя дисплейного сокета определяется как $DISPLAY
.С помощью команды kdmctl (например в сценарии командной строки). Наберите kdmctl
-h
чтобы узнать остальные параметры.
Далее пример bash сценария «перезагрузиться в ОС FreeBSD»:
if kdmctl | grep -q shutdown; then IFS=$'\t' set -- `kdmctl listbootoptions` if [ "$1" = ok ]; then fbsd=$(echo "$2" | tr ' ' '\n' | sed -ne 's,\\s, ,g;/freebsd/I{p;q}') if [ -n "$fbsd" ]; then kdmctl shutdown reboot "=$fbsd" ask > /dev/null else echo "FreeBSD boot unavailable." fi else echo "Boot options unavailable." fi else echo "Cannot reboot system." fi