Запустите определенный терминал на запуске

Я кодировал приложение с помощью libpcap и ncurses. Очевидно, это приложение, как предполагается, работает в терминале.

Поэтому я создал сценарий, который запускает мое приложение в терминале гнома с фиксированным размером:

#!/bin/sh
gnome-terminal --geometry=75x36+0+0 --command="myapplication"'

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

Я создал следующее .service файл:

[Unit]
Description=My Application

[Service]
User=root
Type=simple
ExecStart=/usr/local/bin/myshellfile

[Install]
WantedBy=multi-user.target

И я вставил его /etc/systemd/system/myservice.service и предварительная установка это с

sudo systemctl preset myservice.service

Тем не менее, это не работает. Что я делаю неправильно здесь? Под управлением Ubuntu 16.04 в обновленном состоянии.

1
задан 13 November 2017 в 12:29

1 ответ

Существует немного возможных методов для запуска приложения GUI (как gmome-терминал) при системном запуске, и возможно самое соответствующее должно использовать Приложения Запуска (см. также). Таким образом приложение будет запущено когда пользовательский вход в систему. (В любом методе мы должны экспортировать некоторый рабочий стол envvars, чтобы смочь сделать это.)


Чтобы смочь протестировать мой ответ, я создал исполняемый файл, названный myapp, расположенный в /usr/local/bin. Это добавляет просто текущую дату и время в файле в /root каталог, таким образом, мы должны будем базироваться (sudo) полномочия запустить скрипт:

#!/bin/bash
date >> /root/date.txt

Мы можем дать разрешения определенному пользователю выполнять команду без пароля через sudo. Неважно, ли пользователь принадлежит sudoers группе или нет. Мы можем использовать sudo visudo отредактировать безопасно /etc/sudoers и добавьте одну или несколько строк как их:

user1 ALL=(ALL) NOPASSWD: /usr/local/bin/myapp
user2 ALL=(ALL) NOPASSWD: /usr/local/bin/myapp

Лучшая идея состоит в том, чтобы создать отдельный файл, например /etc/sudoers.d/myapp, куда поместить эти правила. С этой целью мы будем использовать команду: sudo visudo -f /etc/sudoers.d/myapp.

Теперь user1 и user2 должен смочь работать sudo myapp без пароля.

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


Следующий шаг должен изменить сценарий запуска. Давайте назовем его myapp_startup и поместите его в тот же каталог /usr/local/bin. Содержание сценария должно быть:

#!/bin/sh
gnome-terminal --geometry=75x36+0+0 -x bash -c "sudo myapp; exec bash"
  • Подробное объяснение о вышеупомянутой команде дано здесь.
  • Если Вы хотите минимизировать окно, автоматически используйте: этот подход.

Теперь мы можем создать запись в Приложениях Запуска как это:

enter image description here

  • Дополнительно мы можем изменить сценарий запуска таким образом: sleep 3 && gnome-terminal ... для запуска нового окна терминала после, весь рабочий стол инициализируется.
  • Когда сценарий не расположен в рамках каталога, который добавляется к пользователю $PATH переменная (echo $PATH) мы должны использовать полный путь, например: /usr/local/bin/myapp_startup.

Дальнейшее чтение:

  • Вместо терминала гнома, вероятно, можно использовать tmux (или некоторый другой менеджер сеансов), как это описано в этом ответе.

  • Дополнительно можно запустить сценарий запуска через Крон (или некоторая другая ограниченная среда) сценарием cron-gui-launcher.bash из этого проекта: https://github.com/pa4080/cron-gui-launcher. Этот сценарий будет ожидать пользователь для входа в систему и затем экспортирует все Переменные DE и т.д... Но в текущем случае конечный результат совпадет с нами использующий Приложение Запуска.

1
ответ дан 7 December 2019 в 15:29

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

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