Не сохраняются изменения в файле

Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 31 май 2019, 21:43

Приветствую всех форумчан. Столкнулся с проблемой при попытке перезаписать файл /sys/bus/serio/devices/serio1/protocol. Я могу внести изменения только от root'а, но после перезагрузки ноутбука файл возвращается в исходное состояние. Буду весьма признателен если кто-то подскажет как решить эту проблему.

Решение Chocobo » 01 июн 2019, 07:03
Белый Кролик, Автозагрузка силами DE происходит от имени пользователя, разумеется он обламывается по правам.

накидай service-юнит вместо скрипта, для автоматичсекого выполнения от рута на стадии до запуска пользовательских сессий

заведи файлик /lib/systemd/system/serio1-change.service

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

[Unit]
Description=change serio1 protocol onboot

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/echo -n "SynPS/2" > /sys/bus/serio/devices/serio1/protocol'

[Install]
WantedBy=multi-user.target
затем перечитать изменения
sudo systemctl daemon-reload
включить и добавить в автозагрузку
sudo systemctl start serio1-change.service
sudo systemctl enable serio1-change.service

Перейти к ответу ➙

Аватара пользователя

slant
Сообщения: 1928
Зарегистрирован: 21 июн 2017, 15:09
Решено: 33
Благодарил (а): 15 раз
Поблагодарили: 836 раз

Не сохраняются изменения в файле

Сообщение slant » 31 май 2019, 22:07

Если подразумевается "чтоб изменения сохранялись после перезагрузки" - ответ: никак. Это не физические файлы на диске.

https://it.wikireading.ru/1978

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

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 31 май 2019, 22:36

slant писал(а):
31 май 2019, 22:07
Если подразумевается "чтоб изменения сохранялись после перезагрузки" - ответ: никак. Это не физические файлы на диске.

https://it.wikireading.ru/1978

Если нужно, можно только обеспечить перезапись файла во время загрузки системы, с помощью автоматического запуска соответствующего скрипта, скажем.
Спасибо за ссылку, узнал для себя что-то новое.
Я создал .sh файл с таким содержимым:

!#bin/bash
echo -n "SynPS/2" > /sys/bus/serio/devices/serio1/protocol

Сделал его исполняемым и добавил в автозагрузку, но не сработало. Если пытаюсь запустить в ручную, то в терминале вижу сообщение:

строка 1: !#bin/bash: Нет такого файла или каталога
строка 2: /sys/bus/serio/devices/serio1/protocol: Отказано в доступе

Можете подсказать что я неправильно сделал? Я понял только что файл должен запускаться от root'а, но не знаю как это сделать.

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 31 май 2019, 23:14

Зашел под root'ом и добавил этот скрипт в автозагрузку. В сеансе root все заработало. Как бы теперь заставить скрипт выполняться в сессии пользователя?

Аватара пользователя

vir0id
Сообщения: 2177
Зарегистрирован: 19 дек 2017, 15:48
Решено: 13
Откуда: Рига
Благодарил (а): 149 раз
Поблагодарили: 231 раз

Не сохраняются изменения в файле

Сообщение vir0id » 01 июн 2019, 04:00

Белый Кролик писал(а):
31 май 2019, 22:36
!#bin/bash
В этой строчке забыл слеш поставить


Griga211
Сообщения: 405
Зарегистрирован: 01 окт 2016, 12:20
Решено: 2
Благодарил (а): 9 раз
Поблагодарили: 62 раза

Не сохраняются изменения в файле

Сообщение Griga211 » 01 июн 2019, 04:47

И ещё ! И # местами поменять.

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 01 июн 2019, 06:14

vir0id писал(а):
01 июн 2019, 04:00
Белый Кролик писал(а):
31 май 2019, 22:36
!#bin/bash
В этой строчке забыл слеш поставить
И правда забыл, спасибо.

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 01 июн 2019, 06:17

Griga211 писал(а):
01 июн 2019, 04:47
И ещё ! И # местами поменять.
Спасибо. Моя внимательность к двум часам ночи куда-то улетучилась.

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 01 июн 2019, 06:22

В сеансе root все работает. В сеансе пользователя скрипт приходится выполнять в терминале вручную и вводить пароль администратора.
Наверное, чтоб не вводить пароль и автоматизировать запуск, нужно из под администратора прописать этот скрипт в автозагрузку пользователя?

Аватара пользователя

Chocobo
Сообщения: 9256
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2663 раза

Не сохраняются изменения в файле

Сообщение Chocobo » 01 июн 2019, 07:03

Белый Кролик, Автозагрузка силами DE происходит от имени пользователя, разумеется он обламывается по правам.

