Closed maxim221 closed 4 years ago
Автозапуск от системы лучше всего делать через systemd. Там можно указать таргетом (событием для запуска) монтирование этого самого тома с синхронизируемым каталогом. Тогда запуск индикатора будет выполнен не с задержкой (которая в общем случае не гарантирует монтирование нужного тома), а непосредственно после монтирования.
Кроме того, в большинстве случаев, когда вы настраиваете систему, лучше использовать абсолютные пути. В случае индикатора это будет /usr/bin/yandex-disk-indicator.
Большое спасибо за оперативный ответ! Написание юнита для systemd займёт у меня какое-то время. Как только я с этим разберусь - напишу что получилось.
Да, будет здорово если отпишитесь с готовым решением - я потом добавлю в FAQ. Это будет полезно другим.
Хм..
Я сделал скрипт и юнит для systemd
Вот этот скрипт: `#!/usr/bin/python
import os os.system("xhost +") os.system("/usr/bin/yandex-disk-indicator") ` а вот юнит:
`[Unit] Description = starts Yandex Disk Indicator when /media/kamensky/Data is mounted RequiresMountsFor=/media/kamensky/Data After=media-kamensky-Data.mount
[Service] RemainAfterExit=true ExecStop=/usr/local/bin/yaIndStart Type=oneshot
[Install] WantedBy=multi-user.target`
но честно говоря пока это не работает-) На форумах про systemd говорят то что systemd срабатывает до того как любой из пользователей успел залогиниться, то то что "графические утилиты" не запускаются через systemd корректно. Честно говоря мне кажется, что я просто неверно описываю условие. Так как уже на запущенной системе примонтирование диска не приводит к запуску, а что касается графических утилит - например teamViewer как раз через сервис systemd запускается. Продолжаю работу.
systemd работает все время, и до логина и после логина пользователя. Это система инициализации сервисов, и она, в частности отвечает за перезапуск демонов если они упали. В заблуждение может вводить вывод всяких анализаторов - они действительно показывают процесс загрузки до логина пользователя. Но это связано с тем, что там то самое логгирование для анализа именно на логине и заканчивается.
Сложности с ним в том, что ему как раз таки логин пользователя немного "параллелен"... Он умеет юниты пользователя запускать и без логина пользователя. Так например syncthing свой сервис стартует - пользователь еще не залогинен, а он уже стартанул причем под этим пользователем.
Важен не только юнит, но и как он добавлен в настройки systemd. Вам нужно добавлять юнит для вашего пользователя, и как то прописать зависимость от логина.
Я попробую тоже покопать эту тему. самому интересно стало...
Уточните, что у вас отвечает за монтирование тома для синхронизируемого каталога? Это что-то зашифрованное или просто через FUSE?
Нет нет. Ничего зашифрованного. У меня просто система стоит на SSD, а синхронизирую облако я в папку на другом диске. Насколько я понимаю его монтирование происходит с помощью fstab, простите мне недостаточную эрудицию-) Если включить автозагрузку то он не видит папку для синхронизации - в этом вся история.
Странно, обычно монтирование всех внутренних дисков происходит до достижения multi-user.target (т.е. вывода окна логина). Или это не встроенный диск а внешний?
Встроенный.. Работает по Sata также как и SSD С папкой на SSD проблем не было-) Но он небольшой. Буду пытаться дальше.
Вот нагуглил две вещи:
дождаться логина пользователя: https://superuser.com/questions/1037466/how-to-start-a-systemd-service-after-user-login-and-stop-it-before-user-logout
дождаться монтирования конкретного диска: https://unix.stackexchange.com/questions/441894/wait-to-start-transmission-daemon-until-after-usb-drive-has-mounted
Думаю если скомбинировать эти два элемента - то должно получиться то что нужно. Т.е. Юнит отработает и когда вы залогинились и когда диск с нужной папкой наконец смонтировался. Первое рулится именно тем что юнит активируется именно под логином пользователя. Второе условием запуска по монтиованию конкретного пути.
Прекрасно! Благодарю. Буду пробовать завтра-)
Мне удалось написать модуль, но скрипт всё время выдавал ошибки запуска связанные с невозможностью получить доступ к папке пользователя. Я начал пытаться настроить систему под root'a, но вдруг неожиданно проблема решилась иначе:
Я изменил fstab для подключения диска в момент старта системы, добавив туда:
/dev/disk/by-id/wwn-0x50014ee2ae19e944 /mnt/wwn-0x50014ee2ae19e944 auto nosuid,nodev,nofail,x-gvfs-show 0 0
где "wwn-0x50014ee2ae19e944" - это id моего диска (можно выяснить id командой ls -la /dev/disk/by-id/
Теперь всё работает как следует без модификаций индикатора, демона синхронизации или systemd
Можно было UUID раздела посмотреть в выводе sudo blkid
и в fstab записать что-то такое
UUID=1fee3372-6592-4ed4-9730-ae84b4323828 /mnt/wwn-0x50014ee2ae19e944 auto nosuid,nodev,nofail,x-gvfs-show 0 0
Только я бы посоветовал вместо auto прописать ту файловую систему что используется на разделе. Это чуть быстрее будет работать.
Здравствуйте!
Я использую индикатор для Ubuntu 18.04.4 LTS и сталкиваюсь с проблемой - папка для синхронизации находится на диске, который не успевает смонтироваться до запуска индикатора. Я пытался отключить автозапуск в меню индикатора и добавить его в автозапуск системы при помощи команды: sleep 10; yandex-disk-indicator однако так его запустить не удаётся. Вероятно нужно указать путь к папке где расположен сам индикатор, но я не понимаю что именно там запускать.
Пожалуйста помогите добавить задержку запуска. Как это можно сделать?