Я нахожусь на msi gs40 6qe с i7 6700hq.
Intel HD 530: i915.preliminary_hw_support=1 и черный список nouveau получили xorg для запуска. Протестировано с 4.1.13lts, 4.1.15lts, 4.2.5, 4.3, 4.4.0-rc4-gb9d845, 4.4.0-rc5. Но вот грустная часть: после 5 секунд-2 часа использования ее зависает, иногда я могу убить xorg, которые дают еще немного времени, иногда ноутбуки зависают с ним (ничего не работает, даже переключения tty нет). GTX 970 Я попробовал Optimus и Prime, ничего из этого не работает. Optimus создает черный экран без подсветки, но xorg начинает (у меня есть skype при запуске системы, и я слышал, как это звучит). Prime не читает DRM и не запускается вообще.Также обратите внимание на мою тему на форуме.
Чтобы запустить команду (кратковременно) 1 при запуске с помощью systemd, вы можете использовать блок systemd типа OneShot
. Например, создайте /etc/systemd/system/foo.service
, содержащий:
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Затем запустите:
sudo systemctl daemon-reload
sudo systemctl enable foo.service
По сути, это просто преобразование типичного задания Upstart в systemd (см. Systemd для пользователей Upstart ).
Вы можете запускать несколько команд из одного и того же файла службы, используя несколько строк ExecStart
:
[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure
Команда всегда должна указываться с полным путем. Если какая-либо команда выходит из строя, остальные не запускаются. A -
перед пуском говорит systemd игнорировать ненулевой статус выхода (вместо того, чтобы рассматривать его как сбой).
Релевантно:
Для пользовательских сеансов вы можете создать блок systemd в ~/.config/systemd
. Это должно работать с 16.04 и далее, но не более ранними версиями Ubuntu с systemd (так как они все еще использовали Upstart для пользовательских сеансов). Блоки пользовательских сеансов можно контролировать с помощью тех же команд, что и с системными службами, но с добавленной опцией --user
:
systemctl --user daemon-reload
systemctl --user status foo.service
1 В отличие от долгоживущих демонов.
Существуют различные способы автоматического запуска команд:
Система выскочки выполнит все сценарии, из которых она находит конфигурацию в каталоге /etc/init. Эти сценарии будут запускаться во время запуска системы (или в ответ на определенные события, например, запрос на завершение), а также место для запуска команд, которые не взаимодействуют с пользователем; все серверы запускаются с использованием этого механизма. Вы можете найти читаемое введение на странице http://upstart.ubuntu.com/getting-started.html man-страницы man 5 init и man 8 init, чтобы получить полную информацию. Сценарий оболочки с именем .gnomerc в вашем домашнем каталоге автоматически создается при каждом входе в сеанс GNOME. Вы можете помещать в него произвольные команды; переменные среды, установленные в этом скрипте, будут видны любой программой, которую вы запускаете в своем сеансе. Обратите внимание, что сеанс не запускается до завершения скрипта .gnomerc; поэтому, если вы хотите автозапускать какую-то давно действующую программу, вам нужно добавить & к вызову программы, чтобы отделить ее от рабочей оболочки. Параметр меню «Система» -> «Настройки» -> «Приложения для запуска» позволяет определить, какие приложения следует запускать при запуске графического сеанса (Ubuntu предопределяет некоторые из них) и добавлять или удалять их на свой вкус. Это имеет почти ту же цель и объем сценария .gnomerc, за исключением того, что вам не нужно знать синтаксис sh (но вы также не можете использовать любую конструкцию программирования sh).Чтобы запустить команду (кратковременно) 1 при запуске с помощью systemd, вы можете использовать unitd unit типа OneShot. Например, создайте /etc/systemd/system/foo.service, содержащий:
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Затем запустите:
sudo systemctl daemon-reload
sudo systemctl enable foo.service
По сути, это просто преобразование типичного задания Upstart в системный (см. Systemd for (!).
Вы можете запускать несколько команд из одного и того же файла службы, используя несколько строк ExecStart:
[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure
Команда всегда должна указываться с полным путем. Если какая-либо команда выходит из строя, остальные не запускаются. [[8]]
Релевантно:
Запись в Arch Wiki на systemd man 5 systemd.service Релевантно:Вместо сеансов пользователя вы можете создать блок systemd в ~/.config/systemd. Это должно работать с 16.04 и далее, но не более ранними версиями Ubuntu с systemd (так как они все еще использовали Upstart для пользовательских сеансов). Устройства сеанса пользователя можно управлять с помощью тех же команд, что и с системными службами, но с добавленной опцией --user:
systemctl --user daemon-reload
systemctl --user status foo.service
1 As против долгоживущих демонов.
$HOME/.config/autostart
Это место содержит список приложений для запуска. Здесь может быть добавлен файл .desktop, который будет запущен при запуске. Пример примера для файла .desktop:
Ввод следующего файла .desktop в $HOME/.config/autostart и заданного chmod +x:
[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script
Здесь "</path/to/script>" заменяется на путь к вашему script.sh (обычно рекомендуется для /usr/local/bin так: это может быть выполнено непосредственно командой say myscript заменено на "</path/to/script>").
Пример примера script.sh ]:
#!/bin/bash
<commands to be executed>
exit
Результат: файл .desktop будет запущен из $HOME/.config/autostart, который выполняет скрипт Exec=
Следовательно, вы можете запустите нужный сценарий оболочки при запуске!
Как добавить команду в /etc/rc.local? вам нужно будет использовать sudo-доступ, но для редактирования этого файла.
sudo nano /etc/rc.local
Для простых вещей вы можете добавить команду в System-> Preferences-> Sessions, указывающую на местоположение вашего скрипта.
В качестве альтернативы вы можете добавить его в /etc/init.d/rc.local или выполнить выскочку, если это больше System-> Preferences-> Sessions .
Взгляните на upstart для получения дополнительной информации
Вы должны использовать выскочку для этого. Upstart используется для процессов Ubuntu, которые автоматически запускаются. Это расширенное решение, такое как старые скрипты init.d System-V. Он также позволяет вам установить предварительные условия для начала вашего скрипта (т. Е. Вам нужна работа в сети? И т. Д.)
Один из подходов состоит в том, чтобы добавить задачу @reboot cron:
Запуск crontab -e позволит вам редактировать ваш cron. Добавьте к нему такую строку:@reboot /path/to/script
выполнит этот сценарий после загрузки вашего компьютера. . Этот ответ по-прежнему использует cron, но использует другой метод, чем верхний голосовой ответ. Это работает с Ubuntu 16.04, но, вероятно, поддерживается гораздо раньше. Просто я начал использовать cron для запуска заданий при загрузке компьютера с 16.04.
В комментариях кто-то спросил «когда они бегут?». Вы можете сказать в syslog / journalctl:
$ journalctl -b | grep cron
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)
Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.
Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02
Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[985]: (root) CMD ( /usr/local/bin/cron-reboot-cycle-grub-background)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root
Следует отметить, что cron может отправлять вам по электронной почте статус выполнения заданий и @reboot заданий, поэтому ранний менеджер сети и электронная почта не будут работать если вы не поместили команду sleep в ваш скрипт.
Поместите свои скрипты в каталог /etc/cron.d:
$ ll /etc/cron.d
total 44
drwxr-xr-x 2 root root 4096 Nov 26 19:53 ./
drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../
-rw-r--r-- 1 root root 244 Dec 28 2014 anacron
-rw-r--r-- 1 root root 148 Feb 18 2017 cycle-grub-background
-rw-r--r-- 1 root root 138 Mar 5 2017 display-auto-brightness
-rw-r--r-- 1 root root 460 Nov 26 19:53 nvidia-hdmi-sound
-rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder
-rw-r--r-- 1 root root 224 Nov 19 2016 touch-vmlinuz
-rw-r--r-- 1 root root 700 Aug 5 11:15 turn-off-hyper-threading
Вот несколько сценариев, которые у меня установлены для запуска каждой загрузки:
$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root /usr/local/bin/cron-reboot-cycle-grub-background
$ cat /etc/cron.d/touch-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root touch "/boot/vmlinuz-"`uname -r`
Существуют различные способы автоматического запуска команд:
Система выскочки выполнит все сценарии, из которых она находит конфигурацию в каталоге /etc/init. Эти сценарии будут запускаться во время запуска системы (или в ответ на определенные события, например, запрос на завершение), а также место для запуска команд, которые не взаимодействуют с пользователем; все серверы запускаются с использованием этого механизма. Вы можете найти читаемое введение на странице http://upstart.ubuntu.com/getting-started.html man-страницы man 5 init и man 8 init, чтобы получить полную информацию. Сценарий оболочки с именем .gnomerc в вашем домашнем каталоге автоматически создается при каждом входе в сеанс GNOME. Вы можете помещать в него произвольные команды; переменные среды, установленные в этом скрипте, будут видны любой программой, которую вы запускаете в своем сеансе. Обратите внимание, что сеанс не запускается до завершения скрипта .gnomerc; поэтому, если вы хотите автозапускать какую-то давно действующую программу, вам нужно добавить & к вызову программы, чтобы отделить ее от рабочей оболочки. Параметр меню «Система» -> «Настройки» -> «Приложения для запуска» позволяет определить, какие приложения следует запускать при запуске графического сеанса (Ubuntu предопределяет некоторые из них) и добавлять или удалять их на свой вкус. Это имеет почти ту же цель и объем сценария .gnomerc, за исключением того, что вам не нужно знать синтаксис sh (но вы также не можете использовать любую конструкцию программирования sh).Чтобы запустить команду (кратковременно) 1 при запуске с помощью systemd, вы можете использовать unitd unit типа OneShot. Например, создайте /etc/systemd/system/foo.service, содержащий:
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Затем запустите:
sudo systemctl daemon-reload
sudo systemctl enable foo.service
По сути, это просто преобразование типичного задания Upstart в системный (см. Systemd for (!).
Вы можете запускать несколько команд из одного и того же файла службы, используя несколько строк ExecStart:
[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure
Команда всегда должна указываться с полным путем. Если какая-либо команда выходит из строя, остальные не запускаются. [[8]]
Релевантно:
Запись в Arch Wiki на systemd man 5 systemd.service Релевантно:Вместо сеансов пользователя вы можете создать блок systemd в ~/.config/systemd. Это должно работать с 16.04 и далее, но не более ранними версиями Ubuntu с systemd (так как они все еще использовали Upstart для пользовательских сеансов). Устройства сеанса пользователя можно управлять с помощью тех же команд, что и с системными службами, но с добавленной опцией --user:
systemctl --user daemon-reload
systemctl --user status foo.service
1 As против долгоживущих демонов.
$HOME/.config/autostart
Это место содержит список приложений для запуска. Здесь может быть добавлен файл .desktop, который будет запущен при запуске. Пример примера для файла .desktop:
Ввод следующего файла .desktop в $HOME/.config/autostart и заданного chmod +x:
[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script
Здесь "</path/to/script>" заменяется на путь к вашему script.sh (обычно рекомендуется для /usr/local/bin так: это может быть выполнено непосредственно командой say myscript заменено на "</path/to/script>").
Пример примера script.sh ]:
#!/bin/bash
<commands to be executed>
exit
Результат: файл .desktop будет запущен из $HOME/.config/autostart, который выполняет скрипт Exec=
Следовательно, вы можете запустите нужный сценарий оболочки при запуске!
Как добавить команду в /etc/rc.local? вам нужно будет использовать sudo-доступ, но для редактирования этого файла.
sudo nano /etc/rc.local
Для простых вещей вы можете добавить команду в System-> Preferences-> Sessions, указывающую на местоположение вашего скрипта.
В качестве альтернативы вы можете добавить его в /etc/init.d/rc.local или выполнить выскочку, если это больше System-> Preferences-> Sessions .
Взгляните на upstart для получения дополнительной информации
Вы должны использовать выскочку для этого. Upstart используется для процессов Ubuntu, которые автоматически запускаются. Это расширенное решение, такое как старые скрипты init.d System-V. Он также позволяет вам установить предварительные условия для начала вашего скрипта (т. Е. Вам нужна работа в сети? И т. Д.)
Один из подходов состоит в том, чтобы добавить задачу @reboot cron:
Запуск crontab -e позволит вам редактировать ваш cron. Добавьте к нему такую строку:@reboot /path/to/script
выполнит этот сценарий после загрузки вашего компьютера. . Этот ответ по-прежнему использует cron, но использует другой метод, чем верхний голосовой ответ. Это работает с Ubuntu 16.04, но, вероятно, поддерживается гораздо раньше. Просто я начал использовать cron для запуска заданий при загрузке компьютера с 16.04.
В комментариях кто-то спросил «когда они бегут?». Вы можете сказать в syslog / journalctl:
$ journalctl -b | grep cron
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)
Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.
Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02
Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[985]: (root) CMD ( /usr/local/bin/cron-reboot-cycle-grub-background)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root
Следует отметить, что cron может отправлять вам по электронной почте статус выполнения заданий и @reboot заданий, поэтому ранний менеджер сети и электронная почта не будут работать если вы не поместили команду sleep в ваш скрипт.
Поместите свои скрипты в каталог /etc/cron.d:
$ ll /etc/cron.d
total 44
drwxr-xr-x 2 root root 4096 Nov 26 19:53 ./
drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../
-rw-r--r-- 1 root root 244 Dec 28 2014 anacron
-rw-r--r-- 1 root root 148 Feb 18 2017 cycle-grub-background
-rw-r--r-- 1 root root 138 Mar 5 2017 display-auto-brightness
-rw-r--r-- 1 root root 460 Nov 26 19:53 nvidia-hdmi-sound
-rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder
-rw-r--r-- 1 root root 224 Nov 19 2016 touch-vmlinuz
-rw-r--r-- 1 root root 700 Aug 5 11:15 turn-off-hyper-threading
Вот несколько сценариев, которые у меня установлены для запуска каждой загрузки:
$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root /usr/local/bin/cron-reboot-cycle-grub-background
$ cat /etc/cron.d/touch-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root touch "/boot/vmlinuz-"`uname -r`
Существуют различные способы автоматического запуска команд:
/etc/init
. Эти сценарии будут запускаться во время запуска системы (или в ответ на определенные события, например, запрос на завершение), а также место для запуска команд, которые не взаимодействуют с пользователем; все серверы запускаются с использованием этого механизма. Вы можете найти читаемое введение в: http://upstart.ubuntu.com/getting-started.html man-страницы man 5 init
и man 8 init
, чтобы получить полную информацию. .gnomerc
в вашем домашнем каталоге автоматически создается при каждом входе в сеанс GNOME. Вы можете помещать в него произвольные команды; переменные среды, установленные в этом скрипте, будут видны любой программой, которую вы запускаете в своем сеансе. Обратите внимание, что сеанс не запускается до завершения скрипта .gnomerc
; поэтому, если вы хотите автонастройку какой-либо долгосрочной программы, вам нужно добавить &
к вызову программы, чтобы отсоединить его от рабочей оболочки. .gnomerc
, за исключением того, что вам не нужно знать синтаксис sh
(но вы также не можете использовать любую конструкцию программирования sh
). Для этого вы должны использовать upstart . Upstart используется для процессов Ubuntu, которые автоматически запускаются. Это расширенное решение, такое как старые скрипты init.d System-V. Это также позволяет вам установить предварительные условия для начала вашего скрипта (т. Е. Вам нужна работа в сети? И т. Д.).