Summary: | Вечная попытка входа в Wi-Fi | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | abslike <abslike> |
Component: | steam | Assignee: | Денис Назаров <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
Как временное решение проблемы: 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. ребут Либо: В файл /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 не нужен) Смог сделать проверку, стим ли это: 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-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) (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 и не позволяет редактировать системные соединения. (Ответ для Mikhail Efremov на комментарий #5) > > Проверка на steam в этом правиле не работает, с этим правилом > nm-connection-editor получает NO от polkit и не позволяет редактировать > системные соединения. Странно. Я проверял и правило работало только на стим. (Ответ для Roman Alifanov на комментарий #6) > Странно. Я проверял и правило работало только на стим. Остальное отправляло системное значение (в моем случае AUTH_ADMIN_KEEP). Так polkit вообще не понимает что такое subject.process, в типе subject никакого process нет, см. https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html У меня нет устройств 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; } } }); (Ответ для 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 (Ответ для 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).* (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 запускаю (ну не под своим же пользователем такие вещи запускать). Даже и не помню когда я его себе написал. Но это не дистрибутивно, конечно :(. (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. (Ответ для Mikhail Efremov на комментарий #13) > Запустите polkitd без --no-debug и увидите как он ругается при наличии > subject.process. > Можно еще вставить polkit.log("subject=" + subject); и увидеть что на самом > деле есть в subject. Странно конечно, почему оно тогда работает, ну ладно. Могу протестировать вариант с cat или grep выше. Кстати, правила лучше паковать в /usr/share/polkit-1/rules.d/. А /etc/polkit-1/rules.d/ - это для админа системы. (In reply to Roman Alifanov from comment #14) > Странно конечно, почему оно тогда работает, ну ладно. > Могу протестировать вариант с cat или grep выше. Так запрет на org.freedesktop.NetworkManager.settings.modify.system все равно работает, просто для всех, а не только для steam. (Ответ для Mikhail Efremov на комментарий #15) > Кстати, правила лучше паковать в /usr/share/polkit-1/rules.d/. А > /etc/polkit-1/rules.d/ - это для админа системы. Я просто видел в некоторых пакетах использование /etc/polkit-1/. Буду знать. (Ответ для 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; } }); Блокируются и изменение параметров через параметры системы. (Ответ для Roman Alifanov на комментарий #18) > Блокируются и изменение параметров через параметры системы. Из чего делаю вывод, что правило работает как надо и не затрагивает всю систему... Как в итоге лучше сделать то? cat'ом или grep'ом? Или оставляем как есть, т.к. похоже всё же работает? (Ответ для Денис Назаров на комментарий #20) > Как в итоге лучше сделать то? cat'ом или grep'ом? grep бывает медленным, так что это сложный вопрос... (Ответ для Денис Назаров на комментарий #21) > Или оставляем как есть, т.к. похоже всё же работает? У меня как минимум. И у трех людей точно. И изменение настроек сети у них при этом осталось. kworkstation p10 С установленным steam, NetworkManager потерял привилегии и не давал подключаться к VPN. Удалил steam и подключение заработало. У меня подключение к VPN c установленным steam работает корректно (Ответ для Денис Назаров на комментарий #25) > У меня подключение к VPN c установленным steam работает корректно А удалить, или создать новое подключение есть возможность через GUI системы? Не мог удалить и заново настроить VPN подключение, пока не удалил steam. В KDE даже не было окна запроса с вводом пароля. Система: Alt regular KDE. (Ответ для Mikhail Tergoev на комментарий #26) > (Ответ для Денис Назаров на комментарий #25) > > У меня подключение к VPN c установленным steam работает корректно > > А удалить, или создать новое подключение есть возможность через GUI системы? Да, удаление, редактирование и добавление действительно не работает ( Если /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 лучше не использовать тут. Предлагаю всё же решить, использовать cat, grep или что-то ещё и переместить в итоге правило в /usr/share/polkit-1/rules.d/ 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) Я думаю все же лучше использовать ps, а не лезть напрямую в /proc: ps -q <pid> -o comm= Возможно ли исправить 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 Возможно можно как то и красивее сделать, буду рад услышать предложения и варианты. Заранее спасибо! (Ответ для Mikhail Tergoev на комментарий #33) > Смысл в том что steamdeck режим, это практически полноценное рабочее > окружение в Wayland сессии и без доступа к > org.freedesktop.NetworkManager.settings.modify.system не получится > подключиться к Wi-Fi. Это на случай установки альта на Steam Deck вместо SteamOS? (Ответ для Денис Назаров на комментарий #34) > (Ответ для Mikhail Tergoev на комментарий #33) > > Смысл в том что steamdeck режим, это практически полноценное рабочее > > окружение в Wayland сессии и без доступа к > > org.freedesktop.NetworkManager.settings.modify.system не получится > > подключиться к Wi-Fi. > Это на случай установки альта на Steam Deck вместо SteamOS? Не только. Можно сделать игровую станцию почти из любого ПК + телевизор + геймпад. (Ответ для Денис Назаров на комментарий #34) > Это на случай установки альта на Steam Deck вместо SteamOS? Уточню, для работы gamescope-session-steam который уже в Сизифе. (Ответ для Денис Назаров на комментарий #37) > Готово - https://packages.altlinux.org/ru/tasks/354304/ Денис, большое спасибо. (Ответ для Денис Назаров на комментарий #37) > Готово - https://packages.altlinux.org/ru/tasks/354304/ Все еще раз препроверил. Работает. Обычный стим вопросов не задает, в NM не лезет, а в игровой сессии SteamDeck подключается в Wi-Fi без проблем. Жду в p11 (в p10 всё равно не завести gamescope, так что там не столь важно) (Ответ для Mikhail Tergoev на комментарий #39) > Жду в p11 (в p10 всё равно не завести gamescope, так что там не столь важно) https://packages.altlinux.org/tasks/354334 |