1. Главная страница » Компьютеры » At spi d bus bus что это

At spi d bus bus что это

Автор: | 16.12.2019

Если вы достаточно давно пользуетесь операционной системой Linux, то, наверное, уже не раз слышали о сервисе DBus. Он фигурирует в различных логах программ, инструкциях по настройке системы, а также вы можете видеть сервис DBus-daemon, который непонятно зачем загружается при старте системы.

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

Что такое Dbus?

Dbus или Desktop Bus — это система, которая используется в основном в операционной системе Linux для того, чтобы различные приложения и сервисы могли общаться между собой. Но с помощью Dbus могут взаимодействовать не только приложения, но и пользователи с приложениями.

По сути, DBus состоит из управляющего демона, API для языков программирования, с помощью которых приложения могут взаимодействовать с системой и консольного клиента.

Каждое приложение, которое хочет работать с DBus, должно зарегистрировать свой сервис в демоне DBus. Поскольку все приложения и сервисы могут беспрепятственно обмениваться сообщениями, этот способ еще называется шина DBus. На шине каждое приложение имеет свой адрес, а каждое приложение имеет своего отправителя и адресата. Приложение может обмениваться сообщениями даже не с одним, а несколькими приложениями одновременно. Каждое приложение может отправлять сообщения и прослушивать входящие.

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

Обычно Dbus создает две шины или области, в которых программы могут обмениваться сообщениями. Это системная шина — для системных сервисов. Ее главная задача — доставка сообщений об изменении состояния оборудования. Вторая шина сессионная, создается отдельно для каждого пользователя и позволяет приложениям, запущенным от его имени взаимодействовать между собой.

Объекты Dbus

Каждое приложение, которое использует Dbus, регистрирует свой объект, а также может регистрировать несколько интерфейсов. Когда объекту отправляется сообщение, его получает и приложение. У каждого объекта уникальное имя. Оно похоже на путь в файловой системе. Чтобы имя каждого объекта было уникальным в нем используется префикс разработчика, например, /org/kde или /com/redhat.

Путь объекта DBus состоит из трех частей:

Несколько примеров объектов:

  • org.freedesktop.NetworkManager
  • org.freedesktop.UDisks
  • org.freedesktop.DisplayManager
  • org.kde.plasmashell

Части имени объектов разделены точкой. Каждый объект имеет один или несколько интерфейсов, которым можно отправлять сообщения.

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

  • /org/mpris/MediaPlayer2/Player (org.mpris.MediaPlayer2.VLC)
  • /org/PluseAudio/ServerLookup1 (org.PluseAudio1)

Сообщения Dbus

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

Доступные объекты Dbus

Большинство доступных объектов Dbus описаны на сайте freedesktop.org. Но лучший способ узнать какие сервисы поддерживает система — это воспользоваться программой qdbusviewer. В окружении рабочего стола kde она поставляется по умолчанию, в Gnome и других ее можно установить из пакета qttools5-dev-tools:

sudo apt install qttools5-dev-tools

Запустив программу через главное меню вы увидите вот такое главное окно:

Здесь вы можете увидеть на левой панели список доступных объектов, на правой — пути к интерфейсу внутри объекта и методы. Внизу консоль, в которую выводится информация об успешности ваших действий.

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

Как использовать Dbus?

Обращаться к сервисам Dbus можно с помощью консольной утилиты dbus-send. Рассмотрим ее синтаксис:

$ dbus-send опции —dest адрес_объекта интерфейс метод параметры

  • опции — настраивают общее поведение утилиты;
  • адрес_объекта — объект, которому мы собираемся отправлять сообщение;
  • интерфейс — интерфейс объекта, который получит сообщение;
  • метод — метод интерфейса, который будет вызван, или сигнал;
  • параметры — дополнительные параметры, если они нужны.
Читайте также:  Asus eee pc t101mt характеристики

Рассмотрим опции утилиты:

  • —system — использовать системную шину для отправки сообщений;
  • —session — использовать сессионную шину;
  • —dest — объект, которому будет отправлено сообщение;
  • —print-reply — напечатать ответ;
  • —reply-timeout — таймаут ожидания ответа;
  • —type — тип сообщения, может быть signal, method_call, error, method_result.

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

