Старый postinstall
This commit is contained in:
commit
4337a3f94e
349 changed files with 21945 additions and 0 deletions
106
deb_dist/postinstall-1.5.0/postinstall/option/shell.py
Normal file
106
deb_dist/postinstall-1.5.0/postinstall/option/shell.py
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
import subprocess
|
||||
from dialog import Dialog
|
||||
import pwd
|
||||
import os
|
||||
from postinstall.logger import logger
|
||||
|
||||
logging = logger
|
||||
|
||||
|
||||
def get_users():
|
||||
users = []
|
||||
try:
|
||||
for user in pwd.getpwall():
|
||||
if user.pw_uid >= 1000 and user.pw_name != "nobody":
|
||||
users.append(user.pw_name)
|
||||
if "root" not in users:
|
||||
users.append("root")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при получении списка пользователей: {e}")
|
||||
return users
|
||||
|
||||
|
||||
def install_zsh():
|
||||
try:
|
||||
subprocess.run(["apt", "update"], check=True)
|
||||
subprocess.run(["apt", "install", "-y", "zsh"], check=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Ошибка при установке zsh: {e}")
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def change_shell():
|
||||
d = Dialog(dialog="dialog")
|
||||
users = get_users()
|
||||
|
||||
# Первый шаг - выбор опции с помощью radiolist
|
||||
code, choice = d.radiolist(
|
||||
"Выберите способ изменения оболочки:",
|
||||
choices=[
|
||||
("Для всех пользователей", "", False),
|
||||
("Выбрать конкретных пользователей", "", True)
|
||||
]
|
||||
)
|
||||
|
||||
if code != d.OK:
|
||||
return
|
||||
|
||||
selected_users = []
|
||||
|
||||
if choice == "Для всех пользователей":
|
||||
# Если выбрано "Для всех пользователей"
|
||||
selected_users = users
|
||||
elif choice == "Выбрать конкретных пользователей":
|
||||
# Если выбран выбор конкретных пользователей, показываем checklist
|
||||
code, selected_users = d.checklist(
|
||||
"Выберите пользователей для изменения оболочки:",
|
||||
choices=[(user, "", False) for user in users],
|
||||
clear=True
|
||||
)
|
||||
if code != d.OK or not selected_users:
|
||||
return
|
||||
|
||||
# Выбор оболочки
|
||||
code, shell = d.menu(
|
||||
"Выберите новую оболочку:", choices=[("1", "bash"), ("2", "zsh")]
|
||||
)
|
||||
if code != d.OK:
|
||||
return
|
||||
|
||||
shell_path = "/bin/bash" if shell == "1" else "/bin/zsh"
|
||||
|
||||
if shell_path == "/bin/zsh" and not os.path.exists("/bin/zsh"):
|
||||
logging.info("zsh не установлен. Начинаем установку...")
|
||||
d.msgbox("zsh не установлен. Начинаем установку...")
|
||||
if not install_zsh():
|
||||
d.msgbox("Не удалось установить zsh. Изменение оболочки отменено.")
|
||||
return
|
||||
|
||||
# Применение изменений
|
||||
if choice == "Для всех пользователей":
|
||||
# Применение изменений для всех пользователей
|
||||
for user in selected_users:
|
||||
try:
|
||||
subprocess.run(["sudo", "chsh", "-s", shell_path, user], check=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.error(f"Ошибка при изменении оболочки для пользователя {user}: {e}")
|
||||
d.msgbox("Оболочка изменена для всех существующих пользователей")
|
||||
logging.info("Оболочка изменена для всех существующих пользователей")
|
||||
else:
|
||||
# Применение изменений для конкретных пользователей
|
||||
for user in selected_users:
|
||||
try:
|
||||
subprocess.run(["sudo", "chsh", "-s", shell_path, user], check=True)
|
||||
d.msgbox(f"Оболочка для пользователя {user} изменена на {shell_path}")
|
||||
logging.info(f"Оболочка для пользователя {user} изменена на {shell_path}")
|
||||
except subprocess.CalledProcessError as e:
|
||||
d.msgbox(f"Ошибка при изменении оболочки для пользователя {user}: {e}")
|
||||
|
||||
|
||||
def run_change_shell():
|
||||
change_shell()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_change_shell()
|
||||
Loading…
Add table
Add a link
Reference in a new issue