Làm thế nào để khởi động lại vào Windows từ Ubuntu?


35

Tôi đang tìm cách khởi động lại vào Windows từ Ubuntu trên hệ thống khởi động kép 10.10 / Vista. Trường hợp sử dụng cụ thể là tôi muốn có thể ssh vào phiên bản Ubuntu đang chạy của mình và đưa ra lệnh sẽ khởi động lại trực tiếp vào Windows.

Tôi đã tìm thấy một bài đăng trên blog đầy hứa hẹn , nhưng kịch bản mà nó gợi ý không hoạt động:

#!/bin/bash

WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
sudo grub-reboot $MENU_NUMBER
sudo reboot

man grub-reboot không giúp được gì nhiều, nhưng dường như nó đang đưa tôi đi đúng hướng:

đặt mục khởi động mặc định cho GRUB, chỉ cho lần khởi động tiếp theo

WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
echo $MENU_NUMBER

Điều này trả về giá trị mong đợi, nhưng khi khởi động lại, mục menu đầu tiên vẫn được tô sáng. Bất kỳ ý tưởng tại sao điều này không làm việc hoặc đề xuất cho các giải pháp khác?


Nếu bạn sao chép dòng khởi động windows grub vào đầu danh sách trong menu grub thì trên mỗi cửa sổ khởi động sẽ là tải mặc định .. nếu bạn đang ở trong Ubuntu và ssh vào đó. sudo reboot nownên khởi động lại máy vào mục đầu tiên trong danh sách grub.
karthick87

Chắc chắn, nhưng tôi hiếm khi khởi động vào phân vùng Windows đó. Tôi không muốn làm cho nó là mục mặc định.
andrews Something

Câu trả lời:


43
  • Bạn phải chỉnh sửa grub của bạn đầu tiên.

    sudo gedit /etc/default/grub
    
  • Tìm kiếm dòng GRUB_DEFAULT = 0 và sửa đổi nó thành GRUB_DEFAULT = đã lưu văn bản thay thế

  • Cập nhật grub của bạn bằng cách sử dụng lệnh sau.

    sudo update-grub  
    
  • Bây giờ tạo một tập tin kịch bản,

    sudo gedit switch-to-windows.sh
    
  • Sau đó thêm các dòng này.

    #!/bin/bash
    WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
    MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
    sudo grub-reboot $MENU_NUMBER
    sudo reboot
    
  • Làm cho kịch bản thực thi.

    sudo chmod +x switch-to-windows.sh
    
  • Và bây giờ bạn có thể chạy tập lệnh này từ thiết bị đầu cuối để khởi động lại vào windows.

    ./switch-to-windows.sh
    
  • Hoặc bạn có thể thực hiện lệnh sau trong thiết bị đầu cuối của bạn

    sudo grub-reboot X  
    
  • Trong đó X là vị trí menu của HĐH mà bạn muốn khởi động lại từ menu GRUB. (Bắt đầu bằng 0 là mục nhập đầu tiên)

Ví dụ:

  • Nếu đây là menu grub của bạn và nếu bạn muốn khởi động vào windows, bạn nên cho giá trị của X là 5.
  • sudo grub-reboot 5

    văn bản thay thế

  • Bạn cũng có thể tạo một trình khởi chạy cho lệnh trên, để nhấp đúp vào trình khởi chạy sẽ khởi động lại vào cửa sổ.

Tôi có thể làm cho nó hoạt động một lần. Sau đó, bạn phải nhập mật khẩu.

7
Làm thế nào bạn có được grub để trông như thế?
Mandy

Theo dõi câu hỏi trên? Làm thế nào bạn có thể nhận được grub trông rất perty?
Diego

5
Giải pháp thực sự tuyệt vời, nhưng vì tôi có 14 mục menu với tab trước các mục, với tiêu đề của số mục nhập menu hoạt động tốt hơn. Vì vậy, bạn có thể thay đổi mã của mình với #! / Bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-restart "$ WINDOWS_TITLE" sudo restart
Philippe Gachoud

Philippe Gachoud, xin vui lòng làm cho bạn một câu trả lời! nó là cái duy nhất hoạt động
honi

12

Có một lệnh grub chỉ để làm như vậy, nó là grub-reboot.

Nó dường như chỉ hoạt động khi bạn đã cấu hình grub để bắt đầu với mục đã lưu cuối cùng. Vì vậy, nếu bạn chưa làm như vậy, hãy sửa đổi /etc/default/grubvà thiết lập

GRUB_DEFAULT=saved

sau đó cập nhật tập tin cấu hình grub:

sudo update-grub

Từ giờ trở đi, tại mỗi grub khởi động sẽ bắt đầu mục được sử dụng cuối cùng.

Bây giờ, nếu bạn muốn đặt trước hệ thống nên khởi động vào lần tiếp theo, hãy sử dụng

sudo grub-reboot ENTRY

nơi ENTRYcó thể là một số liên quan đến một mục menu (được đánh số bắt đầu từ 0), hoặc một tiêu đề mục menu chính xác , ví dụ

sudo grub-reboot "Microsoft Windows XP Professional (on /dev/sda1)"

Lệnh này có thể dễ dàng được cung cấp dưới dạng launcher

#!/usr/bin/env xdg-open
#
# save as ~/Desktop/reboot-into-windows.desktop
#

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=sh -c 'gksu "grub-reboot 2" && gnome-session-save --shutdown-dialog'
Name=Reboot into Windows
Icon=gnome-panel-launcher

nhưng tôi không biết làm thế nào nó có thể được tích hợp vào menu hệ thống.

Bạn có thể có được tiêu đề mục menu có sẵn với

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 

Không có lý do để thiết lập GRUB_DEFAULT=saved, nó sẽ làm rối cấu hình của bạn. Những gì grub-restart làm là viết next_entry=ENTRYvào /boot/grub/grubenv. Không phải vậy saved_entry=ENTRY. Khởi động lại tiếp theo sẽ tốt mặc dù, grub đọc next_entry. saved-entry=ENTRYKhởi động sau có thể thất bại nếu không có mục nào được lưu như trong grubenv.
mook765

4

Tôi nghĩ rằng tôi đã tìm thấy một cách thậm chí còn đẹp hơn cho những người muốn tương tự trong khi tại địa phương tại máy tính của họ mà không cần ssh.

Một giải pháp để khởi động lại vào một hệ thống cụ thể được chọn thông qua trình khởi chạy thống nhất vừa được đăng trên webupd8. Xem http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Tôi biết đây không phải là chính xác câu hỏi là gì nhưng trong trường hợp ai đó có câu hỏi tương tự sau này thì điều này có thể hữu ích.


3

Theo như tôi hiểu thì đây không phải là chính xác những gì bạn muốn nhưng tôi đoán khá gần. Chỉ cần theo dõi bài viết webupdate liên kết .


3
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Marco Ceppi

2

Vì vậy, đối với tôi tốt nhất là tạo tập lệnh theo grub-rebootlệnh

#!/bin/bash 
WINDOWS_TITLE=$(grep -i 'windows' /boot/grub/grub.cfg|grep "^[^#;]"|cut -d"'" -f2) 
sudo grub-reboot "$WINDOWS_TITLE" 
echo "Your computer will reboot on ${WINDOWS_TITLE} in 3 seconds, press Ctrl+C if you want to abord it"
sleep 3 && sudo reboot

0

Thông tin của mọi người là hữu ích cho tôi nhưng cuối cùng tôi vẫn không thể hoàn thành việc thay đổi mặc định grub và sau đó khởi động lại chỉ bằng một cú nhấp chuột. Sau khi sửa lại trong 2 giờ, tôi phát hiện ra chương trình này giống hệt như tất cả chúng ta đang cố gắng xây dựng và trong 5 phút tôi sẽ khởi động lại vào windows. Cảm ơn tất cả mọi người ở đây là liên kết gian lận cho những người cũng bỏ cuộc. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html


-1

Tôi không chắc chắn nếu điều này 100% cũng sẽ hoạt động trong Ubuntu, nhưng tôi đã từng làm điều này hoạt động trên một máy centos

về cơ bản, bạn sẽ phải cho grub biết id # nào từ grub.conf nó sẽ chạy tiếp theo. Id # có thể được tìm thấy bởi

echo `sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1

vì vậy, trong trường hợp của tôi, ví dụ như đầu ra "4-1" là mục thứ tư trong grub.conf của tôi chứa văn bản "Windows". (Thay thế tên này bằng tên mục nhập thực tế (cũng là một phần) bạn muốn sử dụng. Sau đó, bạn có thể cung cấp tên này để grub như:

echo "savedefault --stage2=/boot/grub/stage2 --default=4-1 --once" | sudo /sbin/grub

và ở lần khởi động lại tiếp theo, nó sẽ tự động khởi động mục bạn đã nói với nó.

tất cả điều này có thể được đặt cùng nhau trong một kịch bản như sau:

#!/bin/sh
let NEWBOOT=`sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1
echo Booting $NEWBOOT - `sudo grep ^title.\*Windows /boot/grub/grub.conf`
echo "savedefault --stage2=/boot/grub/stage2 --default=$NEWBOOT --once" | sudo /sbin/grub
sudo reboot

tập lệnh sẽ tự động xác định mục nhập nào từ grub.conf của bạn tương ứng với văn bản "Windows", sẽ cung cấp thông tin này cho grub để cho biết những gì sẽ được tải trong lần khởi động tiếp theo và sẽ khởi động lại máy tính của bạn.

đối với một gui bạn có thể ví dụ như thêm một biểu tượng phím tắt vào máy tính để bàn của bạn để đạt được điều này.


1
Tệp cấu hình cho grub-legacy là menu.lst, không phải grub.conf. Đối với grub2, nó là grub.cfg, nhưng lệnh thứ hai của bạn chỉ dành cho grub-legacy.
psusi

-4

Chỉ cần chỉnh sửa /boot/grub/grub.cfgvà thay đổi mục nhập mặc định để trỏ đến mục bạn muốn khởi động. Giá trị có thể là số thứ tự của mục nhập (bắt đầu từ số 0 cho mục đầu tiên) hoặc bạn có thể đặt tiêu đề đầy đủ của mục bạn muốn trong dấu ngoặc kép.


2
Đừng tư vấn để sửa đổi boot.cfg, nó sẽ được khôi phục tại mỗi hướng dẫn hoặc tự động update-grub. Người dùng nên sửa đổi /etc/default/grub, thay vào đó.
enzotib

1
@enzotib, vì thay đổi chỉ có nghĩa là liên quan đến lần khởi động tiếp theo, không có lý do gì để làm điều đó theo cách đó.
psusi

2
bạn quên rằng việc chỉnh sửa sai trên tệp đó có thể dẫn đến một hệ thống không thể khởi động
enzotib

1
@enzotib, không thực sự; một trong những điều hay của grub2 là bạn luôn có thể khôi phục thủ công tại dấu nhắc. Ngoài ra, nguy cơ làm hỏng các phần khác của tệp là một đối số nghiêm trọng và nếu bạn nhận được dòng mặc định sai, điều tồi tệ nhất xảy ra là nó mặc định cho mục nhập đầu tiên.
psusi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.