Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Запуск команды от обычного пользователя после выхода из сна  (Прочитано 44131 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Morisson

  • Автор темы
  • Гость
Доброго дня!
Имеется необходимость перезапускать пользовательский юнит wireplumber после выхода из сна.
Для этого есть systemd-хуки и специальное место в /usr/lib/systemd/system-sleep/ куда можно положить свой скрипт, который будет выполняться после выхода из сна. Одна проблема, команда перезапуска пользовательского юнита
systemctl --user restart wireplumber оттуда не работает, т.к. выполняется с правами суперпользователя.

Как запустить вышеуказанную команду от простого пользователя?

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6906
    • Просмотр профиля
Наверно все-таки из "специального места". Зачем пользовальсий юнит помещать в системный каталог.
/etc/systemd/user/... - разве не является таковым.
Или по аналогии: ~/.local/lib/systemd/system-sleep/...
« Последнее редактирование: 05 Февраля 2023, 13:10:23 от andytux »

Morisson

  • Автор темы
  • Гость
Наверно все-таки из "специального места".
Только /usr/lib/systemd/system-sleep/, он по-умолчанию пустой, там место для скриптов для выполения действий до и после просыпания.

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 4488
    • Просмотр профиля
su --group не?..

Morisson

  • Автор темы
  • Гость
#!/bin/sh
 2 case $1/$2 in
 3   pre/*)
 4     /usr/bin/powersave
 5     ;;
 6   post/*)
 7     /usr/bin/powersave ;;
 8     /usr/bin/su jeronimo -c 'systemctl --user restart wireplumber'
 9     ;;
10 esac
ТАк не работает тоже
Цитировать
usr/lib/systemd/system-sleep/00powersave: строка 8: синтаксическая ошибка рядом с неожиданным маркером «jeronimo»
/usr/lib/systemd/system-sleep/00powersave: строка 8: `    /usr/bin/su jeronimo -c 'systemctl --user restart wireplumber''

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6906
    • Просмотр профиля
Сдается мне, что в строке 8 не хватает пары символов:
8     *) /usr/bin/su jeronimo -c 'systemctl --user restart wireplumber'

Morisson

  • Автор темы
  • Гость

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
#!/bin/sh
  case $1 in
    pre)
      /usr/bin/powersave
     ;;
    post)
      /usr/bin/powersave
      /usr/bin/su -c 'systemctl --user restart wireplumber'  jeronimo
     ;;
esac
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6906
    • Просмотр профиля
Похоже я неправильно понял "логический замысел". Оказалось лишнее ";;" в седьмой строке.

Morisson

  • Автор темы
  • Гость
Про запятые понял, но
/usr/bin/su jeronimo -c 'systemctl --user restart wireplumber'Команда требует пароль, который не вводится. Так не работает.
Цитировать
$ /usr/bin/su -c 'systemctl --user restart wireplumber'  jeronimo
Пароль:

Morisson

  • Автор темы
  • Гость
Еще надо и агрументом пароль привести)

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
/usr/lib/systemd/system-sleep/* запускается от рута, пароль для su не нужен.



🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Morisson

  • Автор темы
  • Гость
Короче, так не работает.

Вот так работает

sudo nano /etc/systemd/system/resume-fix-wireplumber@.service[Unit]
Description=Fix PulseAudio after resume from suspend
After=sleep.target
 
[Service]
User=%I
Type=oneshot
Environment="XDG_RUNTIME_DIR=/run/user/1000"
ExecStart=/home/jeronimo/.local/bin/Cpu

[Install]
WantedBy=sleep.target
Где /home/jeronimo/.local/bin/Cpu - скрипт перезагрузки wireplumber
Цитировать
#!/bin/sh
echo мой_пароль | /usr/bin/su -c 'systemctl --user restart wireplumber'  мой_пользователь

После этого активируем юнит
sudo systemctl enable resume-fix-wireplumber@мой_пользовательДанный юнит разово будет выполняться при выходе из сна/гибернации.
Можно применять для своих целей, например, для перезагрузки неработающих модулей после сна и проч.
Источник тут
« Последнее редактирование: 06 Февраля 2023, 08:57:50 от Morisson »

 

Страница сгенерирована за 0.068 секунд. Запросов: 22.