配置XDM--一種Linux的圖形登錄界面
2024-07-21 02:37:48
供稿:網(wǎng)友
 
             
  本文的最近更新會放在 The Computer Underground: http://www.tcu-inc.com/mark/articles/Kickstart.Html. 
  修改: 
                                                                                              通過在 /etc/x11/xdm/Xservers 文件中加入以下幾行,可以得到四個 xdm 會話,由此可以答應(yīng)四個不同用戶登錄。看上去好象所有精巧的素材設(shè)置只對最后一個會話起作用。不過可能很輕易修正這一點,也許我會在下一篇文章中提到。 
  :0 A local /usr/X11R6/bin/X :0 
  
  :1 B local /usr/X11R6/bin/X :1 
  
  :2 C local /usr/X11R6/bin/X :2 
  
  :3 D local /usr/X11R6/bin/X :3 
  
  -------------------------------------------------------------------------------- 
  
  資源 
  什么是XDM? -- 一種圖形化的登錄界面 
  我的配置 
  結(jié)論 
  
  -------------------------------------------------------------------------------- 
  
  資源 
  
  Chris Carlson 在linux公報中的文章。 
  man xdm 
  我以前寫的文稿。 這些文稿寫于1996年12月,那時我還是一個hacker(真是一種很美妙的感覺)。我想那時侯Linux公報也剛開始發(fā)行。時間過的真快,我本應(yīng)當(dāng)在那時侯就發(fā)表這篇文章的。 
  
  -------------------------------------------------------------------------------- 
  
  什么是XDM?
  簡而言之,xdm 只不過是一種圖形化的登錄界面。當(dāng)你的計算機啟動的時候你可以讓你的老板和朋友們記住你的計算機沒有那種令人厭煩的字符控制臺界面。其實它就是讓你的Linux看上去比他們原想的要“酷”一些。 
  理論上說,雖然這是在Redhat 6.0的環(huán)境下配置的,但對于任何Linux的distributio n,大多數(shù)配置文件都能正常工作。 當(dāng)啟動圖形登錄界面的時候,Redhat 6.0 使用的是gdm,而不是xdm。雖然gdm看上去 要比xdm好的多,但我現(xiàn)在還不能讓gdm象我需要的方式運行。一旦我解決了一些問題,我 會再寫一篇關(guān)于gdm的簡要文章。 
  
  這里有一些需要注重的事項 , 
  
  假如你想要你的 xdm (或者 gdm) 在計算機啟動的時候運行,你應(yīng)該確保在文件 /etc/inittab 中的這一行 
  id:3:initdefault: 
  為 
  id:5:initdefault: 
  請注重,無論你想做什么,都必須在你設(shè)置啟動時運行 xdm之前,使你的 Xwindows 正常工作。假如 Xwindows 無法正常運行的話,你的xdm 也不會正常運行,而且會引起許多問題。 
  從文件/etc/inittab 底部的這一行,你可以清楚的看到RedHat 6.0 使用了gdm 來代替xdm 
  x:5:respawn:/etc/X11/PRefdm -nodaemon 
  因此把這一行改為, 
  x:5:respawn:/usr/bin/X11/xdm -nodaemon 
  我修改的所有文件都在 "/etc/X11/xdm" 目錄下。 
  
  -------------------------------------------------------------------------------- 
  
  我的配置文件
  我只對下列幾個文件感愛好, 
  /etc/X11/xdm/Xsetup_0 
  /etc/X11/xdm/Xresources 
  /etc/X11/xdm/GiveConsole 
  /etc/rc.d/rc.change_graphic 
  /etc/rc.d/rc.local 
  /etc/inittab <-- 這個文件在前面已經(jīng)解釋過了 。 
  另外,圖形文件位于 /etc/X11/xdm/graphics/ 目錄下。 
  我的目的是改變xdm使它具有一個xeyes,一個圣誕老人,一個鐘,一個圖片以及選擇 在登錄前的背景色。登錄后讓圣誕老人死掉。酷吧? 
  
  好吧,現(xiàn)在讓我們一步一步的來做: 
  
  拷貝我的 graphics perl script 到"/etc/rc.d/rc.change_graphic"。這個文件改變了顯示在屏幕上的圖形。圖像作為gif文件存儲在“/etc/x11/xdm/graphics”目錄下。 
  拷貝我的kill santa perl script 到 "/etc/X11/xdm/KillXsnow"。這個文件殺死了圣誕老人,他慢慢地掉落桌面。 
  拷貝我的 Xsetup script 到 "/etc/X11/xdm/Xsetup_0". 這個程序和圖形登錄界面一起運行。
                          
  拷貝我的 Xresources script 到 "/etc/X11/xdm/Xresources". 這個文件設(shè)置了xdm的外觀。 
  拷貝我的 GiveConsole script到 "/etc/X11/xdm/GiveConsole". 這個文件決定了在Xwindows移交給用戶之前要執(zhí)行的一些程序。 
  把 這個命令 加到 "/etc/rc.d/rc.local" 文件中。以確保在啟動的時候得到我們定義的圖像 。 
  拷貝我的 gif 文件 到"/etc/X11/xdm/graphics/" 目錄下,并且執(zhí)行 
  tar -C / -zxvf xdm.tgz 
  這些就是我使用的一些圖象。 
  
  -------------------------------------------------------------------------------- 
  
  這里是配置文件的其余部分: 
  
  -------------------------------------------------------------------------------- 
  
  Change graphics perl script
  位于 "/etc/rc.d/rc.change_graphic"。 在拷貝之后執(zhí)行命令 "chmod 755 /etc/rc.d/rc.change_graphic"。 
  #!/usr/bin/perl 
  
  
  @Files = 〈/etc/X11/xdm/graphics/*.gif〉; 
  
  
  #print @Files; 
  
  
  $Length = @Files; 
  
  $Seconds = `date +%S`; 
  
  chomp $Second; 
  
  $Frac = $Seconds/60; 
  
  if (!($Frac > 0)) {$Frac=1} 
  
  
  $Random = $Frac*$Length; 
  
  ($Random,$Junk) = split(//./, $Random,2); 
  
  
  if (($Random < 1)  ($Random > $Length -1)) {$Random = 1} 
  
  $File = $Files[$Random]; 
  
  
  $Rand2 = rand $Length; 
  
  ($Rand2,$Junk) = split(//./, $Rand2,2); 
  
  
  $Random = $Random + $Rand2; 
  
  if ($Random > $Length - 1) {$Random = $Random - $Length + 1;} 
  
  
  #print "$Length $Random $File/n"; 
  
  
  if (-e "/etc/X11/xdm/xdm_front.gif") {system "rm /etc/X11/xdm/xdm_front.gif"} 
  
  
  if (@Files < 1) 
  
  { 
  
  ## Some sort of error messege should be here. 
  
  } 
  
  else 
  
  {system "ln -s $File /etc/X11/xdm/xdm_front.gif";} 
  
  -------------------------------------------------------------------------------- 
  
  Kill Santa perl script
  位于 "/etc/X11/xdm/KillXsnow"。拷貝后執(zhí)行 命令 "chmod 755 /etc/X11/xdm/KillXsnow" 。 
  #!/usr/bin/perl 
  
  
  ### I had to add the -a option between RH 5.2 and 6.0 
  
  @Temp = `cd /proc; grep -a ^/usr/X11R6/bin/xsnow /proc/[0-9]*/cmdline`; 
  
  
  if (@Temp > 0) 
  
  { 
  
  $Xsnow = shift @Temp; 
  
  ($Junk,$ProcJunk,$No,$RestOfJunk) = split(?/?,$Xsnow); 
  
  
  ## I am really paranoid that I want to kill the right pid 
  
  if (($No > 0) && ($Xsnow =~ ?^/proc/$No/cmdline:/usr/X11R6/bin/xsnow?)) 
  
  { 
  
  # system "echo /"Killing pid $No for Xsnow./n/" > /tmp/1.txt/n"; 
  
  system "kill $No"; 
  
  } 
  
  } 
  
  -------------------------------------------------------------------------------- 
  
  Xsetup_0 script
  位于 "/etc/X11/xdm/Xsetup_0"。拷貝后執(zhí)行命令" chmod 755 /etc/X11/xdm/Xsetup_0"。 
  #!/bin/sh 
  
  # $XConsortium: Xsetup_0,v 1.3 93/09/28 14:30:31 gildea EXP $ 
  
  /usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail 
  
  #/usr/X11R6/bin/xbanner 
  
  
  ### Santa and snowflakes 
  
  ### On some installs, I am missing xsnow for some reason. 
  
  /usr/X11R6/bin/xsnow -snowflakes 50 -santa 2 -unsmooth & 
  
  
  ### Load the random image 
  
  /usr/bin/X11/xloadimage -onroot -at 1,210 /etc/X11/xdm/xdm_front.gif -border brown & 
  
  
  ### A clock would be nice to see 
  
  /usr/X11R6/bin/xclock -digital -update 1 -fn -adobe-times-medium-i-normal--34-240-100-100-p-168-iso8859-1 -geometry +410+1 & 
  
  
  ### Let us turn on xeyes 
  
  /usr/X11R6/bin/xeyes -geometry +410+100 & 
  
  -------------------------------------------------------------------------------- 
  
  Xrsources file
  位于 "/etc/X11/xdm/Xresources"。
                         拷貝后執(zhí)行命令 “chmod 755 /etc/X11/xdm/Xresources" 。 
  ! $XConsortium: Xresources /main/8 1996/11/11 09:24:46 swick $ 
  
  xlogin*login.translations: #override/ 
  
  CtrlR: abort-display()/n/ 
  
  F1: set-session-argument(failsafe) finish-field()/n/ 
  
  CtrlReturn: set-session-argument(failsafe) finish-field()/n/ 
  
  Return: set-session-argument() finish-field() 
  
  xlogin*borderWidth: 3