Запуск Chromium при запуске с помощью systemd

find GNU или нет GNU

С GNU-версией find вы можете писать напрямую, не ища их inode,

find . -name '.<*' -delete

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

С версией, отличной от GNU, это тоже можно было сделать напрямую find. -name '. , который работает также с версией GNU, только примерно в 3 раза медленнее [ 1 ] , чем с -удаление .
Если файлов не слишком много, можно использовать и поиск. -name '. , снова быстрее.

perl

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

perl -e 'for(<'.'\<'*'>){((stat)[9]<(unlink))}'

Для удаления всех скрытых файлов каталога достаточно perl -e 'для () {((stat) [9]

Это быстрее с большим количеством файлов. Проверьте выражение, потому что я обычно не работаю с perl.

Обходной путь

В общем, вы можете попробовать переместить все другие файлы в другой каталог и удалить исходный каталог.

mv /tmp /tmp2; mkdir tmp; mv /tmp2/* /tmp; rm tmp2

Недостатки, если какой-то файл уже используется ... но бывают случаи, когда вы тоже можете его использовать .

Ps> не забудьте rsync to / dev / null с опцией -delete ...

3
14.08.2017, 07:02
4 ответа

А теперь ответ systemd.

Поскольку вы спрашивали, как это сделать с помощью systemd.& #9786;

Вот как люди из systemd говорили людям делать это.

Вы помещаете файл сервисного модуля в неправильный каталог. Он не должен идти в /etc/systemd. Он даже не должен входить в /etc/systemd/system. Он должен идти в ~marton/.config/systemd/user.

Это связано с тем, что графическая программа, которую вы хотите запустить под своей учетной записью, является службой для -пользователя , а не системной службой. (В настоящее время вы используете веб-браузер в качестве суперпользователя. Это очень плохая идея. Прекратите это немедленно ! )Вы могли бы настроить его для всех пользователей в каталоге /etc/systemd/user, но вполне вероятно, что не всем пользователям на вашем компьютере нужно запускать Chromium как службу. Поэтому настройте его только для своей учетной записи пользователя, в частности.

Так как это сервис для каждого -пользователя, вы должны манипулировать им с опцией --userна systemctl, без sudo. Например:

systemctl --user status chrome.service

Это также относится к его включению и отключению.

В соответствии с -пользовательской единицей обслуживания это должно быть WantedBy=default.target, потому что нет multi-user.targetдля каждой -пользовательской службы. (Хотя я подозреваю, что на самом деле должно быть WantedBy=your-desktop-session.target, что будет что-то вроде gnome-session.targetв зависимости от того, какой рабочий стол вы используете. То, что говорили люди из systemd, не совсем ясно по этому поводу.)

И одна часть задачи systemd, которую люди должны сделать для каждого -пользовательского сервиса, похожего на -логин -сервис сеанса, — это весь graphical-sessionмеханизм, который ваш сервисный модуль должен включить в настройку:

[Unit]
PartOf=graphical-session.target

Что еще вам нужно сделать, зависит от того, насколько OpenSuSE продвинулась со всей graphical-sessionчепухой, которую разработчики systemd начали продвигать в 2016 году.Ubuntu и Debian предоставляют полный беспорядок закулисных сценариев оболочки при запуске и завершении сеанса входа в систему с графическим интерфейсом, который скрывает как запуск / остановку graphical-session.target, так и внедрение переменной среды DISPLAY. Если в вашем OpenSuSE этого еще нет, возможно, вам придется заполнить эту часть.

Дополнительная литература

11
27.01.2020, 21:15

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

Разница в том, что systemdне имеет простого доступа к переменной окружения DISPLAY, в то время как подход «автозапуск приложений» будет.

1
27.01.2020, 21:15

Короче (дополнительно к JdeBP):

  1. Никогда не используйте root, если в этом нет крайней необходимости. Меньше всего для браузера, так как большинство бесчисленных ошибок в них привели бы к прямому root-доступу к злоумышленнику.

  2. Поместите файлы systemd в~/.config/systemd/user

  3. Включить :Например.systemctl --user enable firefox

~/.config/systemd/user/firefox.service:

[Unit]
Description=Start Firefox
PartOf=graphical-session.target

[Service]
ExecStart=/usr/bin/firefox
Type=oneshot

[Install]
WantedBy=graphical-session.target

Это должно запускать Firefox при загрузке.


Если graphical-session.targetвам не подходит (, так как есть что-то другое, управляемое менеджером входа в систему, ваш менеджер дисплея или Google знают, что )посмотрите на systemctl --user status *.target, что еще может быть.


Если graphical-session.targetне активен после графического входа в систему (у вас может быть старая или стабильная система ), вы можете запустить ее вручную, добавив следующее в свой~/.xsessionrc:

systemctl --no-block --user start graphical-session.target
3
27.01.2020, 21:15

Это работает для меня. Суть в том, чтобы добавить Userв Service, а также инициировать DISPLAYв Environment.

[Unit]
Description=launch chromium

[Service]
User=<user>
Environment=DISPLAY=:0
ExecStart=/usr/bin/chromium-browser

[Install]
WantedBy=user@.service
-1
27.01.2020, 21:15

Теги

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