Вы уже знаете, как и где искать нужные вам интерфейсы, а теперь рассмотрим пару примеров отправки сообщений Dbus.

Получаем список сетевых адаптеров NetworkManager:

dbus-send —system —print-reply —reply-timeout=120000 —type=method_call —dest=’org.freedesktop.NetworkManager’ ‘/org/freedesktop/NetworkManager’ org.freedesktop.NetworkManager.GetDevices

Что здесь происходит? Мы сообщаем программе, что хотим видеть ответ, тип сообщения — вызов метода, объект org.freedesktop.NetworkManager, интерфейс /org/freedesktop/NetworkManager, и метод org.freedesktop.NetworkManager.GetDevices

Включим музыку в плеере VLC:

dbus-send —print-reply —dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play

Поставим на паузу:

dbus-send —print-reply —dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause

Здесь org.mpris.MediaPlayer2.vlc — объект, интерфейс — /org/mpris/MediaPlayer2, метод — org.mpris.MediaPlayer2.Player.Pause

Методы могут получать параметры, например, перемотаем наш трек на несколько секунд:

dbus-send —print-reply —dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek int64:10000000

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

Кроме методов, здесь есть переменные. Понять с чем мы имеем дело, методом или переменной можно тоже с помощью qdbusviewer. Для методов будет написано method, для переменных property. Но посмотреть значение переменной не так просто, для этого используется такая конструкция:

dbus-send —print-reply —dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Volume

Вместо того чтобы обратиться напрямую к переменной интерфейса, мы используем метод org.freedesktop.DBus.Properties.Get объекта /org/mpris/MediaPlayer2 и передаем ему две строки. Имя интерфейса и имя переменной. Данный пример показывает, как посмотреть текущую громкость VLC.

Установить значение переменной еще сложнее. Для этого используется метод org.freedesktop.DBus.Properties.Set:

dbus-send —print-reply —dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Set string:org.mpris.MediaPlayer2.Player string:Volume variant:double:1.1

Пример изменяет громкость воспроизведения VLC. Этот метод принимает уже три параметра две уже знакомые нам строки и новое значение переменной. Значение переменной имеет тип variant и ему нужно задать нужный тип переменной, в нашем случае нужна double. Посмотреть какой тип переменной нужен вам можно в qdbusviewer, кликните по переменной правой кнопкой мыши и нажмите Set Value. Здесь кроме поля ввода значения вы увидите нужный тип переменной.

Выводы

Теперь вы знаете не только что такое Dbus, но и все необходимые основы, чтобы использование Dbus было для вас достаточно простым в вашей системе и вы могли применять его на полную для управления своими программами. Нашли интересную команду Dbus, которая будет полезна другим пользователям? Напишите в комментариях!

The future is now, GNOME Shell is here

Manage the startup applications

After the login in GNOME 3 a lot of applications will be automatically started in order to execute many invisible tasks like to notify you of incoming alarms in the calendar or to unlock your keyring containing your saved and encrypted passwords.

There’s a tool in GNOME 3 which allows to add, modify and remove the autostart entries and you can run it by executing from a terminal or from the ALT+F2 dialog the command:

The list will show many of the commands that will be automatically executed after a successfull login.

You can add further commands to execute at user login by simply clicking the Add button and compile the fields. Name is the first line in the preferences dialog, while Comment is the second line with an additional and longer description. The Command field will contain the command to execute automatically at the start up.

The Browse… button will allow to explore the disk content and search for an exact file. If the command requires some arguments they can be added after the name of the command.

While none of the listed command in the preferences dialog is strictly vital for the life of a GNOME session, a couple of them are really wanted while others are potentially unwanted.

