summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/XFdrake
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/XFdrake')
-rwxr-xr-xperl-install/standalone/XFdrake102
1 files changed, 74 insertions, 28 deletions
diff --git a/perl-install/standalone/XFdrake b/perl-install/standalone/XFdrake
index f6584fad8..dff5e5f64 100755
--- a/perl-install/standalone/XFdrake
+++ b/perl-install/standalone/XFdrake
@@ -21,47 +21,72 @@ 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 Xconfigurator;
-use Xconfig;
use c;
$::isEmbedded = ($::XID, $::CCPID) = "@ARGV" =~ /--embedded (\w+) (\w+)/;
local $_ = join '', @ARGV;
-/-h/ and die "usage: XFdrake [--xf3] [--beginner] [--expert] [--auto] [--noauto] [--skiptest] [--testing]\n";
+my ($configure_this) = grep { !/^-/ } @ARGV;
+$configure_this ||= 'everything';
-my $X = {};
+/-h/ || $configure_this !~ /^(resolution|monitor|everything|auto_install)/ and die <<'EOF';
+usage: XFdrake [--expert] [--noauto] [--skiptest] [--auto] [everything]
+ XFdrake [--noauto] monitor
+ XFdrake resolution
+EOF
-$::force_xf3 = /-xf3/;
-$::beginner = /-beginner/;
+my $auto = /-auto/;
$::expert = /-expert/;
-$::auto = /-auto/;
$::noauto = /-noauto/;
$::testing = /-testing/;
-$X->{skiptest} = /-skiptest/;
-my $in = 'interactive'->vnew('su', 'X');
+begin:
+{
+ $X->{skiptest} = /-skiptest/;
+
+ my $in = 'interactive'->vnew('su', 'X');
+
+ $::isEmbedded and kill USR2, $::CCPID;
+
+ my $rc = do {
+ if ($configure_this eq 'everything') {
+ check_XFree($in);
+ Xconfig::main::configure_everything($in, Xconfig::default::configure(), $in->do_pkgs, $auto, { allowNVIDIA_rpms => allowNVIDIA_rpms() });
+ } elsif ($configure_this eq 'auto_install') {
+ Xconfig::main::configure_everything_auto_install(Xconfig::default::configure(), $in->do_pkgs, {}, { allowNVIDIA_rpms => allowNVIDIA_rpms() });
+ } elsif ($configure_this eq 'monitor') {
+ Xconfig::main::configure_monitor($in, Xconfig::xfree->read);
+ } elsif ($configure_this eq 'resolution') {
+ Xconfig::main::configure_resolution($in, Xconfig::xfree->read);
+ }
+ };
+ $rc && $rc eq 'config_changed' and ask_for_X_restart($in);
--r '/etc/modules.conf' and modules::mergein_conf('/etc/modules.conf');
+ $in->exit(0) if !$::isEmbedded;
-my $f = "/usr/X11R6/lib/X11/rgb.txt"; #- this one is on all platform (instead of Cards ?)
-$in->do_pkgs->install('XFree86', 'XFree86-75dpi-fonts') if !-e $f;
--e $f or die "install XFree86 first!\n";
+ kill USR1, $::CCPID;
+ goto begin;
+}
-`pidof xfs` > 0 or system("/etc/rc.d/init.d/xfs start") if !$X->{skiptest};
+sub check_XFree {
+ my ($in) = @_;
-system("mount /proc 2>/dev/null"); # ensure /proc is mounted for pci probing
+ my $f = "/usr/X11R6/lib/X11/rgb.txt"; #- this one is on all platform
+ -e $f or $in->do_pkgs->install('XFree86', 'XFree86-75dpi-fonts');
+ -e $f or die "install XFree86 first!\n";
-begin:
-Xconfig::getinfo($X);
-Xconfig::getinfoFromXF86Config($X); #- take default from here at least.
+ system("mount /proc 2>/dev/null"); # ensure /proc is mounted for pci probing
+}
-my $allowNVIDIA_rpms;
-{
+sub allowNVIDIA_rpms {
+ my $allowNVIDIA_rpms;
my (%list, %select);
+
eval {
require urpm;
my $urpm = new urpm;
@@ -90,12 +115,33 @@ my $allowNVIDIA_rpms;
if (!$allowNVIDIA_rpms) {
$allowNVIDIA_rpms = system("modprobe NVdriver 2>/dev/null") == 0 && []; #- empty list but true.
}
+ $allowNVIDIA_rpms;
}
-$::isEmbedded and kill USR2, $::CCPID;
-Xconfigurator::main($X, $in, $in->do_pkgs,
- { allowFB => $::expert,
- allowNVIDIA_rpms => $allowNVIDIA_rpms });
-!$::isEmbedded and $in->exit(0);
-kill USR1, $::CCPID;
-goto begin;
+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('', _("Please log out and then use Ctrl-Alt-BackSpace"));
+ return;
+ }
+
+ $in->ask_okcancel('', _("Please relog into %s to activate the changes", ucfirst (lc $wm)), 1) or return;
+
+ fork and $in->exit;
+ any::ask_window_manager_to_logout($wm);
+
+ open STDIN, "</dev/zero";
+ open STDOUT, ">/dev/null";
+ open STDERR, ">&STDERR";
+ c::setsid();
+ exec qw(perl -e), q{
+ my ($wm, $pid) = @_;
+ for (my $nb = 30; $nb && -e "/proc/$pid"; $nb--) { sleep 1 }
+ system("killall X ; killall -15 xdm gdm kdm prefdm") if $nb;
+ }, $wm, $pid;
+}