накидай service-юнит вместо скрипта, для автоматичсекого выполнения от рута на стадии до запуска пользовательских сессий

заведи файлик /lib/systemd/system/serio1-change.service

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

[Unit]
Description=change serio1 protocol onboot

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/echo -n "SynPS/2" > /sys/bus/serio/devices/serio1/protocol'

[Install]
WantedBy=multi-user.target
затем перечитать изменения
sudo systemctl daemon-reload
включить и добавить в автозагрузку
sudo systemctl start serio1-change.service
sudo systemctl enable serio1-change.service
Изображение
   
Изображение

Аватара пользователя

Chocobo
Сообщения: 9256
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2663 раза

Не сохраняются изменения в файле

Сообщение Chocobo » 01 июн 2019, 07:15

Нашел еще одно прекрасное решение, https://wiki.archlinux.org/index.php/Sy ... rary_files
У системды оказывается есть свой хендлер для обраюотки динамических файлов. где можно поменять права доступа, содержимое.


заводишь файлик в одну строчку
/usr/lib/tmpfiles.d/serio1-protocol.conf

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

#    Path                  Mode UID  GID  Age Argument
w    /sys/bus/serio/devices/serio1/protocol     -    -    -    -   SynPS/2
А дальше системный менеджер при запуске сделает все сам.
лисапеды с echo вызываемые откуда только выозможно - уходят в небытие, какая прелесть :thumbs:
Правда сам еще не проверял :)
Изображение
   
Изображение

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 01 июн 2019, 08:10

Chocobo писал(а):
01 июн 2019, 07:03
Белый Кролик, Автозагрузка силами DE происходит от имени пользователя, разумеется он обламывается по правам.

накидай service-юнит вместо скрипта, для автоматичсекого выполнения от рута на стадии до запуска пользовательских сессий

заведи файлик /lib/systemd/system/serio1-change.service

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

[Unit]
Description=change serio1 protocol onboot

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/echo -n "SynPS/2" > /sys/bus/serio/devices/serio1/protocol'

[Install]
WantedBy=multi-user.target
затем перечитать изменения
sudo systemctl daemon-reload
включить и добавить в автозагрузку
sudo systemctl start serio1-change.service
sudo systemctl enable serio1-change.service
Большое спасибо, теперь заработало! :yahoo:
Только пришлось изменить строку:
ExecStart=/usr/bin/bash -c '/usr/bin/echo -n "SynPS/2" > /sys/bus/serio/devices/serio1/protocol'
на:
ExecStart=/bin/bash -c 'echo -n "SynPS/2" > /sys/bus/serio/devices/serio1/protocol'

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 01 июн 2019, 08:15

Chocobo писал(а):
01 июн 2019, 07:15
Нашел еще одно прекрасное решение, https://wiki.archlinux.org/index.php/Sy ... rary_files
У системды оказывается есть свой хендлер для обраюотки динамических файлов. где можно поменять права доступа, содержимое.


заводишь файлик в одну строчку
/usr/lib/tmpfiles.d/serio1-protocol.conf

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

#    Path                  Mode UID  GID  Age Argument
w    /sys/bus/serio/devices/serio1/protocol     -    -    -    -   SynPS/2
А дальше системный менеджер при запуске сделает все сам.
лисапеды с echo вызываемые откуда только выозможно - уходят в небытие, какая прелесть :thumbs:
Правда сам еще не проверял :)
Стоит попробовать и такой способ.

Аватара пользователя

Chocobo
Сообщения: 9256
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2663 раза

Не сохраняются изменения в файле

Сообщение Chocobo » 01 июн 2019, 09:01

Белый Кролик писал(а):
01 июн 2019, 08:10
Только пришлось изменить строку:
Под рукой только федора, с нее и взял путь к echo :)
Изображение
   
Изображение

Аватара пользователя

Автор темы
Белый Кролик
Сообщения: 135
Зарегистрирован: 24 май 2018, 11:35
Решено: 1
Благодарил (а): 28 раз
Поблагодарили: 26 раз

Не сохраняются изменения в файле

Сообщение Белый Кролик » 01 июн 2019, 11:16

Chocobo писал(а):
01 июн 2019, 09:01
Белый Кролик писал(а):
01 июн 2019, 08:10
Только пришлось изменить строку:
Под рукой только федора, с нее и взял путь к echo :)
У меня на ноутбуке опенсузе, пришлось импровизировать по ходу дела т.к. в сузе еще и файлик пришлось ложить в /usr/lib/systemd/system, а не в /lib/systemd/system. Очень помог советом, еще раз спасибо! :thumbs:

Вернуться в «Иные системные ошибки»