Lubuntu 20.04 Запуск сценария при входе в систему, который выполняется в окне терминала

Моя цель : Выполнить сценарий оболочки после входа в систему, который выполняется с привилегиями root и принимает соответствующий ввод пользователя из терминала. заключительное окно, чтобы определить его следующий образ действий.

Скрипт : Скрипт, который я запускаю, сообщает пользователю, что второй скрипт будет автоматически запущен через 60 секунд, если пользователь не введет s или S. Обратный отсчет отображает оставшееся время. Если пользователь ввел правильную команду выхода, сценарий завершится, и система продолжит работу в обычном режиме. Если в течение 60 секунд ничего действительного не введено, запускается второй сценарий.Второй сценарий также должен выполняться от имени пользователя root (поэтому первый сценарий должен запускаться как root), поскольку у него есть сторожевой таймер, который выполняет жесткую перезагрузку системы в случае аппаратного сбоя.

Bash Script :

#! / Bin / bash

# Подсказывать пользователю информацию.

echo "Майнер начнется через 60 секунд."

echo "Нажмите s + enter, чтобы остановить процесс и возобновить нормальную работу."

# Объявить переменные.

input = "a"

let seconds = 60

# Ждать ввода пользователя и обратного отсчета.

в то время как [$ секунды -gt 0]; do

printf "\r........."$seconds

read -s -t 1 input

let "seconds-=1"

if [ "$input" = "s" ] || [ "$input" = "S" ]; then

    break

fi

done

echo

# Инициировать выбор пользователя

if ["$ input" = "s"] || ["$ input" = "S"]; then

echo "Resuming normal operation."

sleep 2

else

echo "Starting miner."

sleep 2

./TeamRedMiner_Config.sh

fi

Цель : Этот сценарий предназначен для перезапуска программы майнинга после того, как сторожевой таймер перезапустит систему в случае отказа графического процессора. Приглашение пользователя дает мне время остановить выполнение майнера после входа в систему, если я хочу использовать систему как обычно. Обычно я вдали от системы, поэтому это очень важно для продолжения майнинга. Отказ графического процессора довольно распространен после двух с лишним дней работы (несмотря на пониженную частоту, пониженное напряжение и т. Д.) Для одной из моих карт, поскольку она уже очень стареет (более 6 лет).

Я провел много исследований и еще не нашел решения, которое помогло бы мне. Большинство из них сосредоточены на выполнении сценария, который не требует внешнего ввода или окна терминала. Если да, то это всего лишь несколько команд. Мне нужно что-то, что запускает окно терминала, чтобы я мог видеть подсказки и обратный отсчет. Кроме того, мне нужно окно терминала для отображения статуса майнера после его запуска.

То, что я пробовал : Начальные условия: Файл .sh, исполняемый и принадлежит пользователю root.

  1. Использование systemd для выполнения сценария как файла .service (ничего не произошло)
  2. Использование crontab для выполнения сценария при загрузке (ничего не произошло)
  3. Размещение сценария в profile.d (Lubuntu потребовалось больше времени для входа в систему, хотя ничего не произошло)
  4. Редактирование файлов $ HOME / .bashrc и $ HOME / .profile путем добавления ./AutoStartMiner.sh в начало файлов (привело к зависанию системы)

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

1
задан 25 July 2021 в 00:29

1 ответ

Система автозапуска, в которой часть работает с повышенными разрешениями

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

Примечание: я предлагаю вам запускать не все сценарии как root , а только сторожевой таймер (специально вызываемый с помощью sudo во втором сценарии. Это означает, что вы должны разрешить выполнение с NOPASSWD) сторожевого таймера (устанавливается через visudo ).

~ / .config / autostart / shield.desktop

[Desktop Entry]
Name=shield at tester
Comment=Shield only for testing
Exec=/home/tester/bin/shield
Terminal=false
Type=Application
StartupNotify=true
X-GNOME-Autostart-enabled=true

См. эту ссылку , в которой описано, как создать программа запускается автоматически, когда компьютер достигает рабочего стола при загрузке с Lubuntu 20.04.x ​​LTS.

./ bin / shield

#!/bin/bash 

xterm -display :0 -fullscreen -fa default -fs 16 -e bash -c \
'
tme=10  # grace period in seconds before mining starts

echo "Stop? (s/q) "

while [ "$tme" -gt "0" ]
do
 echo -n "$tme "
 tme=$((tme-1))
 read -t1 -n1 ans
 if [ "$ans" == s ] || [ "$ans" == S ] \
 || [ "$ans" == q ] || [ "$ans" == Q ];then
  echo " - the computer is yours"
  sleep 2
  exit
 fi
done

echo " - auto-action, mining starts"
echo "$ sudo -H parted -ls  # demo with program needing sudo"
sudo -H parted -ls
while true
do
 echo -n "."
 read -t1 -n1 -s an2
 if [ "$an2" != "" ];then
  echo " - mining stopped, the computer is yours"
  sleep 3
 exit
 fi
done'
  • sudo должен вызывать ваш сторожевой таймер вместо parted
  • . Вы также можете изменить период отсрочки tme от 10 до 60 (секунд).

/ etc / sudoers

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

%tester ALL=NOPASSWD: /usr/sbin/parted

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

Следующие ссылки объясняют, как отредактировать файл sudoers с помощью visudo :

Разрешения и право собственности

-rwxrwxr-x tester/tester   649 2021-07-26 15:14 ./bin/shield
-rwxrwxr-x tester/tester   181 2021-07-26 14:47 ./.config/autostart/shield.desktop
-r--r----- root/root       795 2021-07-26 14:19 etc/sudoers

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

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

Когда вы прерываете его во время льготного периода перед майнингом:

enter image description here

Когда вы позволяете ему начать майнинг, здесь моделируется с помощью parted ] и точки ( ..... ), и, наконец, остановите добычу, чтобы использовать компьютер для других целей:

enter image description here

Вы можете изменить размер текста xterm окно из -fs 16 .

0
ответ дан 28 July 2021 в 11:15

Другие вопросы по тегам:

Похожие вопросы: