home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / modules / Console.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  213 lines

  1. /**
  2.  * File:
  3.  *    Console.ycp
  4.  *
  5.  * Module:
  6.  *    Console
  7.  *
  8.  * Depends:
  9.  *    Language
  10.  *
  11.  * Summary:
  12.  *    provide console specific stuff (esp. font and encoding)
  13.  *<BR>
  14.  * sysconfig /etc/sysconfig/console:<BR>
  15.  *<UL>
  16.  *<LI>    CONSOLE_FONT        string    console font</LI>
  17.  *<LI>    CONSOLE_SCREENMAP    string    console screenmap</LI>
  18.  *<LI>    CONSOLE_UNICODEMAP    string    console unicode map</LI>
  19.  *<LI>    CONSOLE_MAGIC        string    console magic control sequence</LI>
  20.  *<LI>    CONSOLE_ENCODING    string    console encoding</LI>
  21.  *</UL>
  22.  *
  23.  * $Id: Console.ycp 28383 2006-02-25 21:42:10Z olh $
  24.  *
  25.  * Author:
  26.  *    Klaus Kaempf <kkaempf@suse.de>
  27.  *
  28.  */
  29.  
  30. {
  31.     module "Console";
  32.  
  33.     import "Mode";
  34.     import "Language";
  35.     import "Linuxrc";
  36.     import "Encoding";
  37.     import "Stage";
  38.  
  39.     // current base language, used in Check
  40.     string language    = "en_US";
  41.  
  42.     string font        = "lat1-16.psfu";
  43.     string unicodeMap    = "";
  44.     string screenMap    = "none";
  45.     string magic    = "(B";
  46.  
  47.     // non-empty if serial console (written /etc/inittab)
  48.     // -> S0:1235:respawn:/sbin/agetty -L 9600<n8> ttyS0
  49.     // something like "ttyS0,9600" from /etc/install.inf
  50.     string serial    = "";
  51.  
  52.     /**
  53.      * activate a language specific console font
  54.      *
  55.      * @param    string    language    ISO code of language
  56.      * @return    string    encoding    encoding for console i/o
  57.      */
  58.  
  59.     global define string SelectFont (string lang)
  60.     ``{
  61.  
  62.     list consolefont = [];
  63.  
  64.     map consolefonts = (map)WFM::Read (.local.yast2, "consolefonts.ycp");
  65.  
  66.     string fqlanguage = Language::GetLocaleString(lang);
  67.     consolefont = consolefonts[fqlanguage]:[];
  68.  
  69.     if( size(consolefont)==0 )
  70.         {
  71.         consolefont = consolefonts[lang]:[];
  72.         }
  73.  
  74.     if ((size (consolefont) == 0) && (size (lang) > 2))
  75.     {
  76.         consolefont = consolefonts[substring(lang, 0, 2)]:[];
  77.     }
  78.  
  79.     if (size (consolefont) > 0)
  80.     {
  81.         language    = lang;
  82.  
  83.         font    = consolefont[0]:"";
  84.         unicodeMap  = consolefont[1]:"";
  85.         screenMap    = consolefont[2]:"";
  86.         magic    = consolefont[3]:"";
  87.  
  88.         string currentLanguage = WFM::GetLanguage ();
  89.  
  90.         // Eventually must switch languages to get correct encoding
  91.         if (currentLanguage != language)
  92.         {
  93.         string currentEncoding = WFM::GetEncoding();    // save encoding
  94.  
  95.         Encoding::console = WFM::SetLanguage (language);// switch lang, get proposed encoding
  96.  
  97.         WFM::SetLanguage (currentLanguage, currentEncoding);// reset as it was before
  98.         }
  99.  
  100.         if (Linuxrc::braille ())
  101.         {
  102.         SCR::Execute (.target.bash, "/usr/bin/setfont");
  103.         }
  104.         else
  105.         {
  106.         //UI::SetConsoleFont (magic, font, screenMap, unicodeMap, encoding);
  107.         UI::SetConsoleFont (magic, font, screenMap, unicodeMap, language);    
  108.         }
  109.     }
  110.  
  111.     y2milestone ("Language %1 -> Console encoding %2", language,
  112.         Encoding::console);
  113.     return Encoding::console;
  114.     };
  115.  
  116.     /**
  117.      * save data to system (rc.config agent)
  118.      */
  119.  
  120.     global define void Save ()
  121.     ``{
  122.     SCR::Write (.sysconfig.console.CONSOLE_FONT,       font);
  123.     SCR::Write (.sysconfig.console.CONSOLE_SCREENMAP,  screenMap);
  124.     SCR::Write (.sysconfig.console.CONSOLE_UNICODEMAP, unicodeMap);
  125.     SCR::Write (.sysconfig.console.CONSOLE_MAGIC,       magic);
  126.  
  127.     SCR::Write (.sysconfig.console.CONSOLE_ENCODING, WFM::GetEncoding() );
  128.     SCR::Write (.sysconfig.console.CONSOLE_ENCODING.comment, "\n# Encoding used for output of non-ascii characters.\n#\n");
  129.     SCR::Write (.sysconfig.console, nil);
  130.  
  131.     if (serial != "")
  132.     {
  133.         /*
  134.          * during a fresh install, provide the autoconsole feature
  135.          * it detects wether the kernel console is VGA/framebuffer or serial
  136.          * it also starts agetty with the correct speed (#41623)
  137.          * fresh install, all is easy: just add the getty to /dev/console
  138.          * upgrade: disable old entries for serial console
  139.          */
  140.          SCR::Execute (.target.bash,"sed -i '/^\\(hvc\\|hvsi\\|S[0-9]\\)/s@^.*@#&@' /etc/inittab");
  141.          SCR::Execute (.target.bash,"grep -E '^cons:' /etc/inittab || /bin/echo 'cons:1235:respawn:/sbin/smart_agetty -L 42 console' >> /etc/inittab");
  142.          SCR::Execute (.target.bash,"grep -Ew ^console /etc/securetty || /bin/echo console >> /etc/securetty");
  143.     }
  144.     }
  145.  
  146.     /**
  147.      * restore data to system (rc.config agent)
  148.      * returns encoding
  149.      */
  150.     global define string Restore ()
  151.     ``{
  152.     font       = (string)SCR::Read (.sysconfig.console.CONSOLE_FONT);
  153.     screenMap  = (string)SCR::Read (.sysconfig.console.CONSOLE_SCREENMAP);
  154.     unicodeMap = (string)SCR::Read (.sysconfig.console.CONSOLE_UNICODEMAP);
  155.     magic       = (string)SCR::Read (.sysconfig.console.CONSOLE_MAGIC);
  156.     language   = (string)SCR::Read (.sysconfig.language.RC_LANG);
  157.     y2milestone( "encoding %1", Encoding::console );
  158.     return Encoding::console;
  159.     }
  160.  
  161.     /**
  162.      * initialize console settings
  163.      */
  164.     global define void Init () {
  165.  
  166.     if (Linuxrc::braille ())
  167.     {
  168.         SCR::Execute (.target.bash, "/usr/bin/setfont");
  169.     }
  170.     else
  171.     {
  172.         UI::SetConsoleFont (magic, font, screenMap, unicodeMap, language);
  173.     }
  174.     }
  175.  
  176.     /**
  177.      * Check current configuration
  178.      * This function should be called to check consistency with
  179.      * other modules (mentioned as Depends in the header)
  180.      * @return    0    if no change
  181.      *         1    change due to dependency with other module
  182.      *        2    inconsistency detected
  183.      *
  184.      */
  185.  
  186.     global define boolean Check ()
  187.     ``{
  188.     return true;
  189.     }
  190.  
  191.     /**
  192.      * constructor
  193.      * does nothing in initial mode
  194.      * restores console configuration from /etc/sysconfig
  195.      * in normal mode
  196.      */
  197.  
  198.     global define void Console ()
  199.     ``{
  200.     if (Stage::initial ())
  201.     {
  202.         serial = Linuxrc::InstallInf ("Console");
  203.         if (serial == nil) serial = "";
  204.     }
  205.     else
  206.     {
  207.         Restore ();
  208.     }
  209.  
  210.     return;
  211.     }
  212. }
  213.