Автозагрузка в ubuntu

Содержание:

Автозагрузка проложений

Как мы уже поняли в каталогах /etc/rc.d/* лежат символьные ссылки на скрипты. Где цифры от это уровень загрузки у inittab или systemd. Мы можем менять руками порядок запуска, убирать и добавлять. По сути systemd пробежится по всем файлам и попытается их инициализировать при старте системы. Теперь разберем управление через команды: chkconfig — нужна для просмотра сервисов(программ). Поддерживает режим изменения для любого уровня загрузки.

update-rc.d — служит для запуска/остановки скриптов, при старте/выключении системы. Собственно через нее мы и будем менять автозапуск графической оболочки KDE(kdm). Так уж получилось, что у меня запуск окружения KDE включен для 2-5 уровней по умолчанию.

При старте системы я отключаю 2-4 уровень загрузки и проверяю что у меня стоит 3-й уровень загрузки

Перезагружаюсь и вижу приглашение консоли tty. profit

На самом деле, это чуть больше чем консоль. Мы можем переключаться между вкладками. CTRL+ALT+(F1-F6)

команда startx запустит графику KDE.

Вывод: Тут должен быть вывод, но вместо него я вставлю кота

Всем спасибо, кто дочитал.

Список используемой литературы:

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

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

В этой статье мы рассмотрим как работает автозагрузка Linux, как добавить программы автозагрузки, куда их будет более правильно добавить, а также какие виды автозагрузки бывают в этой операционной системы.

Отсрочка автозапуска программ в Ubuntu

Если программ в автозагрузке Убунту очень много, их необходимо подгружать в определенном порядке или запускать спустя какое-то время после загрузки системы — поможет функция отсрочки. Для ее активации используется unix-утилита sleep. Воспользоваться возможностями этого инструмента можно в уже знакомой программе «Автоматически запускаемые приложения». Для этого нужно:

  1. Открыть окно параметров запускаемых приложений.
  2. Выделить курсором программу, автозапуск которой необходимо отсрочить, и воспользоваться кнопкой «Изменить».
  3. В строке «Команда» перед имеющеюся записью внести:

где цифра после слова «спать» равна количеству секунд, которое приложение бездействует сразу после старта системы, перед тем как запуститься. Между данной формулой, в конце которой обязательна точка с запятой, и командой на запуск приложения, должен быть пробел.

В приведенном примере отложенной автозагрузки программ в Ubuntu приложение остается в состоянии «сна» 2 минуты, прежде чем открыться. Например, запуск через полчаса после старта ОС будет выглядеть как sleep 3h «имя программы». Пример, в котором Transmission запускается через 1 час:

Аналогичным образом можно добавить в автозагрузку в Linux отсроченное выполнение пользовательского скрипта или запуск медиафайла.

АВТОЗАГРУЗКА В UBUNTU

Первым делом нужно сказать, что в Ubuntu существует несколько уровней автозагрузки. Я не буду говорить здесь про systemd и , так как уже рассматривал это в одной из первых статей. Программу или скрипт можно добавить в автозагрузку такими путями:

  • Утилита «Автоматически запускаемые приложения»;
  • Папка «Автозапуск»;
  • Файл rc.local;
  • Файл Xinitrc;

Мы рассмотрим первые два способа, поскольку два последние более рассчитаны на скрипты, а не программы. Сначала автозагрузка в Ubuntu с помощью стандартной утилиты.

Откройте меню системы и наберите «Авто»
и откройте программу, которая будет первой в списке, Автоматически запускаемые приложения:

Здесь будут перечислены все приложения, которые сейчас запускаются автоматически. Чтобы добавить в автозагрузку ubuntu еще одно приложение, нажмите кнопку «Добавить»
:

Здесь нужно ввести имя нового пункта, а также команду запуска приложения. Вы можете выбрать приложение в файловой системе, если не помните путь, нажав кнопку «Обзор»
:

В команде можно указывать параметры, если это нужно. Еще можно заполнить поле «Описание»
, но это уже необязательно. Если вам нужна определенная программа из главного меню, но вы не знаете где ее найти и как пишется ее команда, можно посмотреть ее в том же меню. Но для этого нам нужно сначала установить утилиту «Главное меню»
из центра приложений:

Здесь вам нужно обратить внимание на строку «Команда»
, скопируйте ее и можете использовать для автозагрузки

Следующий способ — это папка автозагрузки. Она находится по адресу ~/.config/autostart. По сути, это тот же самый способ, только он может выполняться без графического интерфейса. Когда вы настраиваете автозагрузку через приложение, то в этой папке создаются файлы настроек с именем desktop. Вот, например:

Напоминаю, что для того, чтобы посмотреть скрытые файлы нужно нажать сочетание клавиш Ctrl+H. Теперь попытаемся создать новый конфигурационный файл для еще одной программы. Вот таким будет его синтаксис:

Type
=
Application

Name
=
имя_нового_пункта

Exec
=
команда

Icon
=
полный_путь_к_иконке

Comment
=
комментарий

X-GNOME-Autostart-enabled
=
true

Для примера, сделаем файл для запуска плеера VLC, он будет выглядеть вот так:

vi ~/.config/autostart/vlc.desktop

Type=Application
Name=VLC
Exec=vlc
Icon=/usr/share/icons/hicolor/16×16/apps/vlc.png
Comment=VLC Media Player
X-GNOME-Autostart-enabled=true

Готово, и самое интересное, что если вы откроете приложение автозагрузки. То там тоже появится этот пункт. Это такой способ настройки без графического интерфейса.

Debian/Ubuntu

update-rc.d

Вывести список сервисов и их состояние

# service --status-all
   acpid
   anacron
   atd
   avahi-daemon
   bootlogs
   bootmisc.sh
   checkfs.sh
   checkroot-bootclean.sh
   checkroot.sh
   console-setup
   cron
   dbus
   exim4
   hdparm
   hostname.sh
   hwclock.sh
   kbd
   keyboard-setup
   keymap.sh
   killprocs
   kmod
   motd
   mountall-bootclean.sh
   mountall.sh
   mountdevsubfs.sh
   mountkernfs.sh
   mountnfs-bootclean.sh
   mountnfs.sh
   mtab.sh
   mysql
   networking
   nginx
   php5-fpm
   procps
   rc.local
   rmnologin
   rsync
   rsyslog
   sendsigs
   ssh
   sudo
   udev
   udev-mtab
   umountfs
   umountnfs.sh
   umountroot
   urandom

— сервис работает в настоящее время

— сервис в настоящее время не работает

— вывод статуса для сервиса не предусмотрен

Перевод man доступен здесь

Добавить apache2 в автозагрузку

# update-rc.d apache2 defaults
update-rc.d: using dependency based boot sequencing

Удалить apache2 из автозагрузки

# update-rc.d -f apache2 remove
update-rc.d: using dependency based boot sequencing

Чуть подробнее.

В Linux у нас определенное количество уровней выполнения (runlevel)

К примеру MySQL и Apache у нас загружаются на 3 уровне.

И скорее всего вы хотите, чтобы MySQL стартовал перед Apache, а при перезагрузке сначала должен быть остановлен Apache, а потом MySQL.

Для этого нам нужно установить start (S) и kill (K) приоритеты.

Для MySQL нужно поставить приоритет на стадии загрузки, а для Apache приоритет на shutdown\reboot’е.

При старте (S), чем меньше значение приоритета, тем раньше сервис будет запущен.
Сервис со start приоритетом равным 10 будет запущен раньше сервиса с приоритетом равным 20.

При остановке (K) всё наоборот. Сервис с большим приоритетом будет остановлен раньше, чем сервис с меньшим приоритетом.

Небольшой пример.

Устанавливаем приоритет start и kill сервису Apache

Синтаксис следующий

update-rc.d apache2 defaults  

Итак, сделаем так, чтобы сначала стартовал MySQL, а потом Apache. А при рестарте сначала останавливался Apache, а потом MySQL.

# update-rc.d apache2 defaults 90 90
# update-rc.d mysql defaults 10 10

Так как start и kill приоритеты в данном случае одинаковые, то можно сократить команды следующим образом

# update-rc.d apache2 defaults 90
# update-rc.d mysql defaults 10

Автозагрузка в системе инициализации

Чаще всего, когда говорится автозагрузка Linux, подразумевается именно автозагрузка сервисов с помощью системы инициализации. В systemd очень продвинутая система управления службами. Здесь поддерживается разрешение зависимостей, параллельный запуск, отсрочка запуска и перезапуск при ошибке. В терминологии Systemd все запускаемые программы представлены файлами юнитов, в каждом юните описаны параметры программы, ее исполняемый файл, а также дополнительные требования к запуску.

Для добавления или удаления служб из автозапуска используется команда systemctl. Чтобы добавить службу в автозапуск выполните:

$ sudo systemctl enable имя_службы

А чтобы отключить ее автозапуск linux:

$ sudo systemctl disable имя_службы

Например, если вы хотите добавить в автозагрузку Apache, то нужно выполнить:

$ sudo systemctl enable apache

Также вы можете проверить добавлена ли уже служба в автозагрузку:

$ sudo systemctl is-enabled httpd

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

Также вы можете посмотреть все сервисы, которые были добавлены в автозагрузку с помощью команды:

$ systemctl list-unit-files | grep enabled

Код программы

Для проекта потребуется 2 скетча:

  1. Reading and displaying the output frequency on the serial monitor
    . In this part you need to write down the frequency values when you place different colors in front of the sensor.
  2. Distinguish between different colors
    . In this section you’ll insert the frequency values picked previously on your code, so that your sensor can distinguish between different colors. We’ll detect red, green and blue colors.

1. Чтение выходной частоты

Загрузите следующий код в плату Arduino.

Откройте монитор серийного порта, скорость порта 9600.

Place a blue object in front of the sensor at different distances. You should save two measurements: when the object is placed far from the sensor and when the object is close to it.

Автозагрузка скриптов в Linux

Раньше было принято размещать все скрипты, которые запускаются по умолчанию в файле /etc/rc.local. Этот файл все еще существует, но это пережиток системы инициализации SysVinit и теперь он сохраняется только для совместимости. Скрипты же нужно загружать только с помощью Systemd.

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

$ sudo vi /lib/systemd/system/runscript.service

Description=My Script Service After=multi-user.target

Type=idle ExecStart=/usr/bin/local/script.sh

WantedBy=multi-user.target

В секции Unit мы даем краткое описание нашему файлу и говорим с помощью опции After, что нужно запускать этот скрипт в многопользовательском режиме (multi-user). Секция Service самая важная, здесь мы указываем тип сервиса — idle, это значит, что нужно просто запустить и забыть, вести наблюдение нет необходимости, а затем в параметре ExecStart указываем полный путь к нашему скрипту.

Осталось выставить правильные права:

$ sudo chmod 644 /lib/systemd/system/runscript.service

Затем обновить конфигурацию и добавить в автозагрузку Linux новый скрипт:

$ sudo systemctl daemon-reload $ sudo systemctl enable myscript.service

После следующей перезагрузки этот скрипт будет запущен автоматически

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

$ sudo chmod u+x /usr/local/bin/script

В параметрах мы передаем утилите адрес файла скрипта. Исполняемость — это обязательный параметр для всех способов.

Enable /etc/rc.local on Systemd

If you type the following command in terminal:

sudo systemctl status rc-local

You may get this output:

● rc-local.service - /etc/rc.local Compatibility
 Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled)
 Active: failed (Result: exit-code) since Thu 2015-11-26 23:54:58 CST; 59s ago
 Process: 1001 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)
Nov 26 23:54:57 vivid rc.local: File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 920, in require
Nov 26 23:54:57 vivid rc.local: needed = self.resolve(parse_requirements(requirements))
Nov 26 23:54:57 vivid rc.local: File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 807, in resolve
Nov 26 23:54:57 vivid rc.local: raise DistributionNotFound(req)
Nov 26 23:54:57 vivid rc.local: pkg_resources.DistributionNotFound: shadowsocks==2.8.2
Nov 26 23:54:58 vivid sudo: pam_unix(sudo:session): session closed for user root
Nov 26 23:54:58 vivid systemd: rc-local.service: control process exited, code=exited status=1
Nov 26 23:54:58 vivid systemd: Failed to start /etc/rc.local Compatibility.
Nov 26 23:54:58 vivid systemd: Unit rc-local.service entered failed state.
Nov 26 23:54:58 vivid systemd: rc-local.service failed.

And if you try to enable /etc/rc.local to run on system boot with the command:

sudo systemctl enable rc-local

You may get:

The unit files have no  section. They are not meant to be enabled
 using systemctl.
 Possible reasons for having this kind of units are:
 1) A unit may be statically enabled by being symlinked from another unit's
 .wants/ or .requires/ directory.
 2) A unit's purpose may be to act as a helper for some other unit which has
 a requirement dependency on it.
 3) A unit may be started when needed via activation (socket, path, timer,
 D-Bus, udev, scripted systemctl call, ...).

Как работает сенсор цвета TCS3200?

The TCS3200 has an array of photodiodes with 4 different filters. A photodiode is simply a semiconductor device that converts light into current. The sensor has:

  • 16 photodiodes with red filter – sensitive to red wavelength
  • 16 photodiodes with green filter – sensitive to green wavelength
  • 16 photodiodes with blue filter – sensitive to blue wavelength
  • 16 photodiodes without filter

If you take a closer look at the TCS3200 chip you can see the different filters.

By selectively choosing the photodiode filter’s readings, you’re able to detect the intensity of the different colors. The sensor has a current-to-frequency converter that converts the photodiodes’ readings into a square wave with a frequency that is proportional to the light intensity of the chosen color. This frequency is then, read by the Arduino – this is shown in the figure below.

The solution

As you can see from above, The unit file have no section. As such Systemd can not enable it. First we need to create a file:

sudo nano /etc/systemd/system/rc-local.service

Then add the following content to it.

 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local


 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99


 WantedBy=multi-user.target

Save and close the file. To save a file in Nano text editor, press , then press Enter to confirm. To exit the file, Press .  Next, run the following command to make sure file is executable.

sudo chmod +x /etc/rc.local

Note: Starting with 16.10, Ubuntu doesn’t ship with file anymore. You can create the file by executing this command.

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local

Then add execute permission to file.

sudo chmod +x /etc/rc.local

After that, enable the service on system boot:

sudo systemctl enable rc-local

Output:

Created symlink from /etc/systemd/system/multi-user.target.wants/rc-local.service to /etc/systemd/system/rc-local.service.

Now start the service and check its status:

sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

Output:

● rc-local.service - /etc/rc.local Compatibility
 Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled)
 Active: active (running) since Fri 2015-11-27 00:32:56 CST; 14min ago
 Process: 879 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 880 (watch)
 CGroup: /system.slice/rc-local.service

Немного более сложный способ

Позволяет задать последовательность загрузки и поведение скрипта при разных runlevel»ах.

Изучаем /etc/init.d/skeleton , на его основе создаем скрипт /etc/init.d/my_script , которым будет запускаться/останавливаться наше приложение.

В этих директориях лежат скрипты остановки сервисов:

/etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/

в этих — скрипты запуска сервисов:

/etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/

Изучаем их на предмет последовательности (чем меньше первая цифра в начале скрипта, тем раньше запускается/останавливается приложение). Это может быть критично, если ваше приложение будет зависит от каких-то сервисов.

После того, как определились со скриптом запуска и очередностью, выполняем следующее:

Sudo update-rc.d my_script start 70 2 3 4 5 . stop 20 0 1 6 .

Здесь я определил, что мой скриптик должен запускаться попозже остальных(70), и останавливаться пораньше(20). Цифры 2 3 4 5 0 1 6 означают уровни загрузки.

Sudo update-rc.d -f my_script remove

Подробности в man update-rc.d .

Выполнение скрипта при включении/отключении сети

Есть директория /etc/network/ с поддиректориями if-down.d , if-pre-up.d , if-post-down.d , if-up.d . Если разместить скрипт в одной из этих поддиректорий, то он будет выполняться соответственно при выключении, перед включением, после выключения или при включении сети.

Другой способ — указать в файле /etc/network/interfaces одну из следующих директив: up , pre-up , post-up , down , pre-down , post-down . Например, строка

Post-up /path/to/script.sh

после включения сети выполнит скрипт script.sh
. Подробнее можно почитать в man interfaces .

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

TCS3200 color sensor – shown in the figure below – uses a TAOS TCS3200 RGB sensor chip to detect color. It also contains four white LEDs that light up the object in front of it.


Спецификация

Спецификация сенсора:

  • Напряжение питания: от 2.7 В до 5.5 В
  • Размеры: 28,4 x 28,4 мм (1.12 x 1.12″)
  • Интерфейс: цифровой, сигнал TTL
  • Высокое разрешение конветирования слабоинтенсивного цветового диапазона
  • Программируемый цвето- и полносканируемая выходная частота
  • Соединяется напрямую к микроконтроллеру

Boot vs. startup

Understanding the Linux boot and startup process is important for configuring Linux and resolving startup issues. In reality, there are two sequences of events that are required to boot a Linux computer and make it usable: boot and startup. The boot sequence starts when the computer is turned on and finishes when the kernel is initialized and is launched. The startup process then takes over and finishes the task of getting the Linux computer into an operational state.

Overall, the Linux boot and startup process is fairly simple to understand. It is comprised of the following steps, which will be described later in more detail:

  1. BIOS Power-On Self-Test (POST)
  2. Boot loader (GRUB2)
  3. Kernel

For a much more detailed description of both the boot and startup sequences, refer to my article, An introduction to the Linux boot and startup processes.

Как работает автозагрузка?

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

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

Рассмотрим основные уровни автозагрузки которые вы можете использовать:

  • Автозагрузка на уровне ядра — вы можете указать любую программу, которая будет запускаться после старта ядра вместо системы инициализации;
  • Автозагрузка системы инициализации — запуск основных системных сервисов, дополнительных сервисов, а также ваших скриптов на этапе инициализации системы;
  • Автозагрузка rc.local — устаревший метод загрузки скриптов, выполняется перед запуском графического окружения;
  • Автозагрузка менеджера входа — вы можете выполнять свои скрипты или команды после запуска менеджера входа, но перед запуском окружения;
  • Автозагрузка X сервера — запуск нужных программ или скрпитов сразу после старта X сервера;
  • Автозагрузка окружения — большинство окружений поддерживают автозагрузку программ, там даже можно настроить отложенный запуск и другие параметры;
  • Автозагрузка bash — самый последний вариант — это автозагрузка на уровне отдельной командной оболочки, вы можете выполнять нужные команды автоматически, как только будет запущен терминал.

Дальше мы рассмотрим более подробно как использовать каждый из пунктов для автозагрузки программ, скриптов или выполнения команд в Linux.

Запуск майнеров и скриптов с правами sudo без ввода пароля

Майнеры и служебные программы для майнинга, как правило, должны запускаться с правами sudo. Для этого при их запуске вручную нужно вводить пароль. Для майнинг-ригов это не очень удобно, так как они должны работать в круглосуточном режиме. Поэтому нужно автоматизировать процесс запуска майнеров, их «обвязки», а также обеспечить автономную безопасную и продуктивную работу майнинг ферм.

Чтобы постоянно не вводить пароль при запуске майнеров и программ разгона с привилегиями sudo, можно отменить запрос пароля для скриптов, в которых содержится эта команда.

Чтобы сконфигурировать систему таким образом, выполняют команду:

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

Проще всего пользователю, который входит в систему, предоставить права владения и разрешения на чтение, запуск и редактирование скрипта запуска/программы для майнинга командами:

sudo chown имя_user:имя_user wolfamdctrl.sh

sudo chmod a=rwx wolfamdctrl.sh

Проверить имеющиеся права у файла можно командой: ls -l выполненной в терминале с папкой, где он находится.

Если нужно запустить скрипт с задержкой, то можно использовать команду:

, где 10 — время задержки в секундах.

Например, для запуска с задержкой в 15 секунд утилиты amdmemtweak можно использовать такой скрипт:

#!/bin/bash
sleep 15
./amdmemtweak --i 0,1,2,3,4 --REF 30

ВЫВОДЫ

А главное, полностью бесплатная операционная система, построенная на ядре Linux . Поэтому всё больше обладателей компьютеров становятся её пользователями. Если в их число попали и вы, то вам стоит, нет, не научиться — учиться там нечему — всего лишь понять и освоить основы управления. Например, как настроить автозапуск приложений и сервисов в Ubuntu.

Автозагрузка в Ubuntu — такой же процесс, как и на других ОС. Вы, должно быть, помните и представляете, как на Windows при включении ПК сразу же запускались Skype , uTorrent и ещё ряд программ. На Убунту есть несколько программ, которые аналогичным образом включаются вместе с компьютером. Их список можно изменить, как вам удобно: удалить лишние или добавить ещё несколько.

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

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