package Xconfig; # $Id$ use diagnostics; use strict; use common qw(:common :file :system); use mouse; use devices; use Xconfigurator; # otherwise uses the rule substr($keymap, 0, 2) my %keymap_translate = ( cf => "ca_enhanced", uk => "gb", ); 1; sub keymap_translate { $keymap_translate{$_[0]} || substr($_[0], 0, 2); } sub getinfo { my $o = shift || {}; getinfoFromDDC($o); getinfoFromSysconfig($o); add2hash($o->{mouse}, mouse::detect()) unless $o->{mouse}{XMOUSETYPE}; $o->{mouse}{device} ||= "mouse" if -e "/dev/mouse"; $o; } sub getinfoFromXF86Config { my $o = shift || {}; #- original $::o->{X} which must be changed only if sure! my $prefix = shift || ""; my (%keyboard, %mouse, %wacom, %card, %monitor); my (%c, $depth, $driver); local $_; local *G; open G, "$prefix/etc/X11/XF86Config-4"; while () { if (my $i = /^Section "InputDevice"/ .. /^EndSection/) { %c = () if $i == 1; $c{driver} = $1 if /^\s*Driver\s+"(.*?)"/; $c{xkb_keymap} ||= $1 if /^\s*Option\s+"XkbLayout"\s+"(.*?)"/; $c{XMOUSETYPE} ||= $1 if /^\s*Option\s+"Protocol"\s+"(.*?)"/; $c{device} ||= $1 if /^\s*Option\s+"Device"\s+"\/dev\/(.*?)"/; $c{chordmiddle} ||= $1 if /^\s*Option\s+"ChordMiddle"\s+"\/dev\/(.*?)"/; $c{nbuttons} = 2 if /^\s*Option\s+"Emulate3Buttons"\s+/; $c{nbuttons} ||= 3 if /^\s*#\s*Option\s+"Emulate3Buttons"\s+/; $c{nbuttons} ||= 5 if /^\s*#\s*Option\s+"ZAxisMapping"\s.*5/; $c{nbuttons} = 7 if /^\s*#\s*Option\s+"ZAxisMapping"\s.*7/; if ($i =~ /E0/) { @keyboard{qw(xkb_keymap)} = @c{qw(xkb_keymap)} if $c{driver} =~ /keyboard/i; @mouse{qw(XMOUSETYPE device chordmiddle nbuttons)} = @c{qw(XMOUSETYPE device chordmiddle nbuttons)} if $c{driver} =~ /mouse/i; @wacom{qw(device)} = @c{qw(device)} if $c{driver} =~ /wacom/i; } } elsif (/^Section "Monitor"/ .. /^EndSection/) { $monitor{type} ||= $1 if /^\s*Identifier\s+"(.*?)"/; $monitor{hsyncrange} ||= $1 if /^\s*HorizSync\s+(.*)/; $monitor{vsyncrange} ||= $1 if /^\s*VertRefresh\s+(.*)/; $monitor{vendor} ||= $1 if /^\s*VendorName\s+"(.*?)"/; $monitor{model} ||= $1 if /^\s*ModelName\s+"(.*?)"/; $monitor{modelines}{"$1_$2"} = $_ if /^\s*Mode[lL]ine\s+(\S+)\s+(\S+)\s+/; } elsif (my $s = /^Section "Screen"/ .. /^EndSection/) { $card{default_depth} ||= $1 if /^\s*DefaultColorDepth\s+(\d+)/; if (my $i = /^\s*Subsection\s+"Display"/ .. /^\s*EndSubsection/) { undef $depth if $i == 1; $depth = $1 if /^\s*Depth\s+(\d*)/; if (/^\s*Modes\s+(.*)/) { my $a = 0; unshift @{$card{depth}{$depth || 8} ||= []}, #- insert at the beginning for resolution_wanted! grep { $_->[0] >= 640 } map { [ /"(\d+)x(\d+)"/ ] } split ' ', $1; } } } } close G; local *F; open F, "$prefix/etc/X11/XF86Config"; while () { if (/^Section "Keyboard"/ .. /^EndSection/) { $keyboard{xkb_keymap} ||= $1 if /^\s*XkbLayout\s+"(.*?)"/; } elsif (/^Section "Pointer"/ .. /^EndSection/) { $mouse{XMOUSETYPE} ||= $1 if /^\s*Protocol\s+"(.*?)"/; $mouse{device} ||= $1 if m|^\s*Device\s+"/dev/(.*?)"|; $mouse{cleardtrrts} ||= 1 if m/^\s*ClearDTR\s+/; $mouse{cleardtrrts} ||= 1 if m/^\s*ClearRTS\s+/; $mouse{chordmiddle} ||= 1 if m/^\s*ChordMiddle\s+/; $mouse{nbuttons} = 2 if m/^\s*Emulate3Buttons\s+/; $mouse{nbuttons} ||= 3 if m/^\s*#\s*Emulate3Buttons\s+/; $mouse{nbuttons} ||= 5 if m/^\s*ZAxisMapping\s.*5/; $mouse{nbuttons} = 7 if m/^\s*ZAxisMapping\s.*7/; } elsif (/^Section "XInput"/ .. /^EndSection/) { if (/^\s*SubSection "Wacom/ .. /^\s*EndSubSection/) { $wacom{device} ||= $1 if /^\s*Port\s+"\/dev\/(.*?)"/; } } elsif (/^Section "Monitor"/ .. /^EndSection/) { $monitor{type} ||= $1 if /^\s*Identifier\s+"(.*?)"/; $monitor{hsyncrange} ||= $1 if /^\s*HorizSync\s+(.*)/; $monitor{vsyncrange} ||= $1 if /^\s*VertRefresh\s+(.*)/; $monitor{vendor} ||= $1 if /^\s*VendorName\s+"(.*?)"/; $monitor{model} ||= $1 if /^\s*ModelName\s+"(.*?)"/; $monitor{modelines}{"$1_$2"} = $_ if /^\s*Mode[lL]ine\s+(\S+)\s+(\S+)\s+/; } elsif (my $i = /^Section "Device"/ .. /^EndSection/) { %c = () if $i == 1; $c{type} ||= $1 if /^\s*Identifier\s+"(.*?)"/; $c{memory} ||= $1 if /VideoRam\s+(\d+)/; $c{flags}{needVideoRam} ||= 1 if /^\s*VideoRam\s+/; $c{vendor} ||= $1 if /^\s*VendorName\s+"(.*?)"/; $c{board} ||= $1 if /^\s*BoardName\s+"(.*?)"/; $c{driver} ||= $1 if /^\s*Driver\s+"(.*?)"/; $c{options_xf3}{$1} ||= 1 if /^\s*Option\s+"(.*?)"/; $c{options_xf3}{$1} ||= 0 if /^\s*#\s*Option\s+"(.*?)"/; add2hash(\%card, \%c) if ($i =~ /E0/ && $c{type} && $c{type} ne "Generic VGA"); } elsif (my $s = /^Section "Screen"/ .. /^EndSection/) { undef $driver if $s == 1; $driver = $1 if /^\s*Driver\s+"(.*?)"/; if ($driver eq $Xconfigurator::serversdriver{$card{server}}) { $card{default_depth} ||= $1 if /^\s*DefaultColorDepth\s+(\d+)/; if (my $i = /^\s*Subsection\s+"Display"/ .. /^\s*EndSubsection/) { undef $depth if $i == 1; $depth = $1 if /^\s*Depth\s+(\d*)/; if (/^\s*Modes\s+(.*)/) { my $a = 0; unshift @{$card{depth}{$depth || 8} ||= []}, #- insert at the beginning for resolution_wanted! grep { $_->[0] >= 640 } map { [ /"(\d+)x(\d+)"/ ] } split ' ', $1; } } } } } close F; #- clean up modeline by those automatically given by $modelines_text. foreach (split /\n/, $Xconfigurator::modelines_text) { delete $monitor{modelines_}{"$1_$2"} if /^\s*Mode[lL]ine\s+(\S+)\s+(\S+)\s+(.*)/; } $monitor{modelines} .= $_ foreach values %{$monitor{modelines_}}; delete $monitor{modelines_}; #- get the default resolution according the the current file. #- suggestion to take into account, but that have to be checked. $o->{card}{suggest_depth} = $card{default_depth}; if (my @depth = keys %{$card{depth}}) { $o->{card}{suggest_wres} = ($card{depth}{$o->{card}{suggest_depth} || $depth[0]}[0][0]); } #- try to merge with $o, the previous has been obtained by ddcxinfos. add2hash($o->{keyboard} ||= {}, \%keyboard); add2hash($o->{mouse} ||= {}, \%mouse); $o->{wacom} ||= $wacom{device}; add2hash($o->{monitor} ||= {}, \%monitor); $o; } sub getinfoFromSysconfig { my $o = shift || {}; my $prefix = shift || ""; add2hash($o->{mouse} ||= {}, { getVarsFromSh("$prefix/etc/sysconfig/mouse") }); if (my %keyboard = getVarsFromSh "$prefix/etc/sysconfig/keyboard") { $o->{keyboard}{xkb_keymap} ||= keymap_translate($keyboard{KEYTABLE}) if $keyboard{KEYTABLE}; } $o; } sub getinfoFromDDC { my $o = shift || {}; my $O = $o->{monitor} ||= {}; #- return $o if $O->{hsyncrange} && $O->{vsyncrange} && $O->{modelines}; devices::make("/dev/zero"); #- needed by ddcxinfos my ($m, @l) = `ddcxinfos`; $? == 0 or return $o; $o->{card}{memory} ||= to_int($m); local $_; while (($_ = shift @l) ne "\n") { my ($depth, $x, $y) = split; $depth = int(log($depth) / log(2)); if ($depth >= 8 && $x >= 640) { push @{$o->{card}{depth}{$depth}}, [ $x, $y ] unless scalar grep { $_->[0] == $x && $_->[1] == $y } @{$o->{card}{depth}{$depth}}; push @{$o->{card}{depth}{32}}, [ $x, $y ] if $depth == 24 && ! scalar grep { $_->[0] == $x && $_->[1] == $y } @{$o->{card}{depth}{32}}; } } my ($h, $v, $size, @m) = @l; chop $h; chop $v; $O->{hsyncrange} ||= $h; $O->{vsyncrange} ||= $v; $O->{size} ||= to_float($size); $O->{modelines} ||= join '', @m; $o; } quot;en"; var w = new Object(); //Localization txt_filesfound = 'Résultats'; txt_enter_at_least_1_char = "Vous devez saisir au moins un caractère."; txt_browser_not_supported = "JavaScript est désactivé dans votre navigateur. Veuillez activer JavaScript pour bénéficier de toutes les fonctionnalités de ce site."; txt_please_wait = "Merci de patienter. La recherche est en cours..."; txt_results_for = "Résultats pour : "; txt_no_results_for = ""; </script><style type="text/css"> input { margin-bottom: 5px; margin-top: 2px; } .folder { display: block; height: 22px; padding-left: 20px; background: transparent url(../../common/jquery/treeview/images/folder.gif) 0 0px no-repeat; } </style><link rel="shortcut icon" href="https://www.mageia.org/g/favicon.png" type="image/x-icon"/><link rel="stylesheet" type="text/css" href="../../common/css/positioning.css"/><link rel="stylesheet" type="text/css" href="../../common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css"/><link rel="stylesheet" type="text/css" href="../../common/jquery/treeview/jquery.treeview.css"/><link rel="stylesheet" type="text/css" href="webhelp-default.css"/><link rel="stylesheet" type="text/css" href="webhelp-custom.css"/><script type="text/javascript" src="../../common/jquery/jquery-1.4.2.min.js"><!----></script><script type="text/javascript" src="../../common/jquery/jquery-ui-1.8.2.custom.min.js"><!----></script><script type="text/javascript" src="../../common/jquery/jquery.cookie.js"><!----></script><script type="text/javascript" src="../../common/jquery/treeview/jquery.treeview.min.js"><!----></script><script type="text/javascript" src="search/htmlFileList.js"><!----></script><script type="text/javascript" src="search/htmlFileInfoList.js"><!----></script><script type="text/javascript" src="nwSearchFnt.js"><!----></script><script type="text/javascript" src="search/stemmers/en_stemmer.js"><!--//make this scalable to other languages as well.--></script><script type="text/javascript" src="search/index-1.js"><!----></script><script type="text/javascript" src="search/index-2.js"><!----></script><script type="text/javascript" src="search/index-3.js"><!----></script></head><body><div xmlns="" id="header"><div id="navheader"><!----><table><tr><td style="height: 28px; width: 16px;"><a id="showHideButton" onclick="showHideToc();" class="pointLeft" title="Hide TOC tree">. </a></td><td><img src="../../common/images/highlight-blue.gif" alt="H" height="25px" onclick="toggleHighlight()" id="showHideHighlight" style="cursor:pointer" title="Surligner les résultats de recherche dans le texte"/></td><td><a accesskey="p" href="formatPartitions.html">Précédent</a>  | <a accesskey="n" href="setupBootloader.html">Suivant</a></td></tr></table></div><div id="headerlogo"><img src="https://doc.mageia.org/g/mageia-2013-200p.png" alt="Company Logo"/></div><h1 id="pagetitle">Conserver ou supprimer le matériel inutilisé<br/> </h1></div><div id="content"><!----><div xml:lang="fr" class="section" title="Conserver ou supprimer le matériel inutilisé"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="unused"><!----></a>Conserver ou supprimer le matériel inutilisé</h2></div></div></div><div class="mediaobject" align="center"><img src="images/live-unused.png" align="middle"/></div><p>Pendant cette étape, l'installateur recherche les paquetages inutilisés (matériel, langues). Il vous propose ensuite de les supprimer. Il est judicieux d'accepter, excepté si vous préparez une installation s'exécutant sur des configurations matériel différentes.</p><div class="mediaobject"><img src="images/live-unused-InstallationProgress.png"/></div><p>La prochaine étape consistera à copier les fichiers sur le disque dur. Ceci peut prendre quelques minutes. A la fin, vous verrez s'afficher un écran