From 36127872743ff6ab23fe121d92a3d5b1e4bb6621 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sat, 26 Apr 2025 16:54:35 -0400 Subject: [PATCH] More improvements to rename-user.sh --- pi4/files/root/rename-user.sh | 37 +++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/pi4/files/root/rename-user.sh b/pi4/files/root/rename-user.sh index 0e89f49..3e66b23 100755 --- a/pi4/files/root/rename-user.sh +++ b/pi4/files/root/rename-user.sh @@ -3,6 +3,16 @@ # Renames a user # Required arguments: old user name, new user name +set -e + +question() { + echo + echo "$@" + read -r answer + answer="${answer:0:1}" + answer="${answer^}" +} + if [[ $# -ne 2 ]]; then echo "Usage: $0 old-user new-user" exit 1 @@ -20,13 +30,11 @@ fi # Make sure old user is not logged in if pgrep -u "$oldUser" >/dev/null; then echo "The user $oldUser is currently logged in or has running processes. Cannot continue." - echo "Would you like to forcibly log out $oldUser? (Y/N)" - read -r answer - answer="${answer:0:1}" - answer="${answer^}" + question "Would you like to forcibly log out $oldUser? (Y/N)" if [[ "$answer" != "Y" ]]; then exit 1 fi + systemctl stop display-manager loginctl terminate-user "$oldUser" sleep 2 if pgrep -u "$oldUser" >/dev/null; then @@ -48,17 +56,20 @@ if ! [[ "$newUser" =~ ^[a-z_][a-z0-9_-]{0,31}$ ]]; then fi # Passed all safety checks, proceed with the rename +echo "Renaming $oldUser to $newUser..." groups=$(id -nG "$oldUser") groups="${groups// /,}" usermod -G "$groups" -m -d "/home/$newUser" -l "$newUser" "$oldUser" # Update nodm.conf if it exists if [[ -e /etc/nodm.conf ]]; then + echo "Updating /etc/nodm.conf..." sed -i -e "s#^NODM_USER=.*#NODM_USER='$newUser'#" -e "s#^NODM_XSESSION=.*#NODM_XSESSION='/home/$newUser/.xinitrc'#" /etc/nodm.conf fi # Copy over crontab if it exists if crontab -u "$oldUser" -l >/tmp/${oldUser}_crontab.bak 2>/dev/null; then + echo "Copying over crontab..." if crontab -u "$newUser" "/tmp/${oldUser}_crontab.bak"; then rm "/tmp/${oldUser}_crontab.bak" else @@ -69,18 +80,24 @@ fi # Update linger if [[ -e "/var/lib/systemd/linger/$oldUser" ]]; then + echo "Enabling linger..." mv "/var/lib/systemd/linger/$oldUser" "/var/lib/systemd/linger/$newUser" fi - # Optionally update files in new home directory +echo echo "Would you like to search for references to $oldUser and update them to $newUser in files located in /home/$newUser?" -echo "This can take a while. (Y/N)" -read -r answer -answer="${answer:0:1}" -answer="${answer^}" +question "This can take a while. (Y/N)" if [[ "$answer" == "Y" ]]; then - find "/home/$newUser" -type f -exec sed -i "s|$oldUser|$newUser|g" "{}" \; + echo "Updating files..." + find "/home/$newUser" -type f -exec grep -Iq . "{}" \; -and -exec sed -i "s|$oldUser|$newUser|g" "{}" \; +fi + +echo +echo "Rename complete. The user, $newUser, is now available." +question "Would you like to reboot?" +if [[ "${answer}" == "Y" ]]; then + reboot fi exit 0