diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/XFdrake | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/tools/XFdrake b/tools/XFdrake new file mode 100755 index 0000000..a1932db --- /dev/null +++ b/tools/XFdrake @@ -0,0 +1,97 @@ +#!/usr/bin/perl + +# XFdrake +# Copyright (C) 1999-2005 Mandriva (pixel@mandrakesoft.com) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +use lib qw(/usr/lib/libDrakX); + +use standalone; #- warning, standalone must be loaded very first, for 'explanations' + +use Xconfig::main; +use Xconfig::xfree; +use Xconfig::default; +use interactive; +use modules; +use common; +use any; +use c; + +my ($configure_this) = grep { !/^-/ } @ARGV; +$configure_this = 'resolution' if $0 =~ /Xdrakres/; +$configure_this ||= $::auto ? 'auto_install' : 'everything'; + +{ + my $in = 'interactive'->vnew('su'); + + my $rc = do { + my $options = { allowFB => listlength(cat_("/proc/fb")) }; + + if ($configure_this eq 'everything') { + check_XFree($in); + my ($_raw_X, $rc) = Xconfig::main::configure_everything_or_configure_chooser($in, $options, $::auto); + $rc; + } elsif ($configure_this eq 'auto_install') { + Xconfig::main::configure_everything_auto_install(Xconfig::default::configure($in->do_pkgs), $in->do_pkgs, {}, $options); + } elsif ($configure_this eq 'monitor') { + Xconfig::main::configure_monitor($in); + } elsif ($configure_this eq 'resolution') { + Xconfig::main::configure_resolution($in); + } + }; + if (!$::auto) { + if ($rc eq 'need_restart') { + ask_for_X_restart($in); + } elsif ($rc eq 'need_reboot') { + $in->ask_warn('', N("You need to reboot for changes to take effect")); + } + } + + $in->exit($rc ? 0 : 1); +} + +sub check_XFree { + my ($in) = @_; + + #- set the standard configuration + foreach ('XF86Config', 'XF86Config-4') { + my $f = "/etc/X11/$_"; + symlinkf("$_.standard", $f) if -l $f && -e "$f.standard"; + } + + my $f = "/usr/X11R6/lib/X11/rgb.txt"; #- this one is on all platform + -e $f or $in->do_pkgs->install('xorg-x11', 'xorg-x11-75dpi-fonts'); + -e $f or die "install Xorg first!\n"; + + system("mount /proc 2>/dev/null"); # ensure /proc is mounted for pci probing +} + +sub ask_for_X_restart { + my ($in) = @_; + + $::isStandalone && $in->isa('interactive::gtk') or return; + + my ($wm, $pid) = any::running_window_manager(); + + if (!$wm) { + $in->ask_warn('', N("Please log out and then use Ctrl-Alt-BackSpace")); + return; + } + + $in->ask_okcancel('', N("You need to log out and back in again for changes to take effect"), 1) or return; + + any::ask_window_manager_to_logout_then_do($wm, $pid, 'killall X'); +} |