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


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

Автор Тема: Как запустить .sh после выхода из Гибернации? [Решено]  (Прочитано 596 раз)

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

Оффлайн ilya20000

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Доброго времени.
Xubuntu 20.04.1
Настроил на ноутбуке Гибернацию, так же автоматический вход в систему и отключил блокирование пользователя при входе в гибернацию. Работает нормально. (То есть закрыл крышку ноутбука с рабочим столом на экране и после выхода из гибернации у меня тот же рабочий стол без ввода паролей.)
Но мне нужно чтобы .sh скрипт, каждый раз запускался после выхода из Гибернации. В этом sh скрипте:
xrandr --output LVDS-0 --left-of VGA-0 --autoТак как у меня всегда сбиваются дисплеи.
Пробовал через демон, пишет что Can`t open display.
Есть ещё варианты?
« Последнее редактирование: 19 Март 2021, 14:37:02 от zg_nico »

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Есть ещё варианты?

Systemd

В каталоге /etc/systemd/system
создаёшь файл run-after-sleep.service с таким содержимым:

[Unit]
Description=Run script after sleep
After=suspend.target hibernate.target hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/my_script.sh

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target

В каталог /usr/local/bin кладёшь свой файл скрипта, а в предыдущем файле run-after-sleep.service,
в строке ExecStart указываешь точный путь и имя своего скрипта.
Не забудь сделать файл своего скрипта исполняемым.

Затем по очереди выполняешь команды:

sudo systemctl enable run-after-sleep.service
sudo systemctl start run-after-sleep.service
« Последнее редактирование: 24 Август 2020, 18:23:43 от ecc83 »

Оффлайн ilya20000

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Есть ещё варианты?

Systemd

В каталоге /etc/systemd/system
создаёшь файл run-after-sleep.service с таким содержимым:

[Unit]
Description=Run script after sleep
After=suspend.target hibernate.target hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/my_script.sh

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target

В каталог /usr/local/bin кладёшь свой файл скрипта, а в предыдущем файле run-after-sleep.service,
в строке ExecStart указываешь точный путь и имя своего скрипта.
Не забудь сделать файл своего скрипта исполняемым.

Затем по очереди выполняешь команды:

sudo systemctl enable run-after-sleep.service
sudo systemctl start run-after-sleep.service
Спасибо за ответ,

Через Демон я пробовал. Пишет:
my_after_hibernation.sh[354661]: Can't open displayХотя если из консоли запустить my_after_hibernation.sh, отрабатывает нормально, дисплей становиться как надо.

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Задай в своём скрипте переменную DISPLAY

Оффлайн ilya20000

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Задай в своём скрипте переменную DISPLAY
Сначала в терминале посмотрел echo $DISPLAY
Добавил в скрипт
export DISPLAY=:0.0

Теперь при запуске службы
Can't open display :0.0
пробовал :0 и 0 и 0.0
Пробовал User и Group добавить в сервис, тоже самое.
Видимо сервис не видит окружения пользователя, а для xrandr это нужно.
Гуглил, что то однозначного ничего не нагуглил. :-\

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Возможно нужно установить задержку перед выполнением команд в скрипте.

Попробуй перед своей командой в скрипте вставить:

sleep 10
Пользователь добавил сообщение 27 Август 2020, 08:52:49:
и ещё...
Твоя команда должна запускаться от имени пользователя, но сейчас она запускается от имени root.
Примени sudo для выполнения от текущего пользователя.
« Последнее редактирование: 27 Август 2020, 08:52:49 от ecc83 »

Оффлайн ilya20000

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Спасибо!
Наконец то, заработало! 
#!/bin/bash
sleep 10
export DISPLAY=:0.0
sudo -u myuser xrandr --output LVDS-0 --left-of VGA-0 --auto
exit 0

Теперь всё делается само))
Один бы не допёр...

 

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