為什麼無法在 Raspbian 中刪除使用者?
我在 Raspberry Pi 3b 的 Raspbian Jessie 中取得了成功
% http://askubuntu.com/a/227513/25388 masi@raspberrypi:~ $ sudo locale-gen en_US en_US.UTF-8 masi@raspberrypi:~ $ sudo dpkg-reconfigure locales
我跑
sudo deluser pi
但我得到perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 929 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting.
如果多語言環境問題不成功,我也嘗試了修復
for y in $(locale | cut -d '=' -f 2| sort |uniq );do sudo locale-gen $y; done
我願意
masi@raspberrypi:~ $ ps -fp 929 UID PID PPID C STIME TTY TIME CMD pi 929 1 0 08:54 ? 00:00:00 /usr/lib/menu-cache/menu-cached /tmp/.
我願意
masi@raspberrypi:~ $ sudo kill 929 masi@raspberrypi:~ $ sudo deluser pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 1174 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting. masi@raspberrypi:~ $ sudo deluser -remove-home pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Looking for files to backup/remove ... Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 1174 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting. masi@raspberrypi:~ $
我現在殺死程序 id
1174
但我得到完全相同的輸出,但現在給出一個新的程序 id1202
。我有,sudo killall -u pi -m .
但我明白了Usage: killall [OPTION]... [--] NAME...
我願意
masi@raspberrypi:~ $ sudo pkill -u pi masi@raspberrypi:~ $ sudo deluser pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", ... are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 3422 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting.
我願意
masi@raspberrypi:~ $ ps -u pi PID TTY TIME CMD 3422 tty1 00:00:00 bash masi@raspberrypi:~ $ sudo kill 3422 masi@raspberrypi:~ $ sudo deluser pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 3496 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting.
我願意
masi@raspberrypi:~ $ who pi tty1 Jun 4 09:38 masi pts/0 Jun 4 09:06 (masi)
我願意
masi@raspberrypi:~ $ sudo skill -KILL -u pi masi@raspberrypi:~ $ sudo deluser pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 3496 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting.
我做斯蒂芬的提議,但是
masi@raspberrypi:~ $ sudo service lightdm stop masi@raspberrypi:~ $ sudo deluser pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. userdel: user pi is currently used by process 3496 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting.
我的命令的第二次迭代包括再次嘗試通過命令的第一步更改語言環境,但再次失敗。
我願意
masi@raspberrypi:~ $ ps -ft tty1 UID PID PPID C STIME TTY TIME CMD root 3491 1 0 09:38 tty1 00:00:00 /bin/login -f pi 3507 3491 0 09:38 tty1 00:00:00 -bash
我有,
sudo vim /etc/inittab
但文件是空的。我做masi@raspberrypi:~ $ sudo grep -r "login -f" /etc
了,但沒有輸出。我願意
masi@raspberrypi:~ $ sudo grep -r autologin /etc /etc/lightdm/lightdm.conf:# pam-autologin-service = PAM service to use for autologin /etc/lightdm/lightdm.conf:# autologin-guest = True to log in as guest by default /etc/lightdm/lightdm.conf:# autologin-user = User to log in with by default (overrides autologin-guest) /etc/lightdm/lightdm.conf:# autologin-user-timeout = Number of seconds to wait before loading default user /etc/lightdm/lightdm.conf:# autologin-session = Session to load for automatic login (overrides user-session) /etc/lightdm/lightdm.conf:# autologin-in-background = True if autologin session should not be immediately activated /etc/lightdm/lightdm.conf:#pam-autologin-service=lightdm-autologin /etc/lightdm/lightdm.conf:#autologin-guest=false /etc/lightdm/lightdm.conf:autologin-user=pi /etc/lightdm/lightdm.conf:#autologin-user-timeout=0 /etc/lightdm/lightdm.conf:#autologin-in-background=false /etc/lightdm/lightdm.conf:#autologin-session=UNIMPLEMENTED /etc/systemd/system/autologin@.service:ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
內容
/etc/lightdm/lightdm.conf
# General configuration # # start-default-seat = True to always start one seat if none are defined in the configuration # greeter-user = User to run greeter as # minimum-display-number = Minimum display number to use for X servers # minimum-vt = First VT to run displays on # lock-memory = True to prevent memory from being paged to disk # user-authority-in-system-dir = True if session authority should be in the system location # guest-account-script = Script to be run to setup guest account # logind-load-seats = True to automatically set up multi-seat configuration from logind # logind-check-graphical = True to on start seats that are marked as graphical by logind # log-directory = Directory to log information to # run-directory = Directory to put running state in # cache-directory = Directory to cache to # sessions-directory = Directory to find sessions # remote-sessions-directory = Directory to find remote sessions # greeters-directory = Directory to find greeters # [LightDM] #start-default-seat=true #greeter-user=lightdm #minimum-display-number=0 #minimum-vt=7 #lock-memory=true #user-authority-in-system-dir=false #guest-account-script=guest-account #logind-load-seats=false #logind-check-graphical=false #log-directory=/var/log/lightdm #run-directory=/var/run/lightdm #cache-directory=/var/cache/lightdm #sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions #remote-sessions-directory=/usr/share/lightdm/remote-sessions #greeters-directory=/usr/share/lightdm/greeters:/usr/share/xgreeters # # Seat defaults # # type = Seat type (xlocal, xremote) # xdg-seat = Seat name to set pam_systemd XDG_SEAT variable and name to pass to X server # pam-service = PAM service to use for login # pam-autologin-service = PAM service to use for autologin # pam-greeter-service = PAM service to use for greeters # xserver-command = X server command to run (can also contain arguments e.g. X -special-option) # xserver-layout = Layout to pass to X server # xserver-config = Config file to pass to X server # xserver-allow-tcp = True if TCP/IP connections are allowed to this X server # xserver-share = True if the X server is shared for both greeter and session # xserver-hostname = Hostname of X server (only for type=xremote) # xserver-display-number = Display number of X server (only for type=xremote) # xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true) # xdmcp-port = XDMCP UDP/IP port to communicate on # xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf) # unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option) # unity-compositor-timeout = Number of seconds to wait for compositor to start # greeter-session = Session to load for greeter # greeter-hide-users = True to hide the user list # greeter-allow-guest = True if the greeter should show a guest login option # greeter-show-manual-login = True if the greeter should offer a manual login option # greeter-show-remote-login = True if the greeter should offer a remote login option # user-session = Session to load for users # allow-user-switching = True if allowed to switch users # allow-guest = True if guest login is allowed # guest-session = Session to load for guests (overrides user-session) # session-wrapper = Wrapper script to run session with # greeter-wrapper = Wrapper script to run greeter with # guest-wrapper = Wrapper script to run guest sessions with # display-setup-script = Script to run when starting a greeter session (runs as root) # display-stopped-script = Script to run after stopping the display server (runs as root) # greeter-setup-script = Script to run when starting a greeter (runs as root) # session-setup-script = Script to run when starting a user session (runs as root) # session-cleanup-script = Script to run when quitting a user session (runs as root) # autologin-guest = True to log in as guest by default # autologin-user = User to log in with by default (overrides autologin-guest) # autologin-user-timeout = Number of seconds to wait before loading default user # autologin-session = Session to load for automatic login (overrides user-session) # autologin-in-background = True if autologin session should not be immediately activated # exit-on-failure = True if the daemon should exit if this seat fails # [SeatDefaults] #type=xlocal #xdg-seat=seat0 #pam-service=lightdm #pam-autologin-service=lightdm-autologin #pam-greeter-service=lightdm-greeter #xserver-command=X #xserver-layout= #xserver-config= #xserver-allow-tcp=false #xserver-share=true #xserver-hostname= #xserver-display-number= #xdmcp-manager= #xdmcp-port=177 #xdmcp-key= #unity-compositor-command=unity-system-compositor #unity-compositor-timeout=60 #greeter-session=example-gtk-gnome #greeter-hide-users=false #greeter-allow-guest=true #greeter-show-manual-login=false #greeter-show-remote-login=true #user-session=default #allow-user-switching=true #allow-guest=true #guest-session= #session-wrapper=lightdm-session #greeter-wrapper= #guest-wrapper= #display-setup-script= #display-stopped-script= #greeter-setup-script= #session-setup-script= #session-cleanup-script= #autologin-guest=false autologin-user=pi #autologin-user-timeout=0 #autologin-in-background=false #autologin-session=UNIMPLEMENTED #exit-on-failure=false # # Seat configuration # # Each seat must start with "Seat:". # Uses settings from [SeatDefaults], any of these can be overriden by setting them in this section. # #[Seat:0] # # XDMCP Server configuration # # enabled = True if XDMCP connections should be allowed # port = UDP/IP port to listen for connections on # key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf) # # The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively # it can be a word and the first 7 characters are used as the key. # [XDMCPServer] #enabled=false #port=177 #key= # # VNC Server configuration # # enabled = True if VNC connections should be allowed # command = Command to run Xvnc server with # port = TCP/IP port to listen for connections on # width = Width of display to use # height = Height of display to use # depth = Color depth of display to use # [VNCServer] #enabled=false #command=Xvnc #port=5900 #width=1024 #height=768 #depth=8
我願意
masi@raspberrypi:~ $ sudo systemctl disable autologin@tty1 masi@raspberrypi:~ $ ps -fu pi UID PID PPID C STIME TTY TIME CMD pi 3496 1 0 09:38 ? 00:00:00 /lib/systemd/systemd --user pi 3502 3496 0 09:38 ? 00:00:00 (sd-pam) pi 3507 3491 0 09:38 tty1 00:00:00 -bash masi@raspberrypi:~ $ sudo kill 3496 3502 3507 masi@raspberrypi:~ $ ps -fu pi UID PID PPID C STIME TTY TIME CMD pi 7062 1 1 21:46 ? 00:00:00 /lib/systemd/systemd --user pi 7068 7062 0 21:46 ? 00:00:00 (sd-pam) pi 7073 7056 6 21:46 tty1 00:00:00 -bash
文件
/etc/systemd/system/autologin@.service
# This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. [Unit] Description=Getty on %I Documentation=man:agetty(8) man:systemd-getty-generator(8) Documentation=http://0pointer.de/blog/projects/serial-console.html After=systemd-user-sessions.service plymouth-quit-wait.service After=rc-local.service # If additional gettys are spawned during boot then we should make # sure that this is synchronized before getty.target, even though # getty.target didn't actually pull it in. Before=getty.target IgnoreOnIsolate=yes # On systems without virtual consoles, don't start any getty. Note # that serial gettys are covered by serial-getty@.service, not this # unit. ConditionPathExists=/dev/tty0 [Service] # the VT is cleared by TTYVTDisallocate ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM Type=idle Restart=always RestartSec=0 UtmpIdentifier=%I TTYPath=/dev/%I TTYReset=yes TTYVHangup=yes TTYVTDisallocate=yes KillMode=process IgnoreSIGPIPE=no SendSIGHUP=yes # Unset locale for the console getty since the console has problems # displaying some internationalized messages. Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION= [Install] WantedBy=getty.target DefaultInstance=tty1
我願意
masi@raspberrypi:~ $ sudo systemctl stop autologin@tty1 masi@raspberrypi:~ $ ps -fu pi UID PID PPID C STIME TTY TIME CMD masi@raspberrypi:~ $ sudo deluser pi perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = "en_US.UTF-8", LC_PAPER = "fi_FI.UTF-8", LC_ADDRESS = "fi_FI.UTF-8", LC_MONETARY = "fi_FI.UTF-8", LC_NUMERIC = "fi_FI.UTF-8", LC_TELEPHONE = "fi_FI.UTF-8", LC_IDENTIFICATION = "fi_FI.UTF-8", LC_MEASUREMENT = "fi_FI.UTF-8", LC_TIME = "fi_FI.UTF-8", LC_NAME = "fi_FI.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Removing user `pi' ... Warning: group `pi' has no more members. Done.
問題
pi
在刪除目前程序後,它總是為使用者創建一個新程序。你怎麼能防止這種情況發生?成功的嘗試$$ Stephen $$
做
masi@raspberrypi:~ $ sudo systemctl stop autologin@tty1 masi@raspberrypi:~ $ ps -fu pi UID PID PPID C STIME TTY TIME CMD masi@raspberrypi:~ $ sudo deluser pi ... masi@raspberrypi:~ & sudo vim /etc/passwd ... pi no longer here! masi@raspberrypi:~ & sudo deluser -remove-home pi
問題的解決方案在這裡
locale
的執行緒中。替換
autologin-user=pi
為autologin-user=masi
in/etc/lightdm/lightdm.conf
。如何成功刪除pi使用者?
您的
pi
使用者已登錄,在tty1
; 您應該在刪除使用者之前將其註銷。(該menu-cached
程序被 LXDE 桌面環境使用。可能還有其他程序正在為使用者執行pi
。)如果您無權訪問 GUI 以將使用者註銷(即,您正在遠端訪問 Raspberry Pi),最安全的選擇可能是停止桌面管理器:
sudo service lightdm stop
(假設您使用的是 LXDE 預設值);這應該殺死所有
pi
的程序。您還需要停用自動登錄 (
login -f
)。如果你有一個 old-style
inittab
,編輯你的/etc/inittab
文件,並替換看起來像這樣的行1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
(重要的部分是
/bin/login -f pi tty1
)1:2345:respawn:/sbin/getty 115200 tty1
然後
init
通過執行重新載入sudo telinit q
使用用於自動登錄的 systemd 單元,例如您的
autologin
服務,禁用該服務:sudo systemctl --now disable autologin@tty1
這也將停止設備並重新載入 systemd 配置。
此時,如果
pi
仍有任何正在執行的程序(如 所示ps -fu pi
),則殺死它們——它們不應再重生。