Here are listed the most common entries with a brief description of their work to let you decide if it’s an application you want to maintain in your autostart process:

  • AT SPI D-Bus Bus
    AT SPI stands for Assistive Technology Service Provider Interface, a framework to integrate accessibility functions in applications. This command will create a new DBus for AT SPI specific functions.
    Command: /usr/lib/at-spi2-core/at-spi-bus-launcher – -launch-immediately
    Status: unwanted until you need the accessibility features.
    Reference: https://www.linuxfoundation.org/
  • AT SPI Registry
    The AT SPI Registry is used by applications to interact with assistive technologies and peripherals.
    Command: /usr/lib/at-spi/at-spi-registryd
    Status: unwanted until you need the accessibility features.
    Reference: http://www.linuxfromscratch.org/blfs/view/svn/gnome/at-spi.html
  • Bluetooth Manager
    A GNOME classic applet for the GNOME panel to provide access to bluetooth devices configuration.
    Command: bluetooth-applet
    Status: unwanted until you use GNOME fallback session and you make use of the Bluetooth technology. Unneeded for GNOME Shell users.
  • Certificate and Key Storage
    A GNOME Keyring agent which will provide access to your encryption certificates for applications.
    Command: /usr/bin/gnome-keyring-daemon – -start – -components=pkcs11
    Status: unwanted if you don’t use encryption certificates.
  • Disk Notifications
    The Disk Utility notification is used to report disk failures using the SMART predictive technology.
    Command: /usr/lib/gnome-disk-utility/gdu-notification-daemon
    Status: recommended if your disks support the SMART, to discover incoming damages.
  • Evolution Alarm Notify
    Alarm notifier for Evolution incoming events and appointments.
    Command: /usr/lib/evolution/3.0/evolution-alarm-notify
    Status: unwanted if you don’t use the Evolution calendar alarms.
  • Files
    The nautilus file manager for desktop icons.
    Command: nautilus -n
    Status: unwanted until you choose to enable the desktop with its icons.
  • GNOME Login Sound
    Play a sound from the sound theme after the login to welcome the user. This is broken since years, I’ve checked in Fedora, Ubuntu, Debian and Arch Linux, don’t know why but every default sound theme seems to miss the required file.
    Command: /usr/bin/canberra-gtk-play – — > Status: unwanted until you fix the default theme and wish to hear a welcome sound.
  • GNOME Settings Daemon
    A daemon which grants access to all the GNOME system preferences.
    Command: /usr/bin/gnome-settings-daemon
    Status: recommended for everyone.
  • GPG Password Agent
    A GNOME Keyring agent which will loads your GPG keys and allow you to insert the passphrases in a graphical window when a GPG key is required during signing.
    Command: gnome-keyring-daemon – -start – -components=gpg
    Status: unwanted if you don’t use GPG keys to sign or encrypt data.
  • GSettings Data Conversion
    A conversion tool from GConf to GSettings, used to convert legacy settings into the new settings format used by GNOME 3.
    Command: gsettings-data-convert
    Status: wanted to migrate old schema configuration, its execution is really fast and light so that there’s no reason to disable it.
  • Orca Screen Reader
    The Screen reader for people with reading and sight difficulties.
    Command: orca – -no-setup – -disable main-window – -disable splash-window – -disable magnifier – -enable speech – -enable braille
    Status: unwanted until you need accessibility features for speech or braille.
  • PolicyKit Authentication Agent
    An authentication agent which will require you user or administration password when applications need to check the user privileges. This doesn’t apply to sudo/su/gksu requests.
    Command: /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
    Status: recommended for everyone.
  • Power Manager
    A GNOME daemon that communicates with the hardware for proper power management, stand by, suspend and reduce power consumption by underclocking the CPU.
    Command: gnome-power-manager
    Status: recommended for everyone.
    Reference: http://projects.gnome.org/gnome-power-manager/
  • Print Queue Applet
    A print job manager for CUPS to allow the user to be notified of printing and about new plugged printers to install.
    Command: system-config-printer-applet
    Status: wanted if you use any printers.
  • PulseAudio Sound System
    The PulseAudio system offers a sound server for multiple sound sources and communicates with the underlying audio architecture (the most common in GNU/Linux are ALSA and OSS) to mix multiple audio with multiple audio cards and manage volume for each application.
    Command: start-pulseaudio-x11
    Status: recommended for everyone until you have not a sound card working.
  • PulseAudio Sound System KDE Routing
    The PulseAudio starter for KDE. GNOME users don’t require this at all.
    Command: start-pulseaudio-kde
    Status: unwanted for every GNOME users.
  • Remote Desktop
    The Vino server is a VNC server for incoming connections to the desktop, allowing others users to connect, view and operate in the desktop. This requires the Vino server was enabled in system preferences.
    Command: /usr/lib/vino/vino-server
    Status: unwanted until you’re absolutely sure what are doing.
  • Screensaver
    The screen saver relies on this component to start automatically after the desired time indicated in the system preferences. This also will lock the screen when the computer is left alone for some minutes.
    Command: gnome-screensaver
    Status: recommended for everyone until you use another screen saver application.
  • Secret Storage Service
    The GNOME Keyring components that contains the personal saved passwords for various applications (Evolution, WiFi) will be unlocked to grant the applications the right to read their saved passwords.
    Command: /usr/bin/gnome-keyring-daemon – -start – -components=secrets
    Status: generally wanted if you save passwords into applications.
  • SSH Key Agent
    A GNOME Keyring agent for SSH which will load your SSH keys from
