X session from windows

Для чего нужен «.xsession»?

Какова цель .xsession файла в домашней папке? Что нужно положить туда? Среды рабочего стола не используют этот файл, и для запуска X из tty есть .xinitrc .

Если вы войдете в текстовый режим, затем запустите сеанс графического интерфейса с помощью xinit или сценария оболочки startx , а затем xinit выполните следующие действия:

  • Запустите X-сервер (обычно через скрипт /etc/X11/xinit/xserverrc ).
  • Обычно запускают некоторые скрипты в /etc/X11 (как правило /etc/X11/xinit/xinitrc ), в зависимости от того, как он настроен.
  • Беги

/.xinitrc , если он существует. Если он не существует, запустите клиент по умолчанию (традиционно xterm ).
Как только

/.xinitrc прекратит работу, убейте X-сервер.

Если войти в систему в графическом режиме на менеджера X отображения (XDM, GDM, KDM, WDM, LightDM, . ), традиционно, что выполняется после того, как вы войти в некоторые сценарии в /etc/X11 то

/.xsession имеет роль

/.xinitrc сочетании: он должен выполнять начальный запуск вашего сеанса (например, определять переменные среды), а затем запускать программы, специфичные для GUI (обычно, по крайней мере, оконный менеджер).

В настоящее время большинство менеджеров дисплеев X предоставляют вам возможность выбора сеанса. При выборе определенного сеанса запускается определенная среда рабочего стола, менеджер сеансов, менеджер окон. Затем выполняется только то, что DE / SM / WM и любые программы, которые он выбирает для запуска, основаны на любых конфигурационных файлах, которые он выбирает для чтения. Во многих средах предусмотрен «пользовательский сеанс», который читает традиционный

X++ session runtime functions

This topic describes the session run-time functions.

curExt

Retrieves the extension that is used for the current company.

Return value

The extension for the current company.

Example

curUserId

Retrieves the nonnumeric ID that represents the current user.

Return value

The nonnumeric ID that represents the current user.

Example

funcName

Retrieves a string that contains the current function context.

Return value

The name of the method that is executing this method.

Remarks

If execution is currently within the member of a table or class, the name of the method is prefixed with the name of that table or class.

Example

getCurrentPartition

Retrieves the short name of the current partition.

Return value

The short name of the current partition.

Remarks

The maximum length of the data partition name that is returned is eight characters.

Example

The following code example shows calls to, and output from, the getCurrentPartition function of the X++ language, and related functions or methods.

getCurrentPartitionRecId

Retrieves the RecId field of the current partition.

Return value

The RecId field of the current data partition.

Remarks

To see a code example that relies on the getCurrentPartitionRecId function, see How to: Include a Filter for Partition in Direct Transact-SQL.

Example

The following code example shows calls to, and output from, the getCurrentPartitionRecId function of the X++ language, and related functions or methods.

getPrefix

Retrieves the current execution prefix after successive calls to the setPrefix function.

Return value

The current execution prefix.

Remarks

The prefix mechanism makes it more straightforward to write precise error messages about the transactions that an application performs. Because a hierarchical display is created in the Infolog, it can be easier to determine where each error came from.

Example

sessionId

Retrieves the session number of the current session.

Return value

The numeric ID of the current session.

Remarks

A session number is assigned when the client is started and connects to Application Object Server (AOS). Every call of this function during the life of the client returns the same integer value. The returned value is compatible with the SessionID extended data type. The contains methods return information about individual user sessions.

Example

prmIsDefault

Determines whether the specified parameter for the current method has the default value.

Parameters

Parameter Description
Argument The parameter to test.

Return value

1 if the default value for the parameter was used; otherwise, 0 (zero).

Example

runAs

Enables the caller to run an X++ method in the security context of another user. This function is most often used with batch processing.

Parameters

Parameter Description
userId The user to impersonate.
classId The class to invoke in the impersonated session.
staticMethodName The class method to invoke in the new user context.
params The parameters to pass to the method; optional.
company The company that is selected for the impersonated session; optional.
language The language that is selected for the impersonated session; optional.
partition The partition key of the type that is returned by the getCurrentPartition function; optional.

Return value

A container that holds the return value or values of the method that is called by the runAs function, if any values were returned.

Remarks

This function makes it possible to run code as another user. This capability presents a security threat. Therefore, this function runs under Code Access Security. Calls to this function on the server require permission from the RunAsPermission class. Each use of this application programming interface (API) should be threat-modeled. If a security vulnerability is discovered, validate input to this API. The debugger might ignore breakpoints that are located in a method that is called by using the runAs function. X++ code that is executed by the runAs function must run as Microsoft .NET Framework Common Intermediate Language (CIL). If CIL hasn’t been generated for the target static method, an error message indicates that the method isn’t found. The PartitionKey system type is the exact type of the partition parameter. PartitionKey is a string that has a maximum length of eight characters.

Example

The following example calls the runDueDateEventsForUser method in the EventJobDueDate class. The code runs in the security context of a user. Run this code by applying it to a method in a new class.

