Как по умолчанию Unity 2D при автоматическом входе в систему [дублировать]

Когда оболочка встречает текст, заключенный в $( ), он: принимает его за команду и (как говорит bodhi.zazen) запускает команду в подоболочке. Заменяет вывод команды вместо всего выражения (включая открытие $( и закрытие )).

Как объясняет ответ, это один из двух доступных синтаксисов для подстановки команд.

«Что ... заставляет вывод этих двух команд быть одинаковыми?»

На самом деле несколько необычно, что выход ls будет точно таким же, как и выход echo $(ls):

ek@Io:~/tmp$ ls
bar  foo
ek@Io:~/tmp$ echo $(ls)
bar foo

ответ heartsmagic обычно отделяет имена файлов на два или более пробела или новую строку. Это помогает нам легче рассказать об этом, особенно потому, что пространства в именах файлов несколько обычны (но несколько последовательных пробелов, менее распространены).

Разделение слов

Когда я побежал echo $(ls) произошло следующее:

Заставляет его быть командой и (как говорит bodhi.zazen) запускает команду в подоболочке. Затем оболочка выполнила разбиение слов, рассматривая bar и foo в качестве отдельных аргументов команды echo вместо одного аргумента, содержащего пробелы.

Когда echo получает несколько аргументов (кроме таких параметров, как -n, которые обрабатываются специально и вообще не печатаются), он распечатывает их все, с одним пробелом между последующими аргументами. echo затем печатает новую строку (если не была выбрана опция -n).

Таким образом, echo $(ls) показывает вывод, например bar foo вместо bar foo.

Если вы запустите ls, и в нем нет файлов или только одного файла, вывод ls будет точно таким же, как вывод echo $(ls). Даже тогда, это не всегда будет одинаково, например, когда имя файла содержит пробелы, отличные от изолированных (одиночных) пространств:

ek@Io:~/tmp2$ touch 'my   file'
ek@Io:~/tmp2$ ls
my   file
ek@Io:~/tmp2$ echo $(ls)
my file

Когда ls печатает несколько файлов, его вывод вряд ли будет точно так же, как вывод $(ls). Аналогично:

echo a b и echo $(echo a b) выдают один и тот же вывод, но echo 'a b' и echo $(echo 'a b') этого не делают.

Это важная вещь, которую нужно знать о подстановке команд - некотируемые подстановки команд подлежат разбиению слов.

Terminal Detection

