Bagaimana cara me-restart GNOME Shell dari baris perintah?


51

Saya ingin menerapkan cara pintas keyboard untuk me-restart gnome-shell setiap kali crash ( beberapa bug saat ini belum diperbaiki). Untuk ini saya perlu baris perintah untuk me-restart shell.

Perintah Alt+ F2dan restarttidak akan berfungsi ketika shell terhenti karena prompt diimplementasikan di shell.

Oleh karena itu, bagaimana cara me-restart gnome-shell dari command line?


CATATAN: Alt + F2 dan restartakan menghentikan semua program yang sedang berjalan. (Saya masih tidak tahu cara me-restart GUI tanpa menghentikan program.)
— Andriy Makukha

Jawaban:


48

Perintah untuk mengganti shell gnome adalah gnome-shell --replace.

Dari halaman manual gnome-shell:

--replace             Replace the running window manager

2
Terima kasih, saya tidak yakin --replace= "restart".
— Benjamin

4
Pada GNOME Shell 3.30.1 di Ubuntu 18.10, solusi ini tidak lagi berfungsi, dan akan menendang pengguna ke layar login, kehilangan semua pekerjaan mereka. Solusi yang benar sekarang adalah commandline: "killall -3 gnome-shell", atau ALT + f2 dan r (jika mungkin).
— C.Rogers

1
ALT+f2(tampilkan command prompt) + gnome-shell --replaceakan bekerja dengan baik di 18.04. Semua program yang sedang berjalan tidak akan dihentikan.
— lifeisfoo

Saya menambahkan ampersand ke akhir perintah untuk meletakkan proses di latar belakang sehingga saya dapat menutup terminal tanpa membunuh gnome-shell:gnome-shell --replace &
— Teddy

PERINGATAN: gnome-shell --replacepada mesin Ubuntu 19.10 saya menyebabkan sebagian besar aplikasi yang berjalan untuk menutup dan gnome-shell untuk memasuki keadaan masalah dengan layar putih dan prompt untuk me-restart komputer.
— Sparr

31

Cara termudah adalah dengan Alt+ F2dan jenis rkemudian ↵.


5
Itu benar, tetapi sebenarnya bukan pertanyaannya. Pertanyaannya kemudian adalah: apa yang terjadi ketika Anda melakukan ini. Agar Anda bisa melakukannya sendiri
— lihat

4
Pada GNOME Shell 3.30.1 di Ubuntu 18.10, dan commandline: "killall -3 gnome-shell" adalah satu-satunya solusi yang diposting di sini yang berfungsi. Semua yang lain menendang pengguna keluar ke layar masuk, kehilangan semua pekerjaan mereka.
— C.Rogers

1
Mencoba ini di debian buster. Mendapatkan kesalahan "Mulai ulang tidak tersedia di jalan".
— livinston

27

Anda juga dapat melakukan killall -3 gnome-shell.


2
Saya tidak tahu mengapa orang terus merekomendasikan perintah ini. Semua ini dilakukan adalah membunuh gnome-shell. Bagaimana Anda menjawab pertanyaan tentang memulai kembali?
— smac89

1
Mungkin karena ini adalah solusi yang baik di mana perintah lain tidak berfungsi. Saya mencoba keduanya, yang dipilih bagus tapi tidak menyelesaikan masalah saya, sementara ini berhasil.
— Mitro

2
Pada Ubuntu 18.10, GNOME Shell 3.30.1 - INI ADALAH SOLUSI YANG BENAR. Semua solusi lain memulai kembali sesi dan menendang pengguna ke layar login, kehilangan semua pekerjaan mereka.
— C.Rogers

3
SIGQUIT (3) tidak mematikan prosesnya
— Jack Wasey

Ini sepertinya bekerja untuk saya. Padahal saya pernah menggunakan gnome-shell --replace &sebelumnya. Itu bekerja tetapi, terus berjalan di terminal. Masalah yang saya alami adalah dengan video Youtube di layar penuh yang entah bagaimana menyebabkan Dash-to-Dock dan panel membeku tertutup. github.com/micheleg/dash-to-dock/issues/…
— Natetronn

5

Perintahnya seharusnya gnome-shell --replace.


3
Pada GNOME Shell 3.30.1 di Ubuntu 18.10, solusi ini tidak lagi berfungsi, dan akan menendang pengguna ke layar login, kehilangan semua pekerjaan mereka. Solusi yang benar sekarang adalah commandline: "killall -3 gnome-shell", atau ALT + f2 dan r (jika mungkin).
— C.Rogers

tidak berfungsi untuk sesi jarak jauh, jadi ketika gnome shell telah membeku, ini tidak berfungsi.
— Jack Wasey

5

Jika semuanya gnome-shellmenjadi beku ada cara untuk me-restart dari terminal tanpa me-restart seluruh jendela X:

  • Ctrl+ Alt+ F2untuk beralih ke terminal
  • login dengan kredensial Anda (nama pengguna dan kata sandi) dan kemudian jalankan:
  • DISPLAY=:0 gnome-shell -r &
  • logout exitdan
  • Alt+ F1untuk kembali ke antarmuka grafis X Window.

1

Saya datang dengan fungsi ini untuk keluar pengguna (lihat di bagian bawah)

Diasumsikan

  • Anda memiliki izin sudo
  • kamu punya bash
  • pengguna memiliki 1 sesi X berjalan (meskipun Anda harus dapat mengeluarkan perintah logout yang sama beberapa kali untuk menghilangkan sesi yang tersisa)

Anda dapat memberikan beberapa nama pengguna:

logout john jane mike elisa

Dan Anda bisa memberikannya opsi tambahan:

logout john --force

Jadi, saya memiliki fungsi pembantu berikut:

function forcelogout() {
    logout "$@" --no-prompt --force
}

Catatan:

  • Ini adalah instrumen tumpul dan berfungsi hanya dengan menyalin seluruh lingkungan sesi. Ini bisa lebih selektif.
  • Terkadang logout sepertinya memakan waktu cukup lama
  • Dalam kesempatan yang jarang, sesi terus dilaporkan sampai seseorang mengunjungi vt di mana sesi berjalan, tetapi tidak ada yang ada lagi)

KODE

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

Saya mendefinisikan alias: alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

Anda mungkin dapat memulai terminal dengan mengeklik kanan dengan mouse di latar belakang dan mengetik di sana (alt-tab didfct juga,), jika tidak, login ke tty dengan misalnya ctrl-alt-F2 dan jalankan dari sana.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.