Новомодный сценарий: Обнаружьте клавишу Shift вниз при начальной загрузке

Я хочу создать начальную загрузку потенциал, который позволяет различным upstart/runlevel конфигурациям загружаться основанный на определенных ключевых холмах при начальной загрузке (или комбинации). Как я обнаруживаю ключ вниз событие с новомодным сценарием?

Я нахожусь на 10,04, если это помогает.

Альтернативные методы для достижения того же результата приемлемы, т.е. Как я могу использовать личинку, чтобы сделать это?

Чтобы помочь обеспечить больше ясности, я создаю пошаговую инструкцию, основанную на обоих ответах, данных Tuminoid и Lumbric. (Помогите мне улучшить это, моя интерпретация ответа Tuminoid не работает.)

Примечание: У всех должна быть причина того, чтобы сделать это. Для предоставления значения следующим двум Пошаговым Решениям я опишу свою цель для желания решить новомодные сценарии при начальной загрузке.

Я создаю Живой DVD для перемещения по Интернету под названием Серфингист. Для безопасности я хочу отключить администраторскую учетную запись и оставить непривилегированный счет на работу в сети. Я также хочу дать мне и пользователям способность обновить Серфингиста, таким образом, они могут добавить приложения более онлайн и настроить их учетную запись Серфингиста, затем записать их собственного живого пользовательского Серфингиста ISO. Таким образом, мне будут нужны два профиля начальной загрузки: Серфингист и Обновляет. Один для безопасного перемещения онлайн, другого для того, чтобы обновить и разработка.

Решение Lumbric

Создайте Пользовательский Файл личинки

1. Для добавления пользовательских записей в личинку откройте этот файл с gedit для редактирования:

gksudo gedit/etc/grub.d/40_custom

У Вас будет правильный файл, если Вы будете видеть этот текст в нем:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

2. На другой gedit вкладке, открытой:

/boot/grub/grub.cfg

3. В grub.cfg ищите разделы, которые начинаются:

menuentry

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

Каждый раздел menuentry будет иметь некоторый соответствующий набор скобок:

menuentry ...text left out... {
  ...text left out...

}

это инкапсулирует несколько строк текста. Скопируйте свой раздел записи по умолчанию. Копия со слова menuentry к закрывающей скобке. Мне будут нужны две записи, таким образом, я вставлю свою запись по умолчанию дважды.

Должно выглядеть, что что-то как следующее для двух пользовательских начальных загрузок представляет записи. (Следует иметь в виду, что я вынул текст для создания этого легче читать):

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry ...text left out... {
    ...text left out...

}

menuentry ...text left out... {
    ...text left out...

}

4. Найдите свою строку начальной загрузки путем нажатия ctrl + f. Введите в поле поиска:

Linux / начальная загрузка

Каждое желание строки начальной загрузки должно быть выделено.

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

boot-profile=1

После вставки запись меню должна выглядеть подобной этому:

menuentry ...text left out... {
    ...text left out...
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=66cdrfwec91-0070-32f-b666-c9f2232j23232j ro quiet splash boot-profile=1
}

menuentry ...text left out... {
    ...text left out...
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=66cdrfwec91-0070-32f-b666-c9f2232j23232j ro quiet splash boot-profile=2
}

6. Теперь, мы отредактируем строку, которую мы видим при начальной загрузке. Для записи меню, определенной выше, отредактируйте текст, который является между словом menuentry и первой скобкой. Замена текстовым Серфингистом:

menuentry "Surfer" {
    ...text left out...
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=66cdrfwec91-0070-32f-b666-c9f2232j23232j ro quiet splash boot-profile=1
}

Сделайте то же для Обновляет запись:

menuentry "Remaster" {
    ...text left out...
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=66cdrfwec91-0070-32f-b666-c9f2232j23232j ro quiet splash boot-profile=2
}

7. Сохраните файл 40_custom.

8. Теперь, обновите личинку с этой командой:

sudo update-grub

Примечание: Если Вы делаете какое-либо обновление или установку программ, которые изменяют Ваше ядро, знают о мнении lumbric, высказанном в его ссылке. Как мы можем знать, будет ли наше ядро обновленным? Помогите мне разъяснить, как мы можем предотвратить обновление нашего ядра, не зная это.

9. Перезагрузка. Когда в меню начальной загрузки, ищите свои новые записи. Если Вы видите их, дела идут большие до сих пор. Выберите одну из своих пользовательских записей и совершите нападки, входят.

10. При входе в систему откройте Терминал. Введите эту команду.

кошка/proc/cmdline

Личинка пишет строку начальной загрузки в этот файл. Строка начальной загрузки - то, где Вы добавили boot-profile=1 в конце. Так, при выборе серфингиста затем это должно читать boot-profile=1 в конце или boot-profile=2 при выборе Remaster. В противном случае перечитанный от шага один и корректный любые логические ошибки.

11. Теперь, сценарий должен быть записан, который обработает запись загрузки, выбранную из меню личинки. Я принимаю решение использовать новомодный сценарий, потому что я знаю, как сделать это. Выскочка запустит как можно скорее, проверить содержание/proc/cmdline и использования что определить наш выбор в меню начальной загрузки. Вот выскочка, запускают сценарий:

