Як я можу вийти з графічного інтерфейсу за допомогою CLI?


43

Я вибрав Openbox DE під час входу в систему, і система потребувала віку, щоб завантажити DE. Тому я перейшов на CLI ( Ctrl+ Alt+ F1) і перезавантажив свою систему (але я хотів вийти з GUI, а не перезавантажувати всю систему).

Моє запитання: чи можу я видати якусь команду в CLI, щоб вийти з GUI, щоб я міг вибрати інший DE. (Я не хочу перезавантажувати систему щоразу, коли DE зависає.)


$ DISPLAY=:0 gnome-session-quit --force

** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Відповіді:


45

Щоб закінчити всі користувацькі процеси та повернутись на екран входу, ви можете використовувати:

kill -9 -1

Не запускайте це як корінь з причин, обговорених тут .


3
Чудово працює, але чому? Зокрема, чому LightDM перезапускається після того, як ви вбили все, крім init?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Тому що це насильно Вбиває (9) ВСЕ, що це дозволено. Що означає кожен процес, який належить вам. Використовувати SIGKILL для припинення програм абсолютно не рекомендується! Використовуйте SIGTERM (15). Програми можуть реагувати на цей сигнал і робити очищення.
ManuelSchneid3r

22

Це можна зробити за допомогою gnome-session-quitкоманди. Для цього потрібна --forceопція придушити діалогове вікно підтвердження, яке з’явиться без нього.

На відміну від програм, запущених з емулятора терміналу X, закінчення сеансу з TTY вимагає, щоб ви додали DISPLAYзмінну, щоб вказати, на якому дисплеї X працює сеанс. Звідси:

DISPLAY=:0 gnome-session-quit --force

якщо припустити, що ви працюєте з GNOME на: 0, що відбувається у звичайних ситуаціях.

  • У Ubuntu 12.04LTS працює GNOME команда

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    

    працює. Аргумент "--force" не існує в поточному рівні оновлення]


дякую, я запустив команду, але у мене з’явилася помилка. Я відредагував свою публікацію, щоб включити помилку. Будь ласка, поділіться, якщо я щось зробив не так.
Анкіт

Мій поганий, я не помітив, що ви згадали, що використовуєте openbox. На жаль, ця команда працюватиме лише зі стандартною установкою Ubuntu (Unity / GNOME). Як альтернативу, ви можете повністю вимкнути графічний інтерфейс і тим самим запустити свій сеанс sudo service lightdm stop. редагувати: яке середовище робочого столу ви використовуєте? Openbox - це лише менеджер вікон.
Cumulus007

Я намагаюся використовувати kde / openbox або gnome / openbox.
Анкіт

Не працює, якщо ваш термінал не є частиною того ж сеансу dbus, що і сесія gnome. Як ви потрапите на черговий сеанс dbus?
Зан Лінкс

Це команда, яка виконується при натисканні кнопки "Вийти з системи ..." через графічний інтерфейс?
Дор

7

Будь ласка, дотримуйтесь пропозицій таккату . Стандарт - Ctrl+ Alt+ Backspace.

Ви також можете запустити:

$ sudo service lightdm restart

1
gdm було замінено на lightdm. Крім того, ctrl + alt + backspace вимкнено за замовчуванням.
Cumulus007

@ Cumulus007 Спасибі, відповідь оновлена. Я знаю, що ctrl + alt + backspace вимкнено за замовчуванням, ніколи не розумів чому, але я знаю про це. Я просто повідомляю ОП, що таке стандартна, найчастіше використовувана комбінація клавіш. Я вважаю, що найкраще дотримуватися стандартів, оскільки це полегшує усунення несправностей.
terdon

1
Якщо зупинити lightdm, це означає, що після цього не буде запиту на вхід, тому він не отримає шанс увійти в інше середовище.
poolie

1
Досить справедливо @poolie, відповідь оновлена.
тердон

4

Інший спосіб,

sudo pkill -u NameOftheUser

або

sudo pkill x

які вбивають усіх користувачів.


Це трохи суворо, ти не думаєш?
аколіт

Суворий? Це надзвичайно нерозумно.
HörmannHH

2

Справжня проблема полягає в тому, що змінні сеансу DBUS повинні бути встановлені і відповідати сеансу, який ви намагаєтеся контролювати.

Я створив цей скрипт, який встановлює змінні сеансу DBUS із середовища gnome-session у випадку, якщо ви хочете вийти з інших користувачів / сеансів:

Як перезапустити Gnome-Shell з командного рядка?

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
}

Краще використовувати --logout --no-promptабо --forceзамість просто --logout- інакше буде показано запит на вихід із системи.
gioele

1

Якщо ви перебуваєте в сеансі xubuntu або подібному, ви повинні використовувати xfce4-session-logout з командами сеансу gnome, тому ви бачите попередження


1

Ось що для мене найкраще (з xfce, lightdm та ssh):

$ DISPLAY=:0.0 xfce4-session-logout --logout

Або

$ sudo service lightdm restart

0

Як альтернативу, ви можете припинити сеанси роботи з користувачем нижче, працює добре, щоб вийти з користувачів, за винятком кореневого користувача, коли, наприклад, виконуєте технічне обслуговування.

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session

-2

Ви можете скористатися командою killall gnome-sessionдля виходу. Це буде працювати для всіх сеансів GNOME, і якщо я правильно запам’ятав усі, пов’язані з GNOME. Він поверне вас назад до LightDM, щоб ви могли вибрати нового DE або нового користувача. :)


2
Не найкращий спосіб виходу. Перевірте askubuntu.com/questions/69114/…
jokerdino

Ніколи раніше не бачив цього варіанту. Я, мабуть, повинен почати це використовувати. Я гадаю, що killall gnome-sessionце сильний спосіб її закрити.
Ryan McClure
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.