Code

Updated tabs.
[gosa.git] / gosa-plugins / goto / admin / systems / goto / class_terminalService.inc
1 <?php
3 class termservice extends plugin
4 {
5   /* CLI vars */
6   var $cli_summary= "Manage terminal service aspects";
7   var $cli_description= "Some longer text\nfor help";
8   var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
10   /* Generic terminal attributes */
11   var $gotoLpdEnable= FALSE;
12   var $gotoXMonitor= "";
13   var $gotoXMethod= "default";
14   var $gotoXdmcpServer= "";
15   var $gotoXDriver= "";
16   var $gotoXResolution= "";
17   var $gotoXColordepth= "";
18   var $gotoXHsync= "";
19   var $gotoXVsync= "";
20   var $gotoXKbModel= "";
21   var $gotoXKbLayout= "";
22   var $gotoXKbVariant= "";
23   var $gotoXMouseType= "";
24   var $gotoXMouseport= "";
25   var $gotoLpdServer= "";
26   var $gotoScannerEnable= "";
27   var $gotoScannerModel= "";
28   var $gotoScannerClients= "";
29   var $gotoScannerBackend= "";
30   var $goFonHardware= "automatic";
32   var $AutoSync = false;
33   var $view_logged = FALSE;
35   /* Needed values and lists */
36   var $ignore_account= TRUE;
37   var $base= "";
38   var $cn= "";
39   var $orig_dn= "";
40   var $XMethods= array();
41   var $XDrivers= array();
42   var $XResolutions= array();
43   var $XColordepths= array();
44   var $XKbModels= array ();
45   var $XKbLayouts= array ();
46   var $XKbVariants= array ();
47   var $MouseTypes= array();
48   var $MousePorts= array();
49   var $hardware_list= array();
50   var $used_hardware= array();
53   /* attribute list for save action */
54   var $attributes= array("gotoLpdEnable", "gotoXMonitor", "gotoXMethod", "gotoXdmcpServer",
55       "gotoXDriver", "gotoXResolution", "gotoXColordepth",
56       "gotoXHsync", "gotoXVsync", "gotoLpdEnable", "gotoLpdServer",
57       "gotoScannerEnable", "gotoScannerModel", "gotoScannerClients",
58       "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
59       "gotoXMouseType", "gotoXMouseport", "goFonHardware");
60   var $objectclasses= array("GOhard");
62   var $is_ogroup        = FALSE;
63   var $is_ogroup_member = FALSE;
65   var $selected_xdmcp_servers = array();
66   var $inherited_xdmcp_servers = array();
68   function termservice (&$config, $dn= NULL, $parent= NULL)
69   {
70     plugin::plugin ($config, $dn, $parent);
71     $this->orig_dn= $this->dn;
73     /* Check if we are a part of an ogroup.
74      * In this case, we have to hide all the inherit stuff.
75      */ 
76     if(isset($parent) && get_class($parent) == "ogroup"){
77       $this->is_ogroup = TRUE;
78     }
80     /* Check if we are member of an object group.
81      */
82     $ldap= $this->config->get_ldap_link();
83     $ldap->cd($this->config->current['BASE']);
84     $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".LDAP::prepare4filter($this->dn)."))");
85     if($ldap->count()){
86       $this->is_ogroup_member = TRUE;
87     }
89     /* Get list of available xdrivers */
90     $this->XDrivers = $this->getListOfXDrivers();
92     /* Create a list of available resolutions.
93      */     
94     $this->XResolutions= array(
95           "640x480"   =>  "640x480",
96           "800x600"   =>  "800x600",
97           "1024x768"  =>  "1024x768",
98           "1152x864"  =>  "1152x864",
99           "1280x1024" =>  "1280x1024",
100           "1400x1050" =>  "1400x1050",
101           "1600x1200" =>  "1600x1200");
103     if(isset($this->config->data['MAIN']['RESOLUTION_HOOK'])){
104       $file = $this->config->data['MAIN']['RESOLUTION_HOOK'];
105       if(is_readable($file)){
106         $str = file_get_contents($file);
107         $lines = split("\n",$str);
108         foreach($lines as $line){
109           $line = trim($line);
110           if(!empty($line)){
111             $this->XResolutions[$line]=$line;
112           }
113         }
114       }else{
115         print_red(sprintf(_("You have specified an external resolution hook which can't be read, please check the permission of the file '%s'."),$file));
116       }
117     }
119     /* Create a set of selectable color depths
120      */
121     $this->XColordepths= array(
122         "8"        => "8 " ._("bit"),
123         "15"       => "15 "._("bit"),
124         "16"       => "16 "._("bit"),
125         "24"       => "24 "._("bit"));
127     
128     /* Create a set of selectable keyboard models
129      */
130     $this->XKbModels = array();
131     foreach(array ("btc9000", "chicony", "compaq", "dell", "dell101", "everex",
132           "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
133           "logiinetnav", "logiinternet", "macintosh", "microsoft",
134           "microsoftpro", "omnikey101", "pc101", "pc102", "pc104",
135           "pc105", "rapidaccess", "rapidaccess2", "winbook") as $type){
136       $this->XKbModels[$type] = $type;
137     }
139     /* Additional values will be extracted from CONFIG_DIR.keyboardLayouts */
140     $this->XKbLayouts = array("de"=> "de","intl" =>"intl","us" =>"us");
141     $this->XKbVariants= array("nodeadkeys"=>"nodeadkeys", "basic"=>"basic");
142     $this->MouseTypes = array("ImPS/2"=>"ImPS/2","PS/2"=>"PS/2", "explorerps/2"=>"explorerps/2",
143                               "Microsoft"=>"Microsoft","Logitech"=>"Logitech");
144     $this->MousePorts = array("/dev/ttyS0"=>"/dev/ttyS0",
145                               "/dev/ttyS1"=>"/dev/ttyS1","/dev/psaux"=>"/dev/psaux", 
146                               "/dev/input/mice"=>"/dev/input/mice");
147  
149     /* Try to read additional keyboard layouts
150      */
151     if(file_exists(CONFIG_DIR."/keyboardLayouts")){
152       if(is_readable(CONFIG_DIR."/keyboardLayouts")){
153         $str = file_get_contents(CONFIG_DIR."/keyboardLayouts");
154         $tmp = split("\n",$str);
155         foreach($tmp as $entry){
156           if((!empty($entry)) && (!preg_match("/^#/",$entry))){
157             $entry = trim($entry);
158             $tmp2 = split ("\:",$entry);
159             $la =   trim($tmp2[0]);   // What would be saved to ldap
160             $da =   trim($tmp2[1]);   // This wis displayed in the listbox
161             $this->XKbLayouts [ $la] = $da;
162           }
163         }
164       }
165     }
167     /* Terminal server methods 
168      */
169     if($this->is_ogroup_member){
170       $this->XMethods["default"]= _("inherited");
171     }
172     $this->XMethods["xdmcp"]  = _("XDMCP");
173     $this->XMethods["ldm"]    = _("LDM");
174     $this->XMethods["rdp"]    = _("Windows RDP");
175     $this->XMethods["citrix"] = _("ICA client");
177     /* Get selected gotoXdmcpServer 
178      */
179     $this->selected_xdmcp_servers = array();
180     if(isset($this->attrs['gotoXdmcpServer'])){
181       for($i = 0 ; $i < $this->attrs['gotoXdmcpServer']['count'] ; $i++){
182         $this->selected_xdmcp_servers[] = $this->attrs['gotoXdmcpServer'][$i];
183       }
184     }
186     /* Load phone hardware list 
187      */
188     $ldap= $this->config->get_ldap_link();
189     $ldap->cd($this->config->current['BASE']);
190     $ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
191     while ($attrs= $ldap->fetch()){
192       $cn= $attrs['cn'][0];
193       if (isset($attrs['description'])){
194         $description= " - ".$attrs['description'][0];
195       } else {
196         $description= "";
197       }
198       $this->hardware_list[$cn]= "$cn$description";
199     }
205     /* Eventually colorize phones */
207     $deps = array();
208     $ou = preg_replace("/,.*$/","",get_ou("phoneou"));
210     if(!empty($ou)){
211       $ldap->cd($this->config->current['BASE']);
212       $ldap->search("(&(objectClass=organizationalUnit)(".$ou."))",array("dn"));
213       while($attrs = $ldap->fetch()){
214         $deps[] = $attrs['dn'];
215       }
216     }else{
218       /* Phone ou seems to be empty, fall back to overall base .
219        */
220       $deps[] = $this->config->current['BASE'];
221     }
223     foreach($deps as $dep){
224       $ldap->cd($dep);
225       $ldap->search("(goFonHardware=*)",array('cn','dn','goFonHardware'));
226       while($attrs = $ldap->fetch()){
227         $cn = $attrs['goFonHardware'][0];
228         if(isset($this->hardware_list[$cn])){
229           $this->used_hardware[$cn]= $cn;
230         }
231       }
232     }
233     $this->hardware_list["automatic"]= _("automatic");
235     ksort($this->hardware_list);
237     /* Convert gotoLpdEnable 
238      */
239     $this->gotoLpdEnable= preg_match("/yes/i",$this->gotoLpdEnable);
242     /* Load hardware list */
243     $ldap= $this->config->get_ldap_link();
244     $ldap->cd($this->config->current['BASE']);
245     $map= array(
246         "gotoXResolution", 
247         "gotoXColordepth", 
248         "gotoXKbModel", 
249         "gotoXKbLayout",
250 #        "gotoXDriver",
251         "gotoXdmcpServer",
252         "gotoXKbVariant",
253         "gotoXMouseType", 
254         "gotoXMethod",
255         "gotoXMouseport");
256     $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".LDAP::prepare4filter($this->dn)."))",$map);
257     if ($ldap->count() == 1){
258       $attrs= $ldap->fetch();
259       foreach ($map as $name){
260         if (!isset($attrs[$name][0])){
261           continue;
262         }
264         switch ($name){
265 #         case 'gotoXDriver': 
266 #           $this->XDrivers = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XDrivers;
267 #           break;
268           case 'gotoXMethod': 
269             $this->XMethods = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XMethods;
270             if(isset($attrs['gotoXdmcpServer'])){
271               for($i = 0 ; $i < $attrs['gotoXdmcpServer']['count'] ; $i++){
272                 $this->inherited_xdmcp_servers[] = $attrs['gotoXdmcpServer'][$i];
273               }
274             }
275             break;
276           case 'gotoXResolution':
277             $this->XResolutions= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XResolutions;
278             break;
279           case 'gotoXColordepth':
280             $this->XColordepths= array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']') + $this->XColordepths;
281             break;
282           case 'gotoXKbModel':
283             $this->XKbModels= array('default' => _("inherited").' ['.$attrs[$name][0].']') + $this->XKbModels;
284             break;
285           case 'gotoXKbLayout':
286             $this->XKbLayouts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbLayouts;
287             break;
288           case 'gotoXKbVariant':
289             $this->XKbVariants= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbVariants;
290             break;
291           case 'gotoXMouseType':
292             $this->MouseTypes= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MouseTypes;
293             break;
294           case 'gotoXMouseport':
295             $this->MousePorts= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MousePorts;
296             break;
297         }
298       }
299     }
301     if(preg_match("/\+/",$this->gotoXHsync)){
302       $this->AutoSync = true;
303       $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
304       $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
305     }
306   }
309   function execute()
310   {
311     /* Call parent execute */
312     plugin::execute();
314     if($this->is_account && !$this->view_logged){
315       $this->view_logged = TRUE;
316       new log("view","terminal/".get_class($this),$this->dn);
317     }
319     /* Do we need to flip is_account state? */
320     if (isset($_POST['modify_state'])){
321       $this->is_account= !$this->is_account;
322     }
324     /* Do we represent a valid terminal? */
325     if (!$this->is_account && $this->parent === NULL){
326       $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
327         _("This 'dn' has no terminal features.")."</b>";
328       return ($display);
329     }
331     /* Show main page */
332     $smarty= get_smarty();
334     /* Assign acls */
335     $tmp= $this->plInfo();
336     foreach($tmp['plProvidedAcls'] as $name => $translation){
337       $smarty->assign($name."ACL",$this->getacl($name));
338     }
340     if(isset($_POST['gotoXdmcpServer_add']) && isset($_POST['XdmcpAddServer'])){
341       if(!in_array($_POST['gotoXdmcpServer_add'],$this->selected_xdmcp_servers)){
342         $this->selected_xdmcp_servers[] = $_POST['gotoXdmcpServer_add'];
343       }
344     }
346     if(isset($_POST['selected_xdmcp_servers']) && isset($_POST['XdmcpDelServer'])){
347       $tmp = array();
348       foreach($this->selected_xdmcp_servers as $name){
349         if(!in_array($name,$_POST['selected_xdmcp_servers'])){
350           $tmp[] =  $name;
351         }
352       }
353       $this->selected_xdmcp_servers = $tmp;
354     }
356     /* Arrays */ 
357     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
358           "XKbModels","XKbVariants","MouseTypes", "MousePorts") as $val){
359       $smarty->assign("$val", $this->$val);
360     }
361     $smarty->assign("XKbLayouts",   $this->XKbLayouts);
362     $smarty->assign("XKbLayoutKeys",array_flip($this->XKbLayouts));
363     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
364   
365     
366     /* Create a list of useable servers for the currently selected 
367      *  connection type.
368      */ 
369     $xdmcp_types =  $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
370     $available_servers = array();
371     foreach($xdmcp_types as $servername =>$supported_types){
372       if(in_array(strtoupper($this->gotoXMethod),$supported_types)){
373         $available_servers[]  = $servername;
374       }
375     }
377     /* Append additional information to invalid server selections.
378      */
379     $tmp = array();
380     foreach($this->selected_xdmcp_servers as $server){
381       if(in_array($server,$available_servers)){
382         $tmp[$server] = $server;
383       }else{
384         $tmp[$server] = $server."&nbsp;-&nbsp;"._("Unsupported");
385       }
386     }
388     /* Remove already selected servers from available list. 
389      */
390     foreach($available_servers as $key => $server){
391       if(isset($tmp[$server])){
392         unset($available_servers[$key]);
393       }
394     }
396     $smarty->assign("selected_xdmcp_servers", $tmp);
397     $smarty->assign("inherited_xdmcp_servers", $this->inherited_xdmcp_servers);
398     $smarty->assign("available_xdmcp_servers", $available_servers);
400     /* Variables - select */
401     foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth", 
402           "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
403           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
405       $smarty->assign($val."_select", $this->$val);
406     }
408     /* Variables */
409     foreach(array("gotoXHsync", "gotoXVsync") as $val){
410       $smarty->assign($val, $this->$val);
411     }
412     $smarty->assign("staticAddress", "");
414     /* Checkboxes */
415     foreach(array("gotoLpdEnable", "gotoScannerEnable") as $val){
416       if ($this->$val == TRUE) {
417         $smarty->assign("$val", "checked");
418       } else {
419         $smarty->assign("$val", "");
420       }
421     }
423     /* Phone stuff */
424     $smarty->assign ("goFonHardware", $this->goFonHardware);
425     $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
426          _("Choose the phone located at the current terminal")."\" >\n";
427     foreach ($this->hardware_list as $cn => $description){
428       if ($cn == $this->goFonHardware){
429         $selected= "selected";
430       } else {
431         $selected= "";
432       }
433       if (isset($this->used_hardware[$cn])){
434         $color= "style=\"color:#A0A0A0\"";
435       } else {
436         $color= "";
437       }
438       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
439     }
440     $hl.= "</select>\n";
441     $smarty->assign ("hardware_list", $hl);
442     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
444     $smarty->assign("AutoSyncACL",$this->getacl("AutoSync"));
446     $smarty->assign("AutoSyncCHK"," ");
447     if($this->AutoSync){
448       $smarty->assign("AutoSyncCHK"," checked ");
449       $smarty->assign("gotoXVsyncACL", preg_replace("/w/","",$this->getacl("gotoXVsync")));
450       $smarty->assign("gotoXHsyncACL", preg_replace("/w/","",$this->getacl("gotoXHsync")));
451     }
453     /* Show main page */
454     return($smarty->fetch (get_template_path('terminalService.tpl', TRUE,dirname(__FILE__))));
455   }
457   function remove_from_parent()
458   {
459     new log("remove","terminal/".get_class($this),$this->dn,array_keys($this->attrs));
460     $this->handle_post_events("remove");
462     plugin::remove_from_parent();
463     $ldap = $this->config->get_ldap_link();
464     $ldap->cd($this->dn);
465     $ldap->modify($this->attrs);
466     show_ldap_error($ldap->get_error(),_("Could not remove terminal service."));
467   }
470   /* Save data to object */
471   function save_object()
472   {
473     plugin::save_object();
475     /* Save checkbox state */
476     if (isset ($_POST['gotoXMethod'])){
477       foreach (array("gotoLpdEnable", "gotoScannerEnable") as $val){
479         if($this->acl_is_writeable($val)){
480           if (!isset ($_POST["$val"])){
481             $this->$val= FALSE;
482           } else {
483             $this->$val= TRUE;
484           }
485         }
486       }
487     } 
489     if(isset($_POST['gotoXDriver'])){
490       if(isset($_POST['AutoSync'])){
491         $this->AutoSync = true;
492       }else{
493         $this->AutoSync = false;
494       }
495     }
497     /* Default entries can use blank hsync/vsync entries */
498     if ($this->dn != "" && $this->cn != "default" && $this->cn != "default"){
500       /* But only if no auto sync is enabled... */
501       if (!$this->AutoSync){
503         /* Check vsync for correct usage */
504         $val= preg_replace ("/\s/", "", $this->gotoXVsync);
505         if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXVsync")){
507           $message[]= _("Please specify a valid VSync range.");
508         } elseif ($this->acl_is_writeable("gotoXVsync")){
509           list($v1,$v2)= preg_split ("/[-+]/", $val);
510           if ($v2 != ""){
511             if ($v1 > $v2){
512               $message[]= _("Please specify a valid VSync range.");
513             }
514           }
515         }
517         /* Check hsync for correct usage */
518         $val= preg_replace ("/\s/", "", $this->gotoXHsync);
519         if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXHsync")){
521           $message[]= _("Please specify a valid HSync range.");
522         } elseif ($this->acl_is_writeable("gotoXHsync")){
523           list($v1,$v2)= preg_split ("/[-+]/", $val);
524           if ($v2 != ""){
525             if ($v1 > $v2){
526               $message[]= _("Please specify a valid HSync range.");
527             }
528           }
529         }
530       }
531     }
532   }
535   /* Check supplied data */
536   function check()
537   {
538     /* Call common method to give check the hook */
539     $message= plugin::check();
541     if($this->gotoXMethod != "default"){
542       $xdmcp_types =  $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
543       $available_servers = array();
544       foreach($xdmcp_types as $servername =>$supported_types){
545         if(in_array(strtoupper($this->gotoXMethod),$supported_types)){
546           $available_servers[]  = $servername;
547         }
548       }
549       foreach($this->selected_xdmcp_servers as $server){
550         if(!in_array($server,$available_servers)){
551           $message[] = _("Remote desktop settings contains servers that do not support the selected connection method.");
552           break;
553         }
554       }
555     }
557     return ($message);
558   }
561   /* Save to LDAP */
562   function save()
563   {
564     /* Convert to string */
565     $this->gotoLpdEnable= $this->gotoLpdEnable?"Yes":"No";
567     if($this->is_ogroup){
568       $this->objectclasses = array("gotoWorkstationTemplate");
569     }else{
570       $this->objectclasses = array("GOhard");
571     }
573     plugin::save();
575     /* Strip out 'default' values */
576     foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth",
577           "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
578           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
580       if ($this->attrs[$val] == "default"){
581         $this->attrs[$val]= array();
582       }
583     }
585     if($this->gotoXMethod == "default"){
586       $this->attrs['gotoXdmcpServer'] = array();
587       $this->attrs['gotoXMethod'] = array();
588     }else{
589       $this->attrs['gotoXdmcpServer'] = array_values($this->selected_xdmcp_servers);
590     }
593     if($this->AutoSync){
594       $this->attrs['gotoXHsync'] = "30+55";
595       $this->attrs['gotoXVsync'] = "50+70";
596     }
598     /* Write back to ldap */
599     $ldap= $this->config->get_ldap_link();
600     $ldap->cd($this->dn);
601     $this->cleanup();
602     $ldap->modify ($this->attrs); 
603     new log("modify","terminal/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
605     show_ldap_error($ldap->get_error(), sprintf(_("Saving of object system terminal/service with dn '%s' failed."),$this->dn));
606     $this->handle_post_events("modify");
607   }
610   function getListOfXDrivers()
611   {
612     $drivers = array("default" => "["._("unknown")."]");
614     /* Generate a list of xdrivers from CONFIG_DIR/xdrivers */
615     if (file_exists(CONFIG_DIR.'/xdrivers')){
616       $xdrivers = file (CONFIG_DIR.'/xdrivers');
617       foreach ($xdrivers as $line){
618         if (!preg_match ("/^#/", $line)){
619           $drivers[]= trim($line);
620         }
621       }
622     } else {
623       foreach( array(
624           "ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", "fglrx",
625           "i128", "i740", "i810", "imstt", "mga", "neomagic", "newport", "nsc",  "nv", "nvidia",
626           "r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
627           "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware") as $driver){
628         $drivers[] = $driver;
629       }
630     }
631     return($drivers);
632   }
635   /* Return plugin informations for acl handling */
636   static function plInfo()
637   {
638     return (array(
639           "plShortName"   => _("Service"),
640           "plDescription" => _("Terminal service"),
641           "plSelfModify"  => FALSE,
642           "plDepends"     => array(),
643           "plPriority"    => 3,
644           "plSection"     => array("administration"),
645           "plCategory"    => array("terminal"),
647           "plProvidedAcls"=> array(
648             "gotoXMonitor"            => _("Monitor"),
649             "gotoXMethod"             => _("Method"),
650             "gotoXdmcpServer"         => _("Remote desktop"),
651             "gotoXDriver"             => _("Gfx driver"),
652             "gotoXResolution"         => _("Gfx resolution"),
653             "gotoXColordepth"         => _("Gfx color depth"),
654             "gotoXHsync"              => _("Hsync"),
655             "gotoXVsync"              => _("Vsync"),
656             "AutoSync"                => _("Auto-Sync"),
657             "gotoLpdEnable"           => _("Printer service enabled"),
658             "gotoLpdServer"           => _("Spool server"),
659             "gotoScannerEnable"       => _("Scanner enabled"),
660             "gotoXKbModel"            => _("Keyboard model"),
661             "gotoXKbLayout"           => _("Keyboard layout"),
662             "gotoXKbVariant"          => _("Keyboard variant"),
663             "gotoXMouseType"          => _("Mouse type"),
664             "gotoXMouseport"          => _("Mouse port"),
665             "goFonHardware"           => _("Telephone hardware"))
666           ));
667   }
670 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
671 ?>