/etc/bootChoice.conf

12. Мимо следующего текста в:

task
start on startup or bootChoice

script

profile=$(cat /proc/cmdline |sed 's/.*boot-profile=\([0-9]\).*/\1/g')

case $profile in
   1)
      # Run script for Surfer Profile
      initctl emit surferboot
      ;;
   2)
      # Run script for Remaster Profile
      initctl emit remasterboot
      ;;

   *)
      echo Error
      echo "Error" > /error
      ;;
esac

end script

13. Теперь, сигнал будет испускаться на основе нашего выбора. Для обработки каждого сигнала два файла должны быть созданы. Один названный: surfer.conf и другой назвали remaster.conf. Разместите их в/etc/init/. Их содержание будет подобно этому:

# surfer user boot

task
start on surferboot

script
    echo "surfer test-data" > /home/surfer/surfer
end script

Мы видим что, когда сигнал surferboot испускается, что сценарий выше запускается определенный этой строкой: start on surferboot Поместите весь пользовательский код сценария начальной загрузки между script и end script. То же самое будет сделано для, Обновляют.

Я попробовал это, это работает. Спасибо Lumbric.

Решение Tuminoid

Во-первых, мы должны сообщить личинке, которую мы хотим назвать сценарием. Мы поместим путь сценария внутри/etc/default/grub.

1. Откройте файл:/etc/default/grub.

gksudo gedit/etc/default/grub

2. Добавьте эту строку в конце файла:

init =/sbin/preinit

3. Сохраните и выйдите. Затем выполните эту команду:

личинка обновления

Теперь мы создадим файл, что мы сделали личинку, знающую.

4. Создайте файл с gedit:

gksudo gedit/sbin/preinit

5. Вставьте следующий текст внутри:

#!/bin/sh 
EVENT="startup" 
while [ /bin/true ]; do   
  echo "Select boot:"   
  echo " 1) Surfer"   
  echo " 2) Remaster"   
  echo ""   
  read selection   
  case "$selection" in 
1)   
  EVENT="surfer"   
  ;; 
2)   
  EVENT="remaster"   
  ;;
*)   
  ;;   
  esac 
done

exec /sbin/init --startup-event=$EVENT

6. Сделайте исполняемый файл сценария:

chmod +x/sbin/preinit

WIP ОТМЕЧАЮТ: я попробовал это до этой точки, и она не работает. Помогите улучшить эту интерпретацию ответа путем указания, где я иду не так, как надо.

Последний Раздел: Этот незаконченный раздел. Ожидание ясности в первых шагах к концу.

События выше являются новомодными сигналами. Если Вы не использовали новомодные сигналы, они назовут сценарий в каталоге:/etc/init. Так, я сделаю два файла в/etc/init названными:

/etc/init/surfer.conf

/etc/init/remaster.conf

В этих файлах я буду использовать сценарии удара для конфигурирования каждой начальной загрузки.

Я создам в выскочке/etc/gdm/custom.conf для принуждения автовхода в систему, если Серфингист будет выбран. Я также открою/etc/shadow и отключу, обновляет пароль.

С другой стороны, я создам/etc/gdm/custom.conf для принудительного автовхода в систему пользователя, обновляют для того, чтобы обновить и разработка.

7
задан 6 April 2012 в 22:21

2 ответа

Вы не можете сделать этого для Новомодного сценария. Они являются неинтерактивными по своей природе.

То, что Вы могли сделать, делают запись меню Grub, которая указывает на сценарий оболочки как init, предложите Вам тип начальной загрузки, которую Вы хотите (или взаимодействуйте с Вами в так или иначе, Вам нравится), и затем в конце делают exec /sbin/init --startup-event=<type of boot>. Это вызывает событие запуска Выскочки быть чем-то еще, чем startup и можно создать начальную загрузку к тому, что Вы любите.

Например, поместите что-то вроде этого в /sbin/preinit:

#!/bin/sh 
EVENT="startup" 
while [ /bin/true ]; do   
  echo "Select boot:"   
  echo " 1) Normal"   
  echo " 2) Minimal"  
  echo " 3) Foobar"  
  echo ""   
  read selection   
  case "$selection" in 
2)   
  EVENT="minimal-startup"   
  ;; 
3)   
  EVENT="foobar-startup"   
  ;;
*)   
  ;;   
  esac 
done

exec /sbin/init --startup-event=$EVENT

Используя это решение, Вы не должны копировать/etc/init вокруг, но можете иметь хороший статический набор заданий, которые просто выполняются на основе другого сигнала запуска.

1
ответ дан 6 April 2012 в 22:21

Поиски события нажатия клавиши Shift во время загрузки, кажется интересной задачей, но я понятия не имею, как этого добиться. Но я описал в недавний Q & A , как использовать меню GRUB для запуска различных скриптов запуска после входа в систему.

Скрипт из шага 3 предназначен для запуска после входа в систему, но его также можно разместить в /etc/rcXY.

0
ответ дан 6 April 2012 в 22:21

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

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