יום ראשון, 27 באוקטובר 2013

מעבר בין מערכות הפעלה ב־grub2

בזמנו כתבתי פה על סקריפט קצר המסוגל להחליף את מערכת ההפעלה שתעלה לאחר הפעלה מחדש של המחשב. השימושיות של אפשרות זו היא ברורה: אתם עובדים באופן קבוע עם לינוקס וצריכים להשתמש בחלונות מדי פעם. כדי לעבור בין מערכות ההפעלה בצורה רגילה יש להפעיל מחדש את המחשב, להיות נוכחים לידו ולבחור בזמן העלייה את את חלונות מתפריט הבחירה של grub2. אם מפספסים את התפריט, עלינו לחכות שהמחשב יסיים לעלות ואז שוב להפעילו מחדש. כדי להפחית את הטרחה, הסקריפט מאפשר לקבוע מראש שבפעם הבאה מערכת חלונות תעלה ולאחר מכן לינוקס תחזור להיות ברירת המחדל.

בגרסתו הישנה, הסקריפט השתמש לצורך הפעלה מחדש בפקודה reboot. כעת עדכנתי את הסקריפט כדי שישתמש בממשק של KDE לצורך ההפעלה מחדש. כמו כן, הסקריפט החדש מונע מקרים בהם אחרי עדכון של הלינוקס (הכוונה לעדכון ה־kernel) שימוש בסקריפט היה גורם לחלונות להפוך לברירת המחדל.

הנה הסקריפט:
#!/bin/bash
kdesudo -c "grub-set-default 0 ; grub-reboot 'Windows 7 (loader) (on /dev/sda2)'"
qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout -1 1 1

השורה השניה מגדירה כל פעם את ברירת המחדל הכללית כמערכת ההפעלה המופיעה ראשונה בתפריט ה־grub2 (כמובן אפשר לשנות זאת על ידי קביעת מספר אחר מ־0). בהמשך אותה שורה, הפקודה grub-reboot קובעת את מערכת ההפעלה חלונות כברירת המחדל להפעלה הקרובה בלבד. כמובן, יש לבחור את השם של מערכת חלונות כפי שהוא מופיע אצלכם ב־grub2. ניתן להיעזר לשם כך בפקודה:
grep menuentry /boot/grub/grub.cfg

השורה השלישית מפעילה את המחשב מחדש דרך הממשק של KDE ולכן אין צורה בהרשאות root עבור פקודה זו. פירוט של הפרמטרים עבור פקודה זו ניתן למצוא פה.

4 תגובות:

  1. אולי כדאי לפתוח באג בגראב, בבקשה שהפיצ'ר הזה יוכנס לדם?
    כלומר, שתהיה אפשרות בשורת הפקודה להגיד לגראב להפעיל באופן חד-פעמי (או כמה פעמים שרוצים) להפעיל מערכת אחרת?
    כך גם תיפתר הבעיה בחזרה מחלונות ללינוקס.

    השבמחק
  2. יש פקודה כזו. זו הפקודה בה הסקריפט שלי משתמש - grub-reboot - היא משנה את ברירת המחדל להפעלה הקרובה של המחשב בלבד (שינוי חד־פעמי). הסקריפט מוסיף על פקודה זו שני דברים חשובים: 1) קביעה של ברירת המחדל להפעלות שלאחר מכן - לכאורה די לעשות זאת פעם אחת אחרי עדכון של הגראב, אבל בדרך זו לא שוכחים. 2) ביצוע ההפעלה מחדש של המחשב.

    השבמחק
  3. למשתמשי אופן סוזה קיים סקריפט כזה עבור grub ו grub2 בשם grub-once ו grub2-once בהתאמה

    את הסקריפט אפשר למצוא פה :
    https://build.opensuse.org/package/view_file/openSUSE:13.1/grub2/grub2-once?expand=1

    השבמחק
    תשובות
    1. הניסיון שלי עם סוזה הוא קטן (ניסיתי פעם אחת את הגרסה המתגלגלת שלהם ולא אהבתי). בכל מקרה, גם הסקריפט שלהם מבוסס על הפקודה grub-reboot אך להבנתי (אינני יודע פרל) הוא לא מפעיל מחדש את המחשב.

      מחק