setPrefix

Sets the prefix for the current execution scope.

Parameters

Parameter Description
_prefix The prefix for the current execution scope.

Return value

0 if the prefix was set successfully.

Remarks

The complete prefix for the execution can be fetched by using the getPrefix function. When the scope is left, the prefix is automatically reset to the previous level. The prefix mechanism makes it more straightforward to write precise error messages about the transactions that an application performs. For example, the AA method calls the BB method, and each method calls the setPrefix function. Messages that the BB method writes to the Infolog appear nested in a hierarchy. When the BB method ends, and control returns to the AA method, the prefix that was set by the BB method isn’t attached to subsequent messages.

Example

Can you tell us about your documentation language preferences? Take a short survey.

The survey will take about seven minutes. No personal data is collected (privacy statement).

Менеджер X сессий — X session manager

В системе X Window , менеджер X сессия является управление сеансами программа, программа , которая может сохранять и восстанавливать текущее состояние набора запущенных приложений.

Содержание

Обзор

С точки зрения менеджера X-сессий, сессия — это «состояние рабочего стола» в данный момент времени: набор окон с их текущим содержимым. Точнее, сеанс — это набор клиентов, управляющих этими окнами или связанных с ними, и информация, которая позволяет этим приложениям при необходимости восстанавливать состояние этих окон.

Самый узнаваемый эффект от использования диспетчера сеансов — это возможность выхода из интерактивного сеанса, а затем обнаружение точно таких же окон в том же состоянии при повторном входе в систему. Чтобы это работало, программа диспетчера сеансов сохраняет имена приложений, запущенных при выходе из системы, и запускает их снова при входе в систему. Более того, чтобы состояние приложений также было восстановлено (что необходимо для восстановления содержимого окон), приложения должны иметь возможность сохранять свое состояние выполнения по запросу от диспетчера сеансов и загружать его обратно при повторном запуске.

Как правило, сеанс можно сохранить или загрузить в любое время, даже если пользователь не входит в систему или не выходит из нее. Также возможно сохранить несколько разных сессий и загрузить одну из них по выбору пользователя. Сеансы также можно указать, предоставив список приложений, составляющих сеанс. В результате пользователь имеет возможность сохранять набор различных сеансов, либо сохраняя состояние выполнения запущенных в данный момент приложений, либо явно перечисляя приложения, составляющие сеанс. Таким образом, пользователь может позже решить загрузить данный сеанс.

Протокол XSMP

Для того, чтобы сеанс включал состояние приложения, приложение должно иметь возможность сохранять и загружать свое текущее состояние, когда это необходимо. Протокол под названием X Session Management Protocol (XSMP) определяет, как взаимодействуют приложения и менеджеры сеансов. Формат сообщения XSMP такой же, как формат сообщения интерактивного установления соединения (ICE). Особое значение имеет то, что диспетчер окон может взаимодействовать с диспетчером сеансов, поскольку диспетчер окон отвечает за размещение окон и наличие значков. Приложения, которые не могут сохранять свое состояние, могут быть включены в сеанс, но они не сохраняют свое состояние между сеансами.

Система X Window включает в себя диспетчер сеансов по умолчанию, называемый xsm . Другие менеджеры сеансов были разработаны для конкретных настольных систем: например, ksmserver это менеджер сеансов по умолчанию для KDE .

Протокол

XSMP — это подпротокол межклиентского протокола обмена . Клиент запускает протокол, подключившись к диспетчеру сеансов. Расположение диспетчера сеансов в сети зависит от системы: в системе POSIX среда содержит переменную SESSION_MANAGER . Следовательно, когда клиент запускается, его среда должна содержать эту переменную с соответствующим значением.

Идентификаторы

В протоколе учтены два факта:

  1. для правильного перезапуска сеанса необходимо перезапустить не только запущенные в нем приложения, но и перезапустить их таким образом, чтобы они восстановили свое предыдущее состояние;
  2. одно и то же приложение может запускаться более одного раза в одном или другом сеансе.

Различные экземпляры одного и того же приложения могут быть активны одновременно в одном и том же или в разных сеансах, и эти экземпляры, скорее всего, имеют разные состояния выполнения. Например, пользователь мог запустить текстовый редактор в файле /etc/passwd , затем в файле letter.txt в том же сеансе, а затем в файле todo.txt в другом сеансе.

Для правильного восстановления сеансов диспетчер сеансов должен распознавать разные экземпляры одного и того же приложения как разные. По этой причине диспетчер сеанса выбирает уникальный идентификатор для каждого экземпляра каждого приложения. Таким образом, менеджер сеанса может различать текстовый редактор, который работает, /etc/passwd и текстовый редактор, который работает todo.txt , даже если они являются двумя экземплярами одной и той же программы.

Идентификаторы должны быть уникальными. В частности, они должны быть уникальными для всех сеансов, управляемых менеджером сеансов: идентификатор работающего текстового редактора /etc/passwd отличается не только от того же самого текстового редактора, letter.txt но и от текстового редактора, работающего todo.txt в другом сеансе. Идентификатор клиента остается неизменным даже после завершения и перезапуска сеанса.