Если вы хотите предотвратить слово расщепление, вы можете заключить выражение для подстановки команды в двойные кавычки ("). Обычно это достаточно и, в частности, будет работать с приведенными выше примерами echo, а также с примером ls в каталоге с одной записью, содержащей пробелы:

ek@Io:~/tmp2$ echo "$(ls)"
my   file

Однако, как было отмечено выше, вы можете быть удивлены, обнаружив, что то, что вы видите при запуске ls, часто не является тем, что передается на echo вместо "$(ls)":

ek@Io:~/tmp$ ls
bar  foo
ek@Io:~/tmp$ echo "$(ls)"
bar
foo

Это потому, что ls проверяет, является ли echo терминалом один из двух доступных синтаксисов , когда форматирование вывода явно не указано.

[ f36] и echo $(echo a b) выдают одинаковый вывод, но Когда stdout не является терминалом, ls перечисляет каждую запись в своей строке, например ls -1.

В подстановке команд стандартный вывод не является терминалом, потому что вывод команды не отправляется непосредственно на терминал, чтобы вы могли видеть - вместо этого он захватывается оболочкой и используется как часть другая команда.

Чтобы получить форматирование нескольких столбцов при запуске ls с помощью подстановки команды, передайте ему флаг -C: иногда предлагается

ek@Io:~/tmp$ echo "$(ls -C)"
bar  foo

(dir в качестве альтернативы ls -C, а также будет работать для этого, хотя dir ведет себя как ls -C -b, а не просто ls -C.)

Shell Aliasing

Другая причина [ f58] может иногда отличаться от echo "$(ls)", так это то, что ls может быть dir ведет себя как ls -C -b, а не просто ls -C . Запустите alias ls, чтобы проверить; на Ubuntu вы обычно получаете alias ls='ls --color=auto', а это означает, что когда ls появляется как первое слово команды, которую вы запускаете в интерактивном режиме (и в некоторых, но не во всех других случаях), она заменяется на ls --color=auto.

Например, когда я запускаю ls, он отображает каталоги, окрашенные в синий цвет, и исполняемые файлы окрашены в зеленый цвет (а также реализуют многие другие правила раскраски). --color=auto заставляет ls печатать цветной выход, если стандартный вывод является терминалом, а не иначе.

Чтобы получить цветной выход при запуске ls с помощью подстановки команды, передайте ему --color или [ f70]. Если вы хотите, вы можете комбинировать это с -C:

echo $(ls -C --color)

Обратите внимание, что, хотя вы можете сделать ls псевдоним ls --color или ls --color=always вместо ls --color=auto и [ f76] не волнует, является ли стандартный вывод терминалом ... этот псевдоним все равно не приведет к тому, что ls будет выдавать цветной вывод при вызове путем подстановки команды. Это связано с тем, что псевдонимы оболочки (в передают ему параметр --color или --color=always , подобный bash) расширяются только тогда, когда оболочка видит их в качестве первого слова команды (и они не унаследованы подоболочки).

72
задан 18 May 2012 в 16:13

42 ответа

Это может не работать в Ubuntu, но это сработало для меня в Fedora. Мне потребовались дни, и я хотел бы поделиться им:

Перейдите к /usr/share/xsessions и /usr/share/wayland-sessions и добавьте префиксы с другим номером и тире для каждого файла, заканчивающегося на .desktop. Самое низкое число будет по умолчанию. Например, я хочу, чтобы xfce был моим по умолчанию, так что файл называется 1-xfce.desktop

Надеюсь, что это поможет.

0
ответ дан 7 August 2018 в 20:42

Чтобы изменить сеанс по умолчанию в Lightdm

sudo /usr/lib/lightdm/lightdm-set-defaults --session gnome-shell
12
ответ дан 10 August 2018 в 09:05

Я редактировал /etc/lightdm/lightdm.conf с этим контентом:

[SeatDefaults]
greeter-session=unity-greeter
user-session=gnome-shell
autologin-user=paul

И он автоматически запускается в gnome-shell.

23
ответ дан 10 August 2018 в 09:05

, чтобы изменить значение по умолчанию для каждого пользователя, проверьте

/var/lib/AccountsService/users

похоже, что этот набор .dmrc в домашнем доме пользователя.

приветствия

13
ответ дан 10 August 2018 в 09:05

Я считаю, что установка любого из вышеперечисленных значений отменяется последним сеансом пользователей, хранящимся в lightdm. Возможно, вам придется удалить или отредактировать пользовательские файлы в /var/cache/lightdm/dmrc, чтобы включить глобальную настройку по умолчанию. Или индивидуально, отредактировав файл user.dmrc, который имеет следующее содержимое:

[Desktop]
Session=ubuntu
1
ответ дан 10 August 2018 в 09:05

Это может не работать в Ubuntu, но это сработало для меня в Fedora. Мне потребовались дни, и я хотел бы поделиться им:

Перейдите к /usr/share/xsessions и /usr/share/wayland-sessions и добавьте префиксы с другим номером и тире для каждого файла, заканчивающегося на .desktop. Самое низкое число будет по умолчанию. Например, я хочу, чтобы xfce был моим по умолчанию, так что файл называется 1-xfce.desktop

Надеюсь, что это поможет.

0
ответ дан 10 August 2018 в 09:05

Чтобы изменить сеанс по умолчанию в Lightdm

sudo /usr/lib/lightdm/lightdm-set-defaults --session gnome-shell
12
ответ дан 15 August 2018 в 21:57

Я редактировал /etc/lightdm/lightdm.conf с этим контентом:

[SeatDefaults]
greeter-session=unity-greeter
user-session=gnome-shell
autologin-user=paul

И он автоматически запускается в gnome-shell.

23
ответ дан 15 August 2018 в 21:57

, чтобы изменить значение по умолчанию для каждого пользователя, проверьте

/var/lib/AccountsService/users

похоже, что этот набор .dmrc в домашнем доме пользователя.

приветствия

13
ответ дан 15 August 2018 в 21:57

Я считаю, что установка любого из вышеперечисленных значений отменяется последним сеансом пользователей, хранящимся в lightdm. Возможно, вам придется удалить или отредактировать пользовательские файлы в /var/cache/lightdm/dmrc, чтобы включить глобальную настройку по умолчанию. Или индивидуально, отредактировав файл user.dmrc, который имеет следующее содержимое:

[Desktop]
Session=ubuntu
1
ответ дан 15 August 2018 в 21:57

Это может не работать в Ubuntu, но это сработало для меня в Fedora. Мне потребовались дни, и я хотел бы поделиться им:

Перейдите к /usr/share/xsessions и /usr/share/wayland-sessions и добавьте префиксы с другим номером и тире для каждого файла, заканчивающегося на .desktop. Самое низкое число будет по умолчанию. Например, я хочу, чтобы xfce был моим по умолчанию, так что файл называется 1-xfce.desktop

Надеюсь, что это поможет.

0
ответ дан 15 August 2018 в 21:57

Странно, что LightDM (диспетчер отображения Ubuntu 11.10 , который предоставляет графический экран входа в систему ) не помнит ваш выбор в reboots.

Вы можете вручную отредактировать соответствующий файл конфигурации, который называется .dmrc, и находится в вашей домашней папке. В Nautilus (файловый браузер) вам нужно нажать Ctrl + H (или Просмотреть > Показать скрытые файлы ), чтобы увидеть его и другие файлы, начинающиеся с .. Если у вас есть этот файл, который вы, вероятно, сделаете, то его содержимое будет выглядеть следующим образом:

[Desktop]
Session=ubuntu

Для GNOME Classic вы можете изменить его, чтобы сказать:

[Desktop]
Session=gnome-classic

Или для GNOME Classic (без эффектов) вы можете изменить его, чтобы сказать:

[Desktop]
Session=gnome-fallback

Если вам захотелось использовать Unity 2D (сеанс type Ubuntu 2D ), вы можете изменить его, чтобы сказать:

[Desktop]
Session=ubuntu-2d

Если у вас нет файла вообще, вы можете создать его с соответствующим содержимым.

Если вы хотите установить GNOME Classic или GNOME Classic (без эффектов) в качестве типа сеанса по умолчанию для всех пользователей - или вы предпочтете не для, но вышеупомянутый пользовательский метод не работает - тогда вы можете отредактировать /etc/lightdm/lightdm.conf, изменив строку, которая говорит user-session=ubuntu, вместо этого скажите user-session=gnome-classic или user-session=gnome-fallback (или user-session=ubuntu-2d). Несколько соображений, которые следует учитывать при рассмотрении этого вопроса:

  1. Предпочтительно редактировать конфигурационные файлы для каждого пользователя в домашних папках пользователей, если у вас нет причин предпочитать изменение глобальной конфигурации (например, это не работает).
  2. Поскольку это глобальный файл конфигурации и он содержит значительно больше, чем простой параметр конфигурации, который вы собираетесь редактировать, рекомендуется выполнить его резервное копирование перед его редактированием, в Если вы ошибетесь. Вы можете сделать это в терминале, выполнив команду sudo cp /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.old.
  3. Этот файл принадлежит root, поэтому команда sudo выше. Вы также должны отредактировать его как root. Чтобы открыть его в gedit как root, вы можете запустить gksu gedit /etc/lightdm/lightdm.conf (либо в окне терминала, либо в графическом Run Application текстовом поле, когда вы можете получить, нажав Alt + F2) или sudo -H gedit /etc/lightdm/lightdm.conf в окне терминала.

Кажется вероятным, что поведение, которое вы испытываете, является ошибкой, поэтому, собрав дополнительную информацию, посмотрев, работает ли вручную ~/.dmrc, вы можете сообщить об этом как один. Сначала прочтите это внимательно , затем после поиска, чтобы узнать, была ли обнаружена аналогичная ошибка, инициируйте процесс отчетности, вызвав ubuntu-bug с помощью PID работающего процесса lightdm или, почти так же хорошо , запустите ubuntu-bug lightdm ... что должно иметь смысл после того, как вы прочитали , что руководство .

Кстати, помимо Unity (тип сеанса Ubuntu ), Unity 2D (тип сеанса Ubuntu 2D ) и GNOME 3 Fallback ( GNOME Classic и GNOME Classic (без эффектов) ), вы можете также рассмотреть как еще более легкие варианты Xfce4 (установить пакет xubuntu-desktop и выбрать тип сеанса Xubuntu ) и LXDE (установить пакет lubuntu-desktop и выбрать тип сеанса Lubuntu ).

  • В более новых версиях Ubuntu, чем когда-либо, когда этот вопрос изначально был задан, Unity 2D и GNOME 3 Fallback недоступны. (В новейших версиях Unity недоступен.) Но Xfce4 / Xubuntu и LXDE / Lubuntu остаются доступными.
  • В наши дни пользователи, которые использовали GNOME 3 Fallback, скорее всего, предпочтут рабочую среду MATE , предоставляемую пакетом ubuntu-mate-desktop (см. Ubuntu MATE ).
  • Lubuntu остается более легким (т. е. он имеет тенденцию потреблять наименьшее количество ресурсов и работать на более старом оборудовании) , Но это не так полно, как Xubuntu или Ubuntu MATE.

Также есть GNOME 3 с оболочкой GNOME вместо Unity (установите пакет gnome-shell и выберите GNOME) и KDE 4 Плазма (установите пакет kubuntu-desktop и выберите Kubuntu), но вряд ли они будут менее ресурсоемкими, чем перечисленные выше опции.

23
ответ дан 19 August 2018 в 00:19

Другие вопросы по тегам:

Похожие вопросы: