LinuxForum.Fans
Тема

[РЕШЕНО] Запуск dropbox@.service и проблема с виджетом dropbox

Автор: Selish 8 сообщений 1011 просмотров
20.12.2014 20:52 · отредактировано #406066

Имеем сервис-файл dropbox@.service в папке /usr/lib/systemd/system/, который запускает dropbox от имени текущего пользователя

text
[Unit]
Description=Dropbox
After=local-fs.target network.target

[Service] Type=simple ExecStart=/usr/bin/dropboxd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure User=%I

[Install] WantedBy=multi-user.target

Все прекрасно запускается и работает, кроме собственно отображения виджета dropbox в системном лотке(KDE). Сам виджет "системный лоток" при этом естественно уже инициализирован.
Вопрос: Как изменить содержимомое файла, при том, что если, например, от имени пользовавателя напрямую подать команду /usr/bin/dropboxd то запуск происходит как надо и виджет в системном лотке появляется.

20.12.2014 21:21 #406075

Selish,
Такое не интересует?
Для KDE4 есть такая штука: Kfilebox
http://kdropbox.deuteros.es/

С настройкой автозапуска:

Со значком в системном лотке, конечно.

20.12.2014 21:40 #406082

Не, спасибо, я пробовал kfilefox - не понравилось, и при этом он еще на каждом запуске проверярет последнюю версию dropbox и качает ее целиком в /home/<user>/.dpopboxd, у меня же все установлено пакетом в /usr/local , а обновление принудительно отключить как-то так и не получилось. Я просто думаю что кто нибудь из знатоков systemd подскажет правильный синтаксис, ибо у меня с английским пока не складывается, а официальная документация только на нем.

20.12.2014 22:34 #406096

Selish,
Так попробуйте:
[console=root]systemctl {stop|disable} dropbox@.service[/console]
Поменяйте текст сервиса на:

text
[Unit]
Description=Dropbox
After=xorg.target

[Service] Type=simple ExecStart=/usr/bin/dropboxd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure User=%I

[Install] WantedBy=default.target

После:
[console=root]systemctl {start|enable} dropbox@.service[/console]

21.12.2014 05:08 · отредактировано #406140

Попробовал, не работает увы. Но вообще-то в моем случае старт сервиса напрямую не связан с процессом старта системы (и соответственно уровнями инициализации и запуском других демонов).

Показать
На самом деле все происходит в следующем порядке:
a.) Полный запуск оси в Х-окружение (КДЕ).
б.) Старт networkmanager с запросом пароля kwallet
в.) После ввода пароля Поднимается wi-fi соединение
г.) После того как коннект произошел запускается скрипт 10-dropboxd из "секции" /etc/NetworkManager/dispatcher.d/
text
#!/bin/bash

# Get username of the currently logged in user username=$(who | cut -d' ' -f1 | sort | uniq)

case "$2" in up) systemctl restart dropbox@$username ;; down) systemctl stop dropbox@$username ;; esac

д.) Только тогда запускается упомянутый в самом первом посте systemd-сервис dropbox@.service
ж.) и в финале стартует, вызываемый из systemd-сервиса, скрипт запуска dropboxd

text
#!/bin/sh
# Copyright 2008-2013 Dropbox, Inc.
#
# Environment script for the dropbox executable.
PAR=$(dirname "$(readlink -f "$0")")
OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
export OLD_LD_LIBRARY_PATH
if ping -q -c 1 dropbox.com &> /dev/null; then
    if (( $(ping -q -c 1 dropbox.com | grep avg | cut -c23-26) < 250 )); then
        exec "$PAR"/dropbox "$@"
    fi
fi

При отключении wi-fi (или любого из активных соединений) dropbox выгружается из памяти.(пункт г.), строка: systemctl stop dropbox@$username и, соответственно, запускается обратно при восстановлении соединения)
Так как сам процесс синхронизации работает на ура, за исключением отсутствия виджета, я подумал что проще разобратся с этой проблемой,
Нежели, например, делать автозапуск dropbox'a, при этом виджет есть, но сам dpopbox естественно уже не будет освобождать память при отсутствии сети.
Я бы даже "плюнул" и на отсутствие виджета, раз все работает и так, но проблема в том что скорость сети недостаточно высока и стабильна, поэтому скрипт запуска dropboxd (пункт ж.) строка if (( $(ping -q -c 1 dropbox.com | grep avg | cut -c23-26) < 250 )) привязан к пингу и dropbox не запускается, например по вечерам, после работы, когда со скоростью совсем плохо.
Вот как-то так :[

Потому-то и важен виджет, так как иначе сложно понять синхронизировались ли уже папки или нет.

21.12.2014 15:30 · отредактировано #406246

"Selish" написал:
папке /usr/lib/systemd/system/, который запускает dropbox от имени текущего пользователя
А почему не
[console]$ mkdir -p ~/.config/systemd/user
[/console]
Создаем там файл dropbox.service с нужным содержимым
И запускаем сервис
[console]$ sudo systemctl daemon-reload
$ systemctl --user start dropbox
$ systemctl --user enable dropbox
[/console]
P.S. Для получения большей информации можно добавить в секцию [Service] строку
Environment=SYSTEMD_LOG_LEVEL=debug
21.12.2014 16:27 · отредактировано #406252

Попробовал, все тоже, дропбох запускается - виджета нет, увы...
[console][berr@berr-pc ~]$ systemctl --user status dropbox.service
● dropbox.service - Dropbox
Loaded: loaded (/home/berr/.config/systemd/user/dropbox.service; enabled)
Active: active (running) since Вс 2014-12-21 16:17:25 MSK; 19s ago
Main PID: 2411 (dropbox)
CGroup: /user.slice/user-1000.slice/user@1000.service/dropbox.service
└─2411 /usr/local/dropbox/dropbox

дек 21 16:17:25 berr-pc systemd[321]: Started Dropbox.
[berr@berr-pc ~]$ journalctl -xe
-- Subject: Запуск юнита UNIT завершен
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Процесс запуска юнита UNIT был завершен.
--
-- Результат: done.
дек 21 16:15:10 berr-pc systemd[321]: Reloading.
дек 21 16:16:04 berr-pc systemd[321]: Unit dropbox.service cannot be reloaded because it is inactive.
дек 21 16:17:24 berr-pc systemd[321]: Starting Dropbox...
-- Subject: Начинается запуск юнита UNIT
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Начат процесс запуска юнита UNIT.
дек 21 16:17:25 berr-pc systemd[321]: Started Dropbox.
-- Subject: Запуск юнита UNIT завершен
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Процесс запуска юнита UNIT был завершен.
--
-- Результат: done.[/console]

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

22.12.2014 01:49 · отредактировано #406339

Нашел решение на arch-Wiki (и как я его пропустил ума не приложу).
Привожу здесь на всякий случай:
Создать файл /etc/systemd/system/dropbox@.service, со следующим содержимым

text

.include /usr/lib/systemd/system/dropbox@.service
[Service]
Environment=DISPLAY=:0

Разрешить автозапуск:
[console]# systemctl enable dropbox@<user>[/console]
Всё!
P.S. Спасибо за внимание

Войдите или зарегистрируйтесь, чтобы ответить.