ฉันใช้ฟังก์ชันนี้เพื่อออกจากระบบผู้ใช้ (ดูที่ด้านล่าง)
มันถือว่า
- คุณมีสิทธิ์ sudo
- คุณมีทุบตี
- ผู้ใช้มี 1 เซสชันที่ใช้งาน X อยู่ (แม้ว่าคุณควรจะสามารถออกคำสั่งล็อกเอาต์เดียวกันได้หลายครั้งเพื่อกำจัดเซสชันที่เหลืออยู่)
คุณสามารถให้ชื่อผู้ใช้หลายชื่อ:
logout john jane mike elisa
และคุณสามารถให้ตัวเลือกเพิ่มเติมได้:
logout john --force
ดังนั้นฉันมีฟังก์ชั่นตัวช่วยดังต่อไปนี้:
function forcelogout() {
logout "$@" --no-prompt --force
}
หมายเหตุ:
- นี่เป็นเครื่องมือทื่อและทำงานโดยเพียงคัดลอกสภาพแวดล้อมเซสชันทั้งหมด นี่อาจเป็นทางเลือกที่มากกว่า
- บางครั้งการออกจากระบบดูเหมือนจะใช้เวลาสักครู่
- ในโอกาสที่หายากเซสชันจะถูกรายงานต่อไปจนกว่าจะมีคนเข้าชม vt ที่เซสชันนั้นทำงาน แต่ไม่มีอะไรอีกแล้ว
รหัส
function logout() {
local USERNAME
export USERNAMES=( )
while [ -n "$1" ]; do case "$1" in
-* ) break ;;
*) USERNAMES+=( "$1" ); shift ;;
esac; done
for USERNAME in "${USERNAMES[@]}"; do
local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
if [ -n "$SESSION_PID" ]; then
(
sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
echo "gnome-session-quit --logout $@"
) | sudo -u "$USERNAME" sh -;
fi
done
}
restart
จะหยุดโปรแกรมที่กำลังทำงานอยู่ทั้งหมด (ฉันยังไม่รู้วิธีการเริ่ม GUI ใหม่โดยไม่หยุดโปรแกรม)