จะรีสตาร์ท GNOME Shell จากบรรทัดคำสั่งได้อย่างไร


50

ฉันต้องการใช้แป้นพิมพ์ลัดเพื่อรีสตาร์ท gnome-shell ทุกครั้งที่เกิดปัญหา ( ข้อบกพร่องบางอย่างยังไม่ได้รับการแก้ไขในขณะนี้) สำหรับเรื่องนี้ฉันจะต้องมีบรรทัดคำสั่งเพื่อเริ่มเปลือก

Alt+ F2และrestartคำสั่งจะไม่ทำงานเมื่อเปลือกชนเพราะพรอมต์ที่จะดำเนินการในเปลือก

ดังนั้นวิธีการรีสตาร์ท gnome-shell จาก command line ได้อย่างไร


หมายเหตุ: Alt + F2 และrestartจะหยุดโปรแกรมที่กำลังทำงานอยู่ทั้งหมด (ฉันยังไม่รู้วิธีการเริ่ม GUI ใหม่โดยไม่หยุดโปรแกรม)
Andriy Makukha

คำตอบ:


48

gnome-shell --replaceคำสั่งที่จะเปลี่ยนคำพังเพยเปลือกจะเป็น

จากหน้าคู่มือของgnome-shell:

--replace             Replace the running window manager

2
ขอบคุณฉันไม่แน่ใจ--replace= "เริ่มต้นใหม่"
เบนจามิ

4
ตั้งแต่ GNOME Shell 3.30.1 บน Ubuntu 18.10 โซลูชันนี้ใช้งานไม่ได้อีกต่อไปและจะพาผู้ใช้ไปที่หน้าจอเข้าสู่ระบบทำให้สูญเสียงานทั้งหมด โซลูชันที่ถูกต้องคือ commandline: "killall -3 gnome-shell" หรือ ALT + f2 และ r (ถ้าเป็นไปได้)
C.Rogers

1
ALT+f2(แสดงพรอมต์คำสั่ง) + gnome-shell --replaceจะทำงานได้ดีใน 18.04 โปรแกรมที่ทำงานอยู่ทั้งหมดจะไม่หยุด
lifeisfoo

ฉันเพิ่มเครื่องหมายลงในส่วนท้ายของคำสั่งเพื่อวางกระบวนการในพื้นหลังเพื่อให้สามารถปิดเทอร์มินัลโดยไม่ต้องฆ่า gnome-shell:gnome-shell --replace &
Teddy

31

วิธีที่ง่ายที่สุดคือการAlt+ F2และประเภทแล้วr


5
นั่นเป็นความจริง แต่ไม่ใช่คำถาม คำถามก็คือจะเกิดอะไรขึ้นเมื่อคุณทำสิ่งนี้ เพื่อให้คุณสามารถทำมันเอง
sehe

4
ตั้งแต่ GNOME Shell 3.30.1 บน Ubuntu 18.10 และ commandline: "killall -3 gnome-shell" เป็นคำตอบเดียวที่โพสต์ได้ที่นี่ คนอื่น ๆ ทั้งหมดเตะผู้ใช้ออกจากหน้าจอเข้าสู่ระบบสูญเสียงานของพวกเขาทั้งหมด
C.Rogers

1
ลองสิ่งนี้กับเดเบียนบัสเตอร์ ได้รับข้อผิดพลาด "การเริ่มต้นใหม่ไม่พร้อมใช้งานบน wayland"
livinston

26

killall -3 gnome-shellนอกจากนี้คุณยังสามารถทำ


2
ฉันไม่รู้ว่าทำไมผู้คนแนะนำคำสั่งนี้ต่อไปเรื่อย ๆ ทั้งหมดนี้คือฆ่า gnome-shell คุณตอบคำถามของการเริ่มต้นใหม่ได้อย่างไร
smac89

1
อาจเป็นเพราะนี่เป็นทางออกที่ดีที่คำสั่งอื่นไม่ทำงาน ฉันลองทั้งสองตัวเลือกที่ดี แต่ไม่ได้แก้ปัญหาของฉันในขณะนี้ได้
Mitro

2
ตั้งแต่ Ubuntu 18.10, GNOME Shell 3.30.1 - นี่คือทางออกที่ถูกต้อง โซลูชันอื่นทั้งหมดเริ่มต้นเซสชันใหม่และไล่ผู้ใช้ออกไปที่หน้าจอเข้าสู่ระบบทำให้สูญเสียงานทั้งหมด
C.Rogers

3
SIGQUIT (3) ไม่ฆ่ากระบวนการ
Jack Wasey

ดูเหมือนว่าจะได้ผลสำหรับฉัน ฉันเคยใช้gnome-shell --replace &มาก่อน มันทำงานได้ แต่ยังคงทำงานในสถานี ปัญหาที่ฉันเกิดขึ้นกับวิดีโอ Youtube ในแบบเต็มหน้าจอเป็นสาเหตุทำให้ Dash-to-Dock และแผงควบคุมหยุดการทำงาน github.com/micheleg/dash-to-dock/issues/…
Natetronn

5

gnome-shell --replaceคำสั่งก็ควรจะเป็น


3
ตั้งแต่ GNOME Shell 3.30.1 บน Ubuntu 18.10 โซลูชันนี้ใช้งานไม่ได้อีกต่อไปและจะพาผู้ใช้ไปที่หน้าจอเข้าสู่ระบบทำให้สูญเสียงานทั้งหมด โซลูชันที่ถูกต้องคือ commandline: "killall -3 gnome-shell" หรือ ALT + f2 และ r (ถ้าเป็นไปได้)
C.Rogers

ไม่ทำงานสำหรับเซสชันระยะไกลดังนั้นเมื่อ gnome shell หยุดทำงานสิ่งนี้จะไม่ทำงาน
Jack Wasey

5

ในกรณีที่การgnome-shellแช่แข็งทั้งหมดมีวิธีการรีสตาร์ทจากเทอร์มินัลโดยไม่ต้องเริ่มต้นวินโดว์ X ใหม่ทั้งหมด:

  • Ctrl+ Alt+ F2เพื่อเปลี่ยนเป็นเทอร์มินัล
  • เข้าสู่ระบบด้วยข้อมูลประจำตัวของคุณ (ชื่อผู้ใช้และรหัสผ่าน) จากนั้นเรียกใช้:
  • DISPLAY=:0 gnome-shell -r &
  • ออกจากระบบexitและ
  • Alt+ F1เพื่อสลับกลับไปเป็น X Window ของส่วนต่อประสานกราฟิก

1

ฉันใช้ฟังก์ชันนี้เพื่อออกจากระบบผู้ใช้ (ดูที่ด้านล่าง)

มันถือว่า

  • คุณมีสิทธิ์ 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
}

1

ฉันกำหนดนามแฝง: alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

คุณสามารถเริ่มต้นเทอร์มินัลได้ด้วยการคลิกขวาด้วยเมาส์บนพื้นหลังและพิมพ์ที่นั่น (alt-tab นั้นผิดปกติเช่นกัน) ถ้าไม่ให้ล็อกอินเข้าสู่ tty ด้วยเช่น ctrl-alt-F2 และเรียกใช้จากที่นั่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.