Bug 46456

Summary: Вечная попытка входа в Wi-Fi
Product: Sisyphus Reporter: abslike <abslike>
Component: steamAssignee: Денис Назаров <nenderus>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: amakeenk, ghgh2222, nenderus, sem, snowmix, tergoevm, vanyamajukin, vercha, zerg
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description abslike 2023-06-09 01:48:50 MSK
Регулярная сборка gnome44 от 31 мая 2023
sudo apt-get install
steam steam.1.0.0.78-alt3
Шаги воспроизведения:
1. Установить программу: # apt-get install steam. 
2. Убрать стим в фон и не пользоваться им
Ожидаемый результат: Стим находится в фоне и не требует ничего.
Фактический результат: Стим каждые пару минут требует какого-либо входа в режим рута и просит пароль.
так, же по всей видимости это проблема именно стима, которая была решена коммьюнити разных дистрибутивов, в убунту даже вшили какой-то фикс, ссылка на issue с этой проблемой: https://github.com/ValveSoftware/steam-for-linux/issues/7856 
и нашел что-то похожее тут: https://steamcommunity.com/app/221410/discussions/0/3106901665845459558/
steam.1.0.0.78-alt3
Comment 1 Roman Alifanov 2023-06-11 13:58:14 MSK
Как временное решение проблемы:

1. Ставим пакет polkit-pkla-compat (ВАЖНО)
2. sudo nano /etc/polkit-1/localauthority/50-local.d/10-network-manager.pkla
Пишем туда: 
[We block Steam]
Identity=unix-user:myuser
Action=org.freedesktop.NetworkManager.settings.modify.system
ResultAny=no
ResultInactive=no
ResultActive=no
...............................
ВМЕСТО myuser свой юзер либо звездочка
3. ребут
Comment 2 Roman Alifanov 2023-06-11 15:55:54 MSK
Либо:
В файл /etc/polkit-1/rules.d/10-steam-nm.rules:

 polkit.addRule(function(action, subject) {
 if (action.id=="org.freedesktop.NetworkManager.settings.modify.system")
 {
 return polkit.Result.NO;
 }
 });

Этр правило в современном виде и без всяких pkla (Пакет polkit-pkla-compat не нужен)
Comment 3 Roman Alifanov 2023-06-11 19:19:56 MSK
Смог сделать проверку, стим ли это:
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" &&
        subject.process.binary.indexOf("steam") !== -1) {
      return polkit.Result.NO;
    }
});
Comment 4 Repository Robot 2023-06-12 00:58:35 MSK
steam-1.0.0.78-alt4 -> sisyphus:

 Mon Jun 12 2023 Nazarov Denis <nenderus@altlinux> 1.0.0.78-alt4
 - Prevent prompts Network Manager without admin permissions (ALT #46456)
Comment 5 Mikhail Efremov 2023-06-23 13:46:19 MSK
(In reply to Roman Alifanov from comment #3)
> Смог сделать проверку, стим ли это:
> polkit.addRule(function(action, subject) {
>     if (action.id == "org.freedesktop.NetworkManager.settings.modify.system"
> &&
>         subject.process.binary.indexOf("steam") !== -1) {
>       return polkit.Result.NO;
>     }
> });

Проверка на steam в этом правиле не работает, с этим правилом nm-connection-editor получает NO от polkit и не позволяет редактировать системные соединения.
Comment 6 Roman Alifanov 2023-06-23 13:48:36 MSK
(Ответ для Mikhail Efremov на комментарий #5)
> 
> Проверка на steam в этом правиле не работает, с этим правилом
> nm-connection-editor получает NO от polkit и не позволяет редактировать
> системные соединения.

Странно. Я проверял и правило работало только на стим.
Comment 7 Roman Alifanov 2023-06-23 13:56:01 MSK
(Ответ для Roman Alifanov на комментарий #6)
> Странно. Я проверял и правило работало только на стим.
Остальное отправляло системное значение (в моем случае AUTH_ADMIN_KEEP).
Comment 8 Mikhail Efremov 2023-06-23 15:02:32 MSK
Так polkit вообще не понимает что такое subject.process, в типе subject никакого process нет, см. https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
Comment 9 Денис Назаров 2023-06-23 15:26:40 MSK
У меня нет устройств c WiFi, поэтому проблема не воспроизводится.

Если попробовать так?

polkit.addRule(function(action, subject) {
    if (action.id === "org.freedesktop.NetworkManager.settings.modify.system") {
        var name = polkit.spawn(["cat", "/proc/" + subject.pid + "/comm"]);
        if (name.includes("steam")) {
            return polkit.Result.NO;
        }
    }    
});
Comment 10 Roman Alifanov 2023-06-23 15:27:48 MSK
(Ответ для Mikhail Efremov на комментарий #8)
> Так polkit вообще не понимает что такое subject.process, в типе subject
> никакого process нет, см.
Как же оно тогда работает? Было проверено на трех машинах.

> https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
"Rules files are written in the  programming language and interface with polkitd through the global polkit object (of type Polkit)."
Есть в node.js как минимум: https://nodejs.org/api/process.html
Comment 11 Roman Alifanov 2023-06-23 15:36:39 MSK
(Ответ для Roman Alifanov на комментарий #10)
"Rules files are written in the  programming language and interface with
> polkitd through the global polkit object (of type Polkit)."


 Rules files are written in the JavaScript programming language and interface with polkitd through the global polkit object (of type Polkit).*
Comment 12 Mikhail Efremov 2023-06-23 18:02:44 MSK
(In reply to Денис Назаров from comment #9)
> У меня нет устройств c WiFi, поэтому проблема не воспроизводится.
> 
> Если попробовать так?
> 
> polkit.addRule(function(action, subject) {
>     if (action.id ===
> "org.freedesktop.NetworkManager.settings.modify.system") {
>         var name = polkit.spawn(["cat", "/proc/" + subject.pid + "/comm"]);
>         if (name.includes("steam")) {
>             return polkit.Result.NO;
>         }
>     }    
> });

Да, так работает. Правда я совершенно не доверяю cat на /proc/*/comm, мало ли какой там comm произвольного вида себе процесс сделает и как на это отреагирует libmozjs.
Безопаснее grep использовать, думаю.
Ничего не понимаю в JS, набросал такое правило:

polkit.addRule(function(action, subject) {
    if (action.id === "org.freedesktop.NetworkManager.settings.modify.system") {
            try {
                    if (polkit.spawn(["grep", "^steam$", "/proc/" + subject.pid + "/comm"]) !== "") {
                            return polkit.Result.NO;
                    }
            } catch(err)
            {
                    return polkit.Result.NOT_HANDLED;
            }
    }
});

Впрочем, лично у себя я все равно такие правила использовать не буду, мне не нравится постоянный exec процесса (хоть cat, хоть grep).
У меня обнаружилось правило, запрещающее "org.freedesktop.NetworkManager.settings.modify.system" для того пользователя, под которым я steam запускаю (ну не под своим же пользователем такие вещи запускать). Даже и не помню когда я его себе написал. Но это не дистрибутивно, конечно :(.
Comment 13 Mikhail Efremov 2023-06-23 18:07:18 MSK
(In reply to Roman Alifanov from comment #10)
> (Ответ для Mikhail Efremov на комментарий #8)
> > Так polkit вообще не понимает что такое subject.process, в типе subject
> > никакого process нет, см.
> Как же оно тогда работает? Было проверено на трех машинах.

Запустите polkitd без --no-debug и увидите как он ругается при наличии subject.process.
Можно еще вставить polkit.log("subject=" + subject); и увидеть что на самом деле есть в subject.
Comment 14 Roman Alifanov 2023-06-23 18:15:57 MSK
(Ответ для Mikhail Efremov на комментарий #13)
> Запустите polkitd без --no-debug и увидите как он ругается при наличии
> subject.process.
> Можно еще вставить polkit.log("subject=" + subject); и увидеть что на самом
> деле есть в subject.
Странно конечно, почему оно тогда работает, ну ладно.
Могу протестировать вариант с cat или grep выше.
Comment 15 Mikhail Efremov 2023-06-23 18:18:43 MSK
Кстати, правила лучше паковать в /usr/share/polkit-1/rules.d/. А /etc/polkit-1/rules.d/ - это для админа системы.
Comment 16 Mikhail Efremov 2023-06-23 18:21:19 MSK
(In reply to Roman Alifanov from comment #14)
> Странно конечно, почему оно тогда работает, ну ладно.
> Могу протестировать вариант с cat или grep выше.

Так запрет на org.freedesktop.NetworkManager.settings.modify.system все равно работает, просто для всех, а не только для steam.
Comment 17 Roman Alifanov 2023-06-23 18:23:33 MSK
(Ответ для Mikhail Efremov на комментарий #15)
> Кстати, правила лучше паковать в /usr/share/polkit-1/rules.d/. А
> /etc/polkit-1/rules.d/ - это для админа системы.
Я просто видел в некоторых пакетах использование /etc/polkit-1/. Буду знать.
Comment 18 Roman Alifanov 2023-06-23 18:27:35 MSK
(Ответ для Mikhail Efremov на комментарий #16)
> (In reply to Roman Alifanov from comment #14)
> > Странно конечно, почему оно тогда работает, ну ладно.
> > Могу протестировать вариант с cat или grep выше.
> 
> Так запрет на org.freedesktop.NetworkManager.settings.modify.system все
> равно работает, просто для всех, а не только для steam.

В том то и дело, что настройки wifi успешно изменяются через настройки, а блокируется только стим.
Когда сделанно:
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.NetworkManager.settings.modify.system") {
      return polkit.Result.NO;
    }
});
Блокируются и изменение параметров через параметры системы.
Comment 19 Roman Alifanov 2023-06-23 18:33:41 MSK
(Ответ для Roman Alifanov на комментарий #18)
> Блокируются и изменение параметров через параметры системы.
Из чего делаю вывод, что правило работает как надо и не затрагивает всю систему...
Comment 20 Денис Назаров 2023-06-23 19:37:30 MSK
Как в итоге лучше сделать то? cat'ом или grep'ом?
Comment 21 Денис Назаров 2023-06-23 19:38:49 MSK
Или оставляем как есть, т.к. похоже всё же работает?
Comment 22 Roman Alifanov 2023-06-23 19:39:36 MSK
(Ответ для Денис Назаров на комментарий #20)
> Как в итоге лучше сделать то? cat'ом или grep'ом?
grep бывает медленным, так что это сложный вопрос...
Comment 23 Roman Alifanov 2023-06-23 19:41:01 MSK
(Ответ для Денис Назаров на комментарий #21)
> Или оставляем как есть, т.к. похоже всё же работает?
У меня как минимум. И у трех людей точно.
И изменение настроек сети у них при этом осталось.
Comment 24 Mikhail Tergoev 2023-06-30 14:42:21 MSK
kworkstation p10
С установленным steam, NetworkManager потерял привилегии и не давал подключаться к VPN. 
Удалил steam и подключение заработало.
Comment 25 Денис Назаров 2023-06-30 16:10:27 MSK
У меня подключение к VPN c установленным steam работает корректно
Comment 26 Mikhail Tergoev 2023-06-30 16:33:03 MSK
(Ответ для Денис Назаров на комментарий #25)
> У меня подключение к VPN c установленным steam работает корректно

А удалить, или создать новое подключение есть возможность через GUI системы?
Comment 27 Ivan Mazhukin 2023-06-30 16:44:21 MSK
Не мог удалить и заново настроить VPN подключение, пока не удалил steam. В KDE даже не было окна запроса с вводом пароля.
Система: Alt regular KDE.
Comment 28 Денис Назаров 2023-06-30 17:02:32 MSK
(Ответ для Mikhail Tergoev на комментарий #26)
> (Ответ для Денис Назаров на комментарий #25)
> > У меня подключение к VPN c установленным steam работает корректно
> 
> А удалить, или создать новое подключение есть возможность через GUI системы?

Да, удаление, редактирование и добавление действительно не работает (
Comment 29 Денис Назаров 2023-06-30 17:06:13 MSK
Если /etc/polkit-1/rules.d/10-steam-nm.rules заменить на 

polkit.addRule(function(action, subject) {
    if (action.id === "org.freedesktop.NetworkManager.settings.modify.system") {
        var name = polkit.spawn(["cat", "/proc/" + subject.pid + "/comm"]);
        if (name.includes("steam")) {
            return polkit.Result.NO;
        }
    }    
});

то работает. Но я так понимаю, что cat лучше не использовать тут.
Comment 30 Денис Назаров 2023-06-30 18:14:33 MSK
Предлагаю всё же решить, использовать cat, grep или что-то ещё и переместить в итоге правило в /usr/share/polkit-1/rules.d/
Comment 31 Repository Robot 2023-06-30 22:28:10 MSK
steam-1.0.0.78-alt7 -> sisyphus:

 Fri Jun 30 2023 Nazarov Denis <nenderus@altlinux> 1.0.0.78-alt7
 - Prevent prompts Network Manager without admin permissions only for steam (ALT #46456)
Comment 32 Mikhail Efremov 2023-09-14 01:12:24 MSK
Я думаю все же лучше использовать ps, а не лезть напрямую в /proc:

ps -q <pid> -o comm=
Comment 33 Mikhail Tergoev 2024-08-03 15:35:39 MSK
Возможно ли исправить steam-nm.rules на такого вида содержание:

polkit.addRule(function(action, subject) {
    if (action.id === "org.freedesktop.NetworkManager.settings.modify.system") {
        var cmd_line = polkit.spawn(["ps", subject.pid]);
        if (cmd_line.includes("steamdeck")) {
            return polkit.Result.YES;
        } else if (cmd_line.includes("steam")) {
            return polkit.Result.NO;
        }
    }
});

Смысл в том что steamdeck режим, это практически полноценное рабочее окружение в Wayland сессии и без доступа к org.freedesktop.NetworkManager.settings.modify.system не получится подключиться к Wi-Fi.

+ в данной реализации мы не лезем в /proc

Возможно можно как то и красивее сделать, буду рад услышать предложения и варианты.

Заранее спасибо!
Comment 34 Денис Назаров 2024-08-03 16:22:24 MSK
(Ответ для Mikhail Tergoev на комментарий #33)
> Смысл в том что steamdeck режим, это практически полноценное рабочее
> окружение в Wayland сессии и без доступа к
> org.freedesktop.NetworkManager.settings.modify.system не получится
> подключиться к Wi-Fi.
Это на случай установки альта на Steam Deck вместо SteamOS?
Comment 35 Mikhail Tergoev 2024-08-03 16:26:53 MSK
(Ответ для Денис Назаров на комментарий #34)
> (Ответ для Mikhail Tergoev на комментарий #33)
> > Смысл в том что steamdeck режим, это практически полноценное рабочее
> > окружение в Wayland сессии и без доступа к
> > org.freedesktop.NetworkManager.settings.modify.system не получится
> > подключиться к Wi-Fi.
> Это на случай установки альта на Steam Deck вместо SteamOS?

Не только. Можно сделать игровую станцию почти из любого ПК + телевизор + геймпад.
Comment 36 Mikhail Tergoev 2024-08-03 16:39:41 MSK
(Ответ для Денис Назаров на комментарий #34)
> Это на случай установки альта на Steam Deck вместо SteamOS?

Уточню, для работы gamescope-session-steam который уже в Сизифе.
Comment 37 Денис Назаров 2024-08-03 22:52:34 MSK
Готово - https://packages.altlinux.org/ru/tasks/354304/
Comment 38 Mikhail Tergoev 2024-08-03 23:06:02 MSK
(Ответ для Денис Назаров на комментарий #37)
> Готово - https://packages.altlinux.org/ru/tasks/354304/

Денис, большое спасибо.
Comment 39 Mikhail Tergoev 2024-08-04 13:26:22 MSK
(Ответ для Денис Назаров на комментарий #37)
> Готово - https://packages.altlinux.org/ru/tasks/354304/

Все еще раз препроверил. Работает. 
Обычный стим вопросов не задает, в NM не лезет, а в игровой сессии SteamDeck подключается в Wi-Fi без проблем.

Жду в p11 (в p10 всё равно не завести gamescope, так что там не столь важно)
Comment 40 Денис Назаров 2024-08-05 00:29:15 MSK
(Ответ для Mikhail Tergoev на комментарий #39)
> Жду в p11 (в p10 всё равно не завести gamescope, так что там не столь важно)

https://packages.altlinux.org/tasks/354334