Void: Runit Проблема при создании сервиса демона emacs

Системы, которые не вошли в список.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Void: Runit Проблема при создании сервиса демона emacs

Сообщение UnixNoob »

Доброй ночи всем. Хочу чтобы стартовал при запуске системы emacs --daemon , но что-то не понимаю, видимо.
Открыл документацию по Void "Per-User Services"
Создал:

Shell

/etc/sv/runsvdir-toxa
├── run
Выдал права на исполнение:

Shell

# chmod +x /etc/sv/runsvdir-toxa/run
run содержит:

Код: Выделить всё

#!/bin/sh

export USER="toxa"
export HOME="/home/toxa"

groups="$(id -Gn "$USER" | tr ' ' ':')"
svdir="$HOME/.local/service"

exec chpst -u "$USER:$groups" runsvdir "$svdir"

Создал каталог ~/.local/service/emacs-daemon
В нем run содержит:

Код: Выделить всё

#!/usr/bin/sh
exec 2>&1
exec /usr/bin/emacs --fg-daemon   # пробовал и вариант с --daemon
Выдал права на исполнение:

Shell

# chmod +x ~/.local/service/emacs-daemon/run
Сделал ссылку на сервис, чтобы его активировать:

Shell

# ln -s /etc/sv/runsvdir-toxa /var/service/
Состояние сервиса мне сообщает:

Shell

$ sv status ~/.local/service/*
run: /home/toxa/.local/service/emacs-daemon: (pid 8800) 2s
ps:

Shell

$ ps -aux |grep emacs
toxa 1081 0.0 0.0 2376 1376 ? S 23:32 0:00 runsv emacs-daemon
toxa 9327 98.1 0.9 339992 149296 ? R 23:49 0:01 /usr/bin/emacs --fg-daemon
toxa 9334 0.0 0.0 6692 2624 pts/2 S+ 23:49 0:00 grep --color=auto emacs
Кроме того файл server создается:

Shell

srwx------ 1 toxa toxa 0 мая 10 23:32 /tmp/emacs1000/server
При попытке присоединится мне сообщается, что его нет:

Shell

$ emacsclient -c
emacsclient: can't find socket; have you started the server?
emacsclient: To start the server in Emacs, type "M-x server-start".
emacsclient: No socket or alternate editor. Please use:
--socket-name
--server-file (or environment variable EMACS_SERVER_FILE)
--alternate-editor (or environment variable ALTERNATE_EDITOR)
А при попытке указать файл ручками:

Shell

$ emacsclient -c --server-file /tmp/emacs1000/server
emacsclient: error accessing server file "/tmp/emacs1000/server"
Если запустить демона из терминала, то такой проблемы нет. Подозреваю что я что-то не выдал из прав, но где и чему - не знаю.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение UnixNoob »

Выяснил что emacs при запуске из терминала создает файл и каталог по пути переменной $XDG_RUNTIME_DIR (/run/user/1000), а при запуске сервисом - в /tmp. Встречал в других сервисах такое:

Код: Выделить всё

[ ! -d /run/gdm ] && mkdir -m0711 -p /run/gdm && chown root:gdm /run/gdm
При попытке повторить в локальном сервисе пользователя:

Код: Выделить всё

[ ! -d $XDG_RUNTIME_DIR/emacs ] && mkdir -m0700 -p $XDG_RUNTIME_DIR/emacs && chown toxa:toxa $XDG_RUNTIME_DIR/emacs
exec /usr/bin/emacs --fg-daemon
создать данный каталог не удается, пишет что недостаточно прав. Почему пути создания разнятся в зависимости от места вызова команды и как это исправить я не знаю.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение UnixNoob »

Dionysius
Я с этого начинал, к сожалению мне это не помогло.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Dionysius
Сообщения: 523
ОС: Manjaro
Контактная информация:

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение Dionysius »

Пути разнятся, скорее всего, по той причине, что /tmp где-нибудь в коде дефолтом записан, и он подставляется, когда переменная окружения не задана. Видимо, она задаётся только в терминале. Наверно, как-то в запуск сервиса её надо подсунуть.

А что вообще даёт запуск Emacs как daemon'а?
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение UnixNoob »

Dionysius писал:
12.05.2023 10:51
А что вообще даёт запуск Emacs как daemon'а?
Он быстрее открывается, в терминале, при желании, можно открывать, как vim, более отзывчив, по моим ощущениям. Вариантов его запустить в целом много, можно просто через DE или .xinitrc какой-нибудь, просто хотелось понять почему у меня одного такая проблема :)
Переменную я попробовал задать, вечером проверю, помогло или нет.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20796
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение Bizdelnick »

ls -l /tmp/emacs1000/server
ls -ld /tmp/emacs1000
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение UnixNoob »

Bizdelnick писал:
12.05.2023 11:48
ls -l /tmp/emacs1000/server

Shell

srwx------ 1 toxa toxa 0 мая 12 18:26 /tmp/emacs1000/server
Bizdelnick писал:
12.05.2023 11:48
ls -ld /tmp/emacs1000

Shell

drwx------ 2 toxa toxa 60 мая 12 18:26 /tmp/emacs1000
Почему-то при указании запускать в чистом окружении

Shell

#!/usr/bin/env -i
не создается совсем ничего.
Задание переменной

Shell

(setq server-socket-dir (getenv "XDG_RUNTIME_DIR"))
в конфиге emacs ничего не дало.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Void: Runit Проблема при создании сервиса демона emacs

Сообщение UnixNoob »

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

Shell

runsvdir -P "${HOME}/.local/service/"
все работает как надо.
Добавил для интереса в пользовательский сервис экспорт переменной:

Код: Выделить всё

export XDG_RUNTIME_DIR=/run/user/1000
это помогло и создает он теперь в нужном месте файл,но теперь оно пишет

Shell

*ERROR*: Display :0 can’t be opened
а в логах демаона:

Код: Выделить всё

Authorization required, but no authorization protocol specified
При этом переменная итак 0. Добавление экспорта и этой переменной ничего не дает, когда сервис запускается видимо DISPLAY еще нет.
В целом не судьба, видимо, придется запускать при старте Хов. Что-то в Slackware или с systemd похоже было бы проще :laugh:

Люди инструкцию писали, значит это работало когда-то... или может конкретно на моей системе что-то иначе.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Ответить