Основные части протокола

Основными частями протокола управления сеансом являются:

  1. менеджер сеанса выбирает уникальный идентификатор для каждого клиента
  2. менеджер сеанса просит клиентов сохранить свое состояние
  3. клиент указывает, как он должен быть запущен снова, чтобы состояние было восстановлено (например, командная строка, которая будет использоваться для запуска процесса)

Последний пункт возможен, потому что менеджер сеанса поддерживает набор свойств для каждого клиента (в терминологии X Window System свойство — это просто контейнер для данных). Эти данные могут быть изменены клиентом в любое время. Одно из этих свойств названо RestartCommand и содержит информацию о том, как снова запустить клиент.

Когда диспетчер сеанса запрашивает у клиента сохранение своего состояния, приложение действует следующим образом:

  1. он сохраняет свое состояние таким образом, чтобы можно было различать состояния двух разных экземпляров; это можно получить, например, сохранив состояние в файле, имя которого содержит его идентификатор
  2. он хранит в свойстве спецификацию того, как он должен быть запущен снова RestartCommand ; это свойство должно содержать идентификатор клиента, потому что:
    1. приложение должно сохранять свой идентификатор при повторном запуске
    2. идентификатор нужен для восстановления состояния (например, нужно найти файл, в котором хранится его состояние)

Менеджер сеанса поддерживает и другие свойства RestartCommand . Например, свойство определяет, как запустить приложение, если сеанс разрушен.

Локальное и глобальное состояние

При запросе клиента на сохранение своего состояния оконный менеджер может указать, должно ли быть сохранено локальное или глобальное состояние (или оба). Разница в том, должен ли результат сохранения быть видимым для других приложений или нет.

В случае текстового редактора сохранение глобального состояния означает обычное сохранение файла, чтобы другие приложения могли использовать новую версию файла. Сохранение локального состояния означает, что необходимо сохранить локальную копию файла, чтобы другие приложения могли видеть файл в его исходной версии.

Пример

Ниже приведены основные этапы взаимодействия диспетчера сеанса с гипотетическим текстовым редактором, xyz когда это приложение запускается впервые в сеансе, затем пользователь выходит из системы, а затем снова входит:

  1. приложение подключается к диспетчеру сеансов по протоколу межклиентского обмена
  2. приложение сообщает диспетчеру сеанса, что это первый запуск, и, следовательно, у него нет предыдущего идентификатора (и, следовательно, нет предыдущего состояния)
  3. менеджер сеанса отвечает, посылая клиенту его уникальный идентификатор, скажем 4324 ;
  4. менеджер сеанса немедленно просит клиента сохранить свое локальное состояние (только потому, что клиент был запущен впервые)
  5. клиент сохраняет командную строку xyz -sid 4324 как свойство RestartCommand в диспетчере сеансов (это также зависит от системы: в системе POSIX это свойство фактически содержит массив argv )
  6. клиент хранит свое состояние локально; например, он может хранить имя редактируемого файла и всю другую информацию (например, текущую строку) в локальном файле .temp-4324
  7. когда пользователь выходит из системы, менеджер сеанса отправляет сообщение всем клиентам, уведомляющее, что они должны сохранить свое состояние
  8. клиент 4324 снова подчиняется
  9. когда все клиенты сообщили диспетчеру сеансов, что их состояние сохранено, диспетчер сеансов завершает сеанс

Когда клиенту говорят сохранить свое состояние, у него может быть возможность иметь ограниченное взаимодействие с пользователем или нет (например, спрашивать пользователя, следует ли сохранить отредактированный файл). В любом случае состояние сохраняется, он сообщает об этом диспетчеру сеанса, отправляя соответствующее сообщение).

При повторном запуске сеанса происходит следующее:

  1. менеджер сеанса перезапускает клиента 4324 , выполняя то, что хранится в свойстве, RestartCommand связанном с клиентом 4324
  2. поэтому приложение запускается как xyz -sid 4324 ; таким образом приложение знает свой идентификатор
  3. приложение извлекает информацию о состоянии из файла .temp-4324
  4. приложение подключается к диспетчеру сеансов, указывая идентификатор 4324 , так что диспетчер сеанса знает, что это не новый клиент, а перезапускается старый

Сеансы управления клиентами

Согласно протоколу XSMP, диспетчер сеанса — это произвольная программа, которая запускает и контролирует состояние других приложений. В результате клиент сам может быть менеджером сеанса других клиентов. Например, почтовый клиент может запускать текстовый редактор для написания электронного письма и вести себя как менеджер сеанса по отношению к редактору. Таким образом, если почтовый клиент будет закрыт, а затем перезапущен, он сможет восстановить состояние текстового редактора.

История

Для GNOME менеджер сеансов GNOME заменил XSMP интерфейсом D-Bus в версии 2.24. Однако это далеко не полная функция, и она не используется приложениями, отличными от GNOME.

Читайте также:  Как запустить линукс с диска не устанавливая
Оцените статью