Читайте также:  Adobe premiere создание проекта

/.ssh in order to grant applications access to your SSH keys.
Command: /usr/bin/gnome-keyring-daemon – -start – -components=ssh
Status: unwanted if you don’t use SSH keys.
Reference: https://live.gnome.org/GnomeKeyring/Ssh

  • Volume Control
    A GNOME classic applet for GNOME panel to let the user to arrange the volume of the audio.
    Command: gnome-sound-applet
    Status: unwanted until you use GNOME fallback session. Unneeded for GNOME Shell users.
  • Someone could ask why some items have icons while others don’t. Every entry in the preferences dialog is a desktop shortcut you can edit by hand with a a text editor.

    System-wide shortcuts can be found in /etc/xdg/autostart and in /usr/share/gnome/autostart but the preferences dialog will create local copies in your user profile when you edit a shortcut by disabling it or editing its name, command or description. You generally don’t need to edit the system-wide shortcuts but you can make modifications at your private copies.

    User shortcuts can be found in $XDG_CONFIG_HOME/autostart. If the XDG_CONFIG_HOME variable is not set then it defaults to

    The Startup Applications Preferences dialog allows only a minimal shortcut customization but many conditions can be applied to each shortcut file. Please take a look at the system wide shortcuts which contain a lot of extra information about localized names, descriptions, icons and startup and visibility conditions.

    Данная заметка посвящена решению проблемы с зависшим процессом at-spi-bus-launcher. Вы можете столкнуться с этой ошибкой, например, при выключении компьютера, когда вместо того, чтобы выключиться, компьютер замрёт и выведет на экран окно с собщением:

    Пакет at-spi отвечает за Специальные возможности – содействие в использовании компьютером слепым людям или с плохим зрением. Этот пакет запускает чтение с экрана и аналогичную помощь. Для многих из нас обычно эта функция не востребована, поэтому по умолчанию она отключена. Т.е. эта служба вообще не должна запускаться. Если, тем не менее, в видите эту ошибку, то перейдите в Настройка — > Специальные возможности и отключите включенные пункты.

    Читайте также:  Epu power saving mode что это

    Если это не помогло, либо если пункты и так уже отключены, то проблема может быть связана с тем, что загрузчик данной службы срабатывает неверно из-за отсутствующих пакетов, как видно на скриншоте, нам рекомендуют установить пакет gnome-orca:

    Действительно, после его установки указанная проблема исчезла. В Arch Linux / BlackArch этот пакет называется orca, в производных Debian этот пакет теперь также называется orca, но для совместимости оставлен переходной пакет gnome-orca.

    В Debian, Ubuntu, Linux Mint, Kali Linux для установки данного пакета выполните:

    В Arch Linux / BlackArch команда для установки:

    Зато появилась новая:

    Если установка пакета orca вам не помогла или у вас появилась новая ошибка, либо если вы не хотите устанавливать не нужные вам пакеты, то имеются варианты, связанные с отключением запуска службы. Этого можно добиться выполнив команды (для Ubuntu и других производных Debian):

    Для Arch Linux/BlackArch

    Суть в том, что мы переименовываем исполнимые файлы и они больше не запускают эту службу. Если эти команды выдают у вас ошибку "Файл не найден", то найдите эти файлы с помощью команд

    Либо вы можете удалить пакеты данной службы:

    В Debian, Ubuntu, Linux Mint, Kali Linux этот пакет называется at-spi2-core.

    В Arch Linux / BlackArch эти пакеты называются at-spi2-core и at-spi2-atk.

    Заключение

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *