Как остановить bus на linux oel

Обновлено: 01.07.2024

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

Вкратце о D-BUS

Чтобы ты понимал, о чем идет речь, нужно разобраться, как работает D-Bus, и что это вообще такое. Сразу предупреждаю, сейчас будет немного скучно. Но без теории никак. Иначе вместо того, чтобы практически использовать D-Bus, ты ограничишься только трюками из этой статьи.

D-Bus — это система межпроцессного взаимодействия, которая обеспечивает тесную связь десктопных приложений между собой, и связь между десктопными приложениями и системными сервисами. Например, через D-Bus программы могут узнать о наличии/ отсутствии сети у Network Manager'а; твой музыкальный плеер переключится на следующий трек и сообщит IM-клиенту название композиции, причем твои собеседники увидят ее у тебя в статусе; рабочий стол сменит фоновую картинку; все окна с рабочих столов выстроятся в режиме scale; автоматически подмонтируется вставленное USB-устройство (даже если нет прав рута, связка HAL + D-Bus + pmount) и т.д.

Что интересно, D-Bus не зависит от конкретной среды (KDE, GNOME, Xfce…), но при этом прекрасно интегрируется в каждую из них. В основе структуры D-Bus лежит понятие шины. Это специальный механизм, с помощью которого процессы обмениваются данными.

Первая и самая главная — системная шина, создается при запуске демона D-Bus, используется для «общения» различных демонов и практически недоступна для пользовательских приложений. Сессионная шина, наоборот, создается для пользователя, вошедшего в систему — по ней будут «общаться» приложения, с которыми работает пользователь. Для каждой сессионной шины запускается отдельная копия демона.

D-Bus предусматривает собственную концепцию сервисов. Сервис — это уникальное местоположение приложения на шине. При запуске программа регистрирует один или несколько сервисов на шине, которыми она будет владеть, пока не освободит их. До момента освобождения ни одно другое приложение не сможет занять уже занятый сервис.

В D-Bus у каждого объекта свое уникальное имя. Имя объекта напоминает путь в файловой системе, например, org/kde/ kspread/sheets/1/cells/1/1. Обычно путь имеет какую-нибудь смысловую нагрузку. Например, в данном случае мы обращаемся к ячейке 1:1 на первом листе электронной книги KSpread. Но имена могут быть совершенно бессмысленными, например, /com/appl1/c5444sf956a. Тут все зависит от фантазии разработчиков.

На этом скучная часть статьи закончилась, и можно приступать к практике.

D-BUS и скринсейверы

Начнем с самых простых трюков, связанных с D-Bus и скринсейверами. Заблокировать экран можно следующей командой:

$ qdbus org.kde.krunner /ScreenSaver Lock

Иногда напрягает, что хранитель экрана вообще запускается. Ну не нужен он мне. Конечно, в настройках KDE его можно отключить, но раз сегодня мы говорим о D-Bus, то тебе пригодится следующая команда:

$ qdbus org.kde.krunner /ScreenSaver \
SimulateUserActivity

Кстати, в некоторых случаях X-сервер может потушить экран. Чтобы обойти эту «фичу», нужно ввести команду:

$ xset dpms 0 0 0

Вернемся к методу SimulateUserActivity. Метод, как следует из его названия, имитирует активность пользователя. Его нужно вызывать периодически. Но не будешь же ты вводить приведенную выше команду, скажем, каждые 30 секунд? Тогда можно набросать небольшой сценарий:

Сценарию нужно передать командную строку. Да, именно командную строку, тогда скрипт запустит приложение и будет имитировать активность пользователя. Сохрани сценарий как /usr/bin/simulate. После этого установи права доступа и запускай:

$ sudo chmod +x /usr/bin/simulate
$ simulate mplayer film.avi

Действительно, у MPlayer есть параметр '-stopxscreensaver', но у других проигрывателей подобного параметра может и не оказаться.

Трюки с буфером обмена

В Windows я использовал довольно неплохой менеджер закачек — FlashGet. Он активировался, как только в буфере обмена появлялась ссылка. Всплывало окно, где нужно было либо подтвердить закачку, либо отказаться от нее. Сейчас мы попробуем реализовать подобный мониторинг буфера обмена в Linux с помощью D-Bus. Следующая команда выводит содержимое клипборда:

$ qdbus org.kde.klipper /klipper \
getClipboardContents


then
in='qdbus org.kde.klipper /klipper \
getClipboardContents'
wget $in
fi

Управляем проигрывателем AMAROK 2 с помощью D-BUS

Следующие команды аналогичны нажатию кнопок Play, Pause, Next, Prev, Stop, Quit:

$ dbus-send --type=method_call --dest=org.kde.amarok \
/Player org.freedesktop.MediaPlayer.Play
$ dbus-send --type=method_call --dest=org.kde.amarok \
/Player org.freedesktop.MediaPlayer.Pause
.
$ dbus-send --type=method_call --dest=org.kde.amarok \
/ org.freedesktop.MediaPlayer.Quit

Кстати, у Amarok2 есть поддержка Last.FM, но для этого сервиса поддерж иваются только методы Stop и Play. Приведу воркэраунд для пропуска текущей песни:

Вывести всю информацию о текущем треке можно следующим образом:

$ qdbus org.kde.amarok /Player GetMetadata

Еще очень полезный метод GetStatus, возвращающий 4 целых числа:

  • Первое число: 0 — трек воспроизводится, 1 — пауза, 2 — остановлен;
  • Второе число: 0 — последовательное воспроизведение, 1 — случайное воспроизведение;
  • Третье число: 0 — перейти к следующему элементу после воспроизведения текущего, 1 — повторить текущий элемент;
  • Четвертое число: 0 — остановить воспроизведение, как только будет достигнут последний элемент, 1 — продолжить воспроизведение с начала.

Управление проигрывателями VLC и XMMS

Аналогично можно управлять и другим проигрывателем — VLC. Вот действие, аналогичное нажатию на кнопку воспроизведения:

$ dbus-send --print-reply --session --dest=org.mpris.
vlc /Player org.freedesktop.MediaPlayer.Play

Интерфейс org.freedesktop.mediaplayer (MPRIS 1.0 DBUS API)

Все популярные проигрыватели, такие как Amarok, VLC, XMMS, Audacious, BMPx, используют интерфейс MPRIS. Следовательно, можно написать универсальный сценарий управления проигрывателями, в качестве параметра которому передавать название плеера. Берем команду dbus-send и вместо значения параметра '--dest' указываем своего фаворита:

$ dbus-send --type=method_call --dest=проигрыватель \
/Player org.freedesktop.MediaPlayer.Play

Далее все стандартно. Управление проигрывателем осуществляется через интерфейс org.freedesktop.MediaPlayer объекта /Player. А управление списком композиций — через объект /TrackList.

Регулировка громкости

Установить уровень громкости можно с помощью метода VolumeSet:

$ dbus-send --type=method_call --dest=проигрыватель \
/Player org.freedesktop.MediaPlayer.VolumeSet значение

Значение может быть в диапазоне 0…100. 0 — звук выключен, 100 — максимальная громкость. Например:

$ qdbus org.kde.amarok /Player VolumeSet 90

Узнать текущее значение громкости можно методом VolumeGet.

А что дальше? Или метод научного тыка

С помощью D-Bus можно управлять практически любым современным графическим Linux-приложением. Поскольку я не могу читать твои мысли, то не могу предусмотреть все трюки, которые ты хотел бы видеть в этой статье. Поэтому я только расскажу, что нужно для самостоятельного исследования объектов и методов D-Bus. Запусти yakuake (это мой любимый терминал в KDE, запускается при нажатии <F12>) и введи команду:

$ qdbus org.kde.yakuake
/KDebug
/Konsole
/MainApplication
/Sessions
/Sessions/1
/yakuake
/yakuake/MainWindow_1
/yakuake/sessions
/yakuake/tabs
/yakuake/window

В результате ты получишь список объектов сервиса org.kde.yakuake. Если ты знаешь, что такое ООП, то уже догадался, что у каждого объекта есть методы. Просмотреть список методов можно так:

qdbus сервис объект

$ qdbus org.kde.yakuake /yakuake/tabs

Приведенная выше команда выводит методы объекта /yakuake/tabs. Например, метод setTabTitle() позволяет установить заголовок вкладки. Для этого методу нужно передать номер сессии и строку — будущий заголовок. Чтобы узнать номер сессии, посмотрим на список методов объекта /yakuake/sessions:

$ qdbus org.kde.yakuake /yakuake/sessions

Номер (идентификатор) активной сессии возвращается методом activeSessionId(). Чтобы получить номер текущей сессии (под сессией в yakuake подразумевается вкладка), нужно ввести команду:

$ qdbus org.kde.yakuake /yakuake/sessions \
activeSessionId

qdbus сервис объект метод

Напишем сценарий, изменяющий заголовок текущей вкладки:

Этот скрипт можно и усовершенствовать. Например, сделать так, чтобы он принимал текст из командной строки (в качестве первого параметра) и подставлял его в заголовок текущей вкладки:

Заключение

Кобра, мыло и все остальные

Приложения в рамках одной среды рабочего стола должны тесно взаимодействовать между собой. В KDE не так давно для этого использовалась система DCOP (Desktop COmmunication Protocol), которая в настоящее время заменена на D-Bus. Кроме DCOP существовала возможность коммуникации с помощью CORBA, SOAP или XML-RPC. Но CORBA требует много системных ресурсов, а SOAP и XML-RPC предназначены больше для веб-сервисов.

Пакет D-BUS-1.4.16

Знакомимся с пакетом D-BUS

Известно, что пакет правильно собирается и работает на платформе LFS-7.0.

Информация о пакете

Зависимости пакета D-BUS

Обязательные

Необязательные

Xorg Libraries, D-Bus GLib Bindings-0.98 (для запуска тестов) и Doxygen-1.7.2 (для создания документации по API)

Обратите внимание, что скрипт configure похож на скрипт пакета xmlto-0.0.23, но ничего не делает, т.к. документация XML/HTML уже есть в дереве с исходным кодом.

Конфигурирование ядра

Обеспечьте, чтобы следующий параметр был включен в конфигурации ядра, и перекомпилируйте ядро, если это необходимо:

Установка пакета D-BUS

Установите пакет D-BUS с помощью следующих команд (вы, возможно, сначала захотите с помощью команды ./configure --help посмотреть общее описание и добавить к команде configure, представленной ниже, все необходимые параметры):

Инструкции по тестированию приведены ниже.

Теперь в роли пользователя root выполните:

Набор тестов для этого пакета запустить не удастся, если не будет установлен пакет D-Bus GLib Bindings-0.98 . Тесты требуют передачи дополнительных параметров в скрипт configure и обращения к дополнительным функциям двоичных модулей. Такой интерфейс не предназначен для выполнения сборки пакета D-BUS. Если вы хотите запускать тесты для каждого модуля, выполните следующие команды:

Пояснение команд

--libexecdir=/usr/lib/dbus-1.0 : Указывает, что устанавливаться будут только те двоичные файлы, которые используется только пакетом D-BUS, а директорий dbus-1 будет помещен в /usr/lib/dbus-1.0 , а не в /usr/libexec .

--localstatedir=/var : Этот параметр указывает, что файл PID демона, сокет системной шины и файл uuid машины будут созданы в директории /var , а не в директории /usr/var .

--enable-tests : Строит дополнительные пути, используемые при тестировании кода. Конфигурирование заканчивается выдачей замечания, сообщающего об этом.

--disable-static : Предотвращает сборку и установку статических библиотек.

Конфигурирование пакета dbus

Конфигурационные файлы

/etc/dbus-1/session.conf , /etc/dbus-1/system.conf и /etc/dbus-1/system.d/*

Подробнее о конфигурировании

Конфигурационные файлы, указанные выше, по-видимому, менять не нужно. Если изменения необходимы, вы должны создать файл /etc/dbus-1/session-local.conf и/или файл /etc/dbus-1/system-local.conf и внести в них необходимые изменения.

Если в каком-нибудь другом пакете файл .service , используемый D-Bus, устанавливается не в стандартный директорий /usr/share/dbus-1/services , то директорий, куда устанавливается этот файл, нужно добавить в конфигурацию текущей сессии. Например, директорий /usr/local/share/dbus-1/services можно добавить в роли пользователя root с помощью следующих команд:

Загрузочный скрипт

Чтобы в процессе перезагрузки системы автоматически запускать команду dbus-daemon, установите загрузочный скрипт /etc/rc.d/init.d/dbus , имеющийся в пакете blfs-bootscripts-20111226.

Заметим, что это в загрузочном скрипте запускается только общесистемный демон D-BUS. Каждому пользователю, которому требуется доступ к сервисам D-BUS, нужно будет также запустить сессионный демон. Есть много вариантов запуска сессионного демона с помощью команды dbus-launch. Подробности об имеющихся параметрах и возможностях смотрите на странице man команды dbus-launch. Вот некоторые предложения и примеры:

    Добавьте в файл

/.xinitrc строчку с командой dbus-launch в строку файла

/.xsession , вы можете добавить в ваш файл

/.xsession строчку с командой dbus-launch, которая будет запускать графическую среду вашего рабочего стола. Синтаксис аналогичен примеру, приведенному в файле

В этом случае сессионый демон не останавливается, когда вы выходите из командной оболочки, так что вы должны в ваш файл

/.bash_logout добавить следующую строку:

Описание пакета

Установленные программы: dbus-cleanup-sockets, dbus-daemon, dbus-daemon-launch-helper, dbus-launch, dbus-monitor, dbus-send, and dbus-uuidgen

Установленные библиотеки: libdbus-1.

Краткое описание

dbus-cleanup-sockets

используется для очистки директория от остатков сокетов

используется для запуска dbus-daemon из скрипта командной оболочки. Как правило, вызывается из скриптов, регистрирующих вход пользователей в систему

dbus-monitor

dbus-uuidgen

используется для создания или чтения универсального уникального идентификатора

Перевод сделан с варианта оригинала, датированного 2011-12-16 19:54:18 +0000

Используя D-Bus, вы можете персонализировать и автоматизировать ваш десктоп.

Каждая современная Linux среда рабочего стола использует D-Bus, систему, позволяющую программным приложениям общаться друг с другом. Благодаря D-Bus, ваш десктоп может быть настроен точно так, как вы хотите. В этой статье я привожу примеры некоторых возможностей D-Dus. Будьте готовы к модификации вашего десктопа.

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

Обычно, D-Bus создает две шины: привилегированную системную шину и сессионную шину. Системная шина позволяет осуществлять широковещательное взаимодействие между процессами, имеющими необходимые права доступа. Ее главное назначение - доставка событий от HAL (Hardware Abstraction Layer) к процессам, работающим с аппаратными событиями. Таким аппаратным событием может быть обнаружение нового аппаратного устройства, или изменение в очереди печати. Вторая шина - сессионная, создается во время авторизации, и с ее помощью будут общаться приложения, с которыми работает пользователь.

Работа с D-Bus

Итак, как же можно использовать D-Bus в своем собственном приложении? Основной API написан на С довольно низкого уровня. Он не задумывался для использования программистами приложений. Различные языки программирования и среды разработки, такие как GLib, Qt, Python, Ruby, Perl и Mono имеют надстроенные над этим API связующие слои. Я не буду углубляться в С или GLib (основаная библиотека в GNOME), но я приведу несколько примеров, написанных на скриптовых языках Python и Ruby, а так же примеры скриптов командной оболочки.

Какие приложения используют D-Bus?

QDBusViewer, работающий в GNOME

Рисунок 1. QDBusViewer работающий в GNOME

Работая в qdbusviewer, вы видите две вкладки: Сессионная Шина и Системная Шина. В каждой вкладке левая панель показывает список имен сервисов. Если нажать на имя сервиса, то в правой панели появится информация о сервисе, список доступных методов и сигналов. Например, если вы нажмете на сервисе org.freedesktop.PowerManagement , и далее перейдете в правой панели вниз по иерархии - org/freedesktop/PowerManagement/ , то вы пройдете две части пути D-Bus: org.freedesktop.PowerManagement в левой панели является именем сервиса, а org/freedesktop/PowerManagement в правой панели является путем до объекта.

Путь до объекта в правой панели имеет еще одну последнюю часть - три так называемых интерфейса: org.freedesktop.DBus.Introspectable , org.freedesktop.DBus.Properties и org.freedesktop.PowerManagement . Каждый интерфейс реализует какие-то методы и сигналы. Это то, с чем вы можете взаимодействовать. Здесь мы заинтересованы в интерфейсе org.freedesktop.PowerManagement , он реализует действия связанные с управлением питанием. Нажав на него, мы видим список из всех доступных методов и сигналов. Если мы нажмем на метод Suspend, то компьютер заснет, и проснется только после нажатия кнопки питания.

Некоторые методы, такие как Shutdown, Reboot, Hibernate и Suspend, осуществляют действия, а другие методы выдают вам информацию о системе. Например, объект org.freedesktop.PowerManagement реализует такие методы как GetLowBattery, GetOnBattery, CanShutdown, и т.д. Если ваша система (лэптоп) работает от батареи, имеющей достаточный заряд, то нажимая на GetOnBattery, мы получаем "Arguments: true", а при нажатии на GetLowBattery, ответ - "Arguments: false".

Если вы являетесь поклонником командной строки, то вам не нужно запускать qdbusviewer. Приложение qdbus, работающее из командной строки, предоставляет точно такую же информацию. Если вы запустите qdbus в терминале, то увидите список сервисов, доступных на сессионной шине. Если вы запустите его с флагом --system, то увидите сервисы, доступные системной шине. Если вы хотите узнать, какие объекты содержит сервис, запустите, например, следующую команду:

Для того что бы узнать, какие интерфейсы реализованы в объекте /org/freedesktop/PowerManagement , используйте:

Мы получим тот же самый список из методов и интерфейсов, что мы видели в qdbusviewer. Например, строку:

method bool org.freedesktop.PowerManagement.GetOnBattery()

bool означает, что этот метод возвращает булеву величину, со значением true или false. Если метод не возвращает величину, например org.freedesktop.PowerManagement.Suspend() , то вместо bool используется void.

Также qdbus позволяет нам вызывать эти методы напрямую. Например, если мы хотим вызвать метод Suspend, выполняем:

Работаем с D-Bus из командной строки

В оставшейся части статьи мы рассмотрим D-Bus функциональность некоторых популярных приложений, а также напишем скрипты для взаимодействия с этими приложениями и автоматизации ряда задач. Надеюсь, это вдохновит вас на взаимодействие с вашими собственными любимыми приложениями. Я буду использовать разные D-Bus инструменты и скриптовые языки для демонстрации различных способов работы с D-Bus.

Как мы видим, dbus-send вызовы практически идентичны вызовам qdbus. Единственное различие - это необходимость использовать --dest параметр для имени сервиса. Теперь давайте взглянем на что-нибудь новенькое. Если вы смотрите в своем браузере длинное видео на YouTube, то может активизироваться скринсейвер, так как Flash плагин не взаимодействует с остальной системой. С помощью D-Bus мы можем остановить это раздражающее поведение. Вот и волшебная команда:

С помощью этой команды мы вызываем Inhibit метод интерфейса org.gnome.ScreenSaver , с двумя аргументами. Первый аргумент - это имя приложения. Здесь я использую “YouTube”, но это может быть любое имя. Второй аргумент - это причина - остановка скринсейвера. dbus-send ожидает, что каждому аргументу будет предшествовать его тип (string, boolean, int16 и т.д.). В этом примере оба аргумента имеют строковой тип. Также я использую аргумент --print-reply потому, что мне нужно ответить на команду: Inhibit метод возвращает uint32 число, которое работает как куки, идентифицируюя запрос на остановку скринсейвера. Если мы хотим вновь запустить скринсейвер, то мы должны переслать этот куки в качестве аргумента:

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

dbus-monitor так же позволяет вам указать ряд выражений, определяющих за чем вы хотите наблюдать, например:

С помощью этого вы сможете наблюдать за всеми NetworkManager событиями . Я использовал аргумент --system потому, что NetworkManager использует системную шину.

Пишем скрипт для чтения Liferea ленты

Liferea предоставляет скрипт, который делает точно тоже самое, но еще умеет обрабатывать ошибки.

Также, через D-Bus Liferea предоставляет некоторую информацию, которая может оказаться полезной если вы используете альтернативный оконный менеджер, не имеющий области уведомления для Liferea. Вы можете сами сварганить вашу собственную систему оповещения - просто запросите число новых и непрочитанных записей в Liferea и покажите выходные данные:

Без клавиатуры

Если вы хотите выполнить более сложные задания, чем вызов отдельных методов, то вы можете написать скрипт командной оболочки, содержащий dbus-send команды, или используйте язык более высокого уровня, для упрощения задачи. Существуют D-Bus привязки для Python, Ruby и Java языков.

В следующем примере, я реализую скрипт на Python, который меняет ваш статус в Pidgin на “Away from keyboard”, при активизации скринсейвера. Здесь имеются два аспекта D-Bus: скрипт ждет сигнала от скринсейвера, и затем он вызывает метод в Pidgin. Скрипт показан в листинге 1.

Листинг 1. pidgin_screensaver.py

Давайте разберем этот скрипт. Функция pidgin_status_func устанавливает ваш статус в Pidgin. Она получает объект im/pidgin/purple/PurpleObject и интерфейс im.pidgin.purple.PurpleInterface из сессионной шины. Далее, вызывается метод интерфейса. Он создает новый “saved status” тип, после проверки существования типа статус с именем “afk” (“afk” означает “Away From Keyboard”, и 5 - это вид “away” статуса).

Теперь мы должны вызвать эту функцию вместе с активизацией скринсейвера. Поэтому, запускаем dbus.mainloop и соединяемся к сессионной шине. Далее добавляем приемник сигнала, который слушает сигнал ActiveChanged от интерфейса org.gnome.ScreenSaver . Если/когда сигнал срабатывает, он вызывает функцию pidgin_status_func . Так как сигнал ActiveChanged имеет булев аргумент, обозначающий текущее состояние заставки (1 - активная, 0 - не активная), то мы используем только один аргумент (state) в функции pidgin_status_func . Для постоянного прослушивания запускаем бесконечный цикл, работающий пока работает скрипт.

Pidgin имеет очень обширный D-Bus интерфейс; вы можете делать с помощью него практически все. Пусть этот пример послужит вам вдохновением для создания каких-нибудь креативных задач в Pidgin!

Проигрывание с помощью D-Bus

Давайте посмотрим на другой пример, на этот раз на Ruby. Мы создадим скрипт, который будет показывать текущую песню, играющую в Rhythmbox, вместо вашего статуса в Pidgin (Листинг 2).

Листинг 2. pidgin_rhythmbox.rb

Заключение

Теперь, когда вы знаете как выполнять D-Bus запросы и как обрабатывать D-Bus сигналы, вы можете заняться автоматизированием заданий на вашем десктопе. Если вы опытный Linux пользователь, то D-Bus точно должен быть в вашем арсенале.
D-Bus содержит намного больше, чем я могу вам показать в этой статье, но с помощью qdbusviewer, qdbus, dbus-send и dbus-monitor, вы сможете освоить остальные возможности сами. Если вы хотите реализовать более сложные задачи по автоматизации, используя D-Bus, то хорошими помощниками вам могут стать языки Python и Ruby. Рассмотрите учебные пособия, упомянутые в приложении, и далее просто дайте волю своей фантазии.
Если вы разработчик программного обеспечения, то раздел, который мы не рассмотрели здесь, - это регистрация сервиса. Эта другая сторона рассказа о D-Bus. Если вы регистрируете сервис, то с помощью D-Bus вы можете предоставлять объекты для других приложений.

Приложение

Koen Vervloesem - с 2000-х - журналист-фрилансер, пишущий на тему бесплатного программного обеспечения и программного обеспечения с открытым кодом. Он является магистром компьютерных наук и философии, и не может решить, какая из сфер для него более интересна. Пока что он любит думать - "Я программирую, следовательно я существую".

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

Сначала давайте посмотрим, какие службы работают в системе:

Теперь посмотрим на процессы, которые подключаются к портам, это можно сделать с помощью команды netstat:

В показанном выше выводе вы можете найти приложения, которые не требуются вашему серверу, но, тем не менее, работают:

1. smbd и nmbd

smbd и nmbd - это демон Samba Process. Действительно ли вам нужно предоставлять общий доступ к ресурсам для машин, работающих под windows? Если нет, почему эти процессы работают? Вы можете их безопасно завершить и убрать из автозагрузки.

2. Telnet

Нужна ли вам связь по протоколу Telnet (bidirectional interactive text-oriented communication) в интернете или в локальной сети? Если нет, завершайте этот процесс и исключайте его из автозагрузки.

3. rlogin

Требуется вам авторизация на удаленной машине по сети? Если нет, завершаем этот процесс и убираем из автозагрузки.

4. rexec

Remote Process Execution или rexec позволяет вам выполнять команды оболочки на удаленном компьютере. Если вам это не нужно, просто завершите процесс.

5. FTP

Вы передаете файлы через интернет? Если нет, эту службу спокойно можно отключить.

6. automount

Вам нужно автоматически монтировать различные файловые системы, чтобы подключить сетевую файловую систему? Если нет, почему этот процесс работает? Завершите процесс и уберите его из автозагрузки.

7. named

Вам нужен запущенный DNS-сервер? Тогда что мешает вам освободить занимаемые им системные ресурсы. Завершите процесс и уберите его из автозагрузки.

8. lpd

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

9. Inetd

Используете ли вы какие-нибудь службы inetd? Если вы запускаете отдельное приложение, такое как ssh, которое в свою очередь использует другое отдельное приложение, например Mysql, Apache и так далее, то вам не нужен inetd. Лучше отключить его автоматическую загрузку.

10. portmap

Portmap - это Open Network Computing Remote Procedure Call (ONC RPC), использующий демоны rpc.portmap и rpcbind. Если у вас работают эти процессы, значит запущен NFS-сервер. В противном случае ваши системные ресурсы расходуются напрасно.

Как завершить процесс в Linux

Для того, чтобы завершить работающий процесс в Linux, используется команда "Kill PID". Но сначала нам необходимо узнать PID процесса. Например, я хочу узнать PID процесса "cupsd":

Итак, PID процесса cupsd 1511. Для того, чтобы завершить этот процесс, используем команду:

Как отключать службы в Linux

В дистрибутивах на базе Red Hat, таких как Fedora и CentOS для отключения и включения служб используется скрипт "chkconfig".
Например, давайте отключим автозагрузку сервера Apache:

В дистрибутивах на базе Debian, таких как Ubuntu, Linux Mint, для этой цели используется скрипт update-rc.d.
Например, для отключения автозагрузки сервера Apache используется следующая команда:

Опция "-f" здесь используется для того, чтобы скрипт не запрашивал подтверждения выполнения команды.

Читайте также: