desarrollosconsejeria/aulalinex-alumno/4.2-16/serveralumnolinex/clservidor.pas @ a2ba555f
a2ba555f | Elisa | unit clservidor;
|
|
{$mode objfpc}{$H+}
|
|||
interface
|
|||
uses
|
|||
Classes, SysUtils, StrUtils, IniFiles,process;
|
|||
type
|
|||
{ Tservidor }
|
|||
Tservidor = class
|
|||
private
|
|||
fInterface:string;
|
|||
fIP:String;
|
|||
fUsuarioCanon:Boolean;
|
|||
fPuerto:integer;
|
|||
fPuertoVNC:integer;
|
|||
fNombreEquipo:String;
|
|||
fMacProfe:String;
|
|||
fIPProfe:String;
|
|||
fNombreEquipoProfe:string;
|
|||
fUsuarioAlumno:String;
|
|||
fHomeUsuario:string;
|
|||
fUsuarioProfe:string;
|
|||
fDirRecibidos:string;
|
|||
fDirEnviar:string;
|
|||
fIPVLC:string;
|
|||
fNombreClase:string;
|
|||
fRatonTecladoDesactivados:Boolean;
|
|||
fInternetDesactivado:Boolean;
|
|||
fImpresoraDesactivada:integer;
|
|||
fAutentificacionMac:integer;
|
|||
fAutentificacionIP:integer;
|
|||
procedure LeerSetupIni(archivo:string);
|
|||
function ObtenerMiIp():string;
|
|||
Function NumOrdLet(num:integer):string;
|
|||
procedure OrdenarDesactivarInternet();
|
|||
public
|
|||
constructor create (archivoini:string='/etc/aulalinex-red.conf');
|
|||
property IP:String read fIP;
|
|||
property Puerto:integer read fPuerto;
|
|||
property PuertoVNC:integer read fPuertoVNC;
|
|||
property NombreEquipo:String read fNombreEquipo;
|
|||
property MacProfe:String read fMacProfe write fMacProfe;
|
|||
property IPProfe:String read fIPProfe write fIPProfe;
|
|||
property NombreEquipoProfe:String read fNombreEquipoProfe write fNombreEquipoProfe;
|
|||
property UsuarioProfe:String read fUsuarioProfe write fUsuarioProfe;
|
|||
property UsuarioCanon:Boolean read fUsuarioCanon;
|
|||
property UsuarioAlumno:String read fUsuarioAlumno write fUsuarioAlumno;
|
|||
property DirRecibidos:String read fDirRecibidos write fDirRecibidos;
|
|||
property DirEnviar:String read fDirEnviar write fDirEnviar;
|
|||
property HomeUsuario:String read fHomeUsuario write fHomeUsuario;
|
|||
property IPVLC:String read fIPVLC write fIPVLC;
|
|||
property NombreClase:String read fNombreClase write fNombreClase;
|
|||
property InternetDesactivado:Boolean read fInternetDesactivado write fInternetDesactivado;
|
|||
property RatonTecladoDesactivados:Boolean read fRatonTecladoDesactivados write fRatonTecladoDesactivados;
|
|||
property ImpresoraDesactivada:integer read fImpresoraDesactivada write fImpresoraDesactivada;
|
|||
property AutentificacionMac:integer read fAutentificacionMac write fAutentificacionMac;
|
|||
property AutentificacionIP:integer read fAutentificacionIP write fAutentificacionIP;
|
|||
function ObtenerNombreUsuario():string;
|
|||
function ObtenerHomeUsuario(usuario:string):string;
|
|||
Function SoyUsuarioCanon():Boolean;
|
|||
procedure InactivarTecladoRaton();
|
|||
procedure ActivarTecladoRaton();
|
|||
procedure DesbloquearMonitorNegro();
|
|||
end;
|
|||
implementation
|
|||
uses globales;
|
|||
Function Tservidor.SoyUsuarioCanon():Boolean;
|
|||
var
|
|||
nombrealumno:string;
|
|||
i:integer;
|
|||
desactivar:boolean;
|
|||
begin
|
|||
desactivar:=false;
|
|||
for i:=0 to 25 do
|
|||
begin
|
|||
nombrealumno:='aulalinex-alumno';
|
|||
if nombrealumno = fUsuarioAlumno then
|
|||
begin
|
|||
desactivar:=true;
|
|||
break;
|
|||
end;
|
|||
end;
|
|||
result:=desactivar;
|
|||
end;
|
|||
Function Tservidor.NumOrdLet(num:integer):string;
|
|||
var
|
|||
letraord:string;
|
|||
begin
|
|||
num:=succ(num);
|
|||
letraord:=ifthen(num<10,'0'+inttostr(num),inttostr(num));
|
|||
result:=letraord;
|
|||
end;
|
|||
constructor Tservidor.create(archivoini:string='/etc/aulalinex-red.conf');
|
|||
begin
|
|||
inherited create;
|
|||
fInterface:='eth0';
|
|||
fUsuarioCanon:=false;
|
|||
fInternetDesactivado:=false;
|
|||
fIPProfe:='192.168.0.254';
|
|||
fRatonTecladoDesactivados:=false;
|
|||
fAutentificacionIP:=0;
|
|||
fAutentificacionMAC:=0;
|
|||
fUsuarioAlumno:=ObtenerNombreUsuario();
|
|||
exportar_display(fUsuarioAlumno);
|
|||
fHomeUsuario:=ObtenerHomeUsuario(fUsuarioAlumno);
|
|||
fPuerto:=PUERTO_USUARIO;
|
|||
fPuertoVNC:=PUERTO_VNC;
|
|||
if FileExists(archivoini) then
|
|||
LeerSetupIni(archivoini);
|
|||
fIP:=ObtenerMiIP();
|
|||
if fRatonTecladoDesactivados then
|
|||
InactivarTecladoRaton();
|
|||
fUsuarioCanon:=SoyUsuarioCanon();
|
|||
if fInternetDesactivado then
|
|||
OrdenarDesactivarInternet();
|
|||
end;
|
|||
procedure Tservidor.OrdenarDesactivarInternet();
|
|||
begin
|
|||
end;
|
|||
function Tservidor.ObtenerHomeUsuario(usuario:string):string;
|
|||
const
|
|||
ORD_HOME:string='echo ~%s';
|
|||
var
|
|||
homeusu:string;
|
|||
orden:string;
|
|||
begin
|
|||
orden:=Format(ORD_HOME,[usuario]);
|
|||
homeusu:=HallarDatos(orden);
|
|||
//writeln('Home de usuario ' +homeusu);
|
|||
fDirRecibidos:=homeusu+'/recibidos_profesor';
|
|||
fDirEnviar:=homeusu+'/enviar_profesor';
|
|||
result:=trim(homeusu);
|
|||
end;
|
|||
procedure Tservidor.DesbloquearMonitorNegro();
|
|||
Const
|
|||
ORD_DESBLOQUEAR_MONITOR='gnome-session-save --kill --force-logout;rm -fr %s/.local/share/gvfs-metadata/*;';
|
|||
var
|
|||
dirborrar:String;
|
|||
orden:String;
|
|||
begin
|
|||
try
|
|||
dirBorrar:=Format('%s/.local/share/gvfs-metadata',[g_home_verdadero]);
|
|||
//writeln(dirborrar);
|
|||
if DirectoryExists(dirborrar) then
|
|||
begin
|
|||
orden:=Format(ORD_DESBLOQUEAR_MONITOR,[g_home_verdadero]);
|
|||
Ejecutar(orden);
|
|||
end;
|
|||
except
|
|||
//
|
|||
end;
|
|||
end;
|
|||
function Tservidor.ObtenerNombreUsuario():string;
|
|||
var
|
|||
nombreusu:string;
|
|||
begin
|
|||
nombreusu:=GetEnvironmentVariable('USER');
|
|||
if nombreusu='' then nombreusu:=' ';
|
|||
fUsuarioAlumno:=nombreusu;
|
|||
result:=nombreusu;
|
|||
end;
|
|||
procedure Tservidor.LeerSetupIni(archivo:string);
|
|||
var
|
|||
FicheroIni:TMemIniFile;
|
|||
begin
|
|||
try
|
|||
FicheroIni:=TMemIniFile.create(archivo);
|
|||
try
|
|||
with FicheroIni do
|
|||
begin
|
|||
fInterface:=ReadString('Red','Interface','eth0');
|
|||
fIPProfe:=ReadString('Profesor','IP Profesor','192.168.0.254');
|
|||
fInternetDesactivado:=ReadBool('Internet','Internet desactivado',false);
|
|||
fRatonTecladoDesactivados:=ReadBool('RatonTeclado','RatonTeclado inactivos',false);
|
|||
end;
|
|||
finally
|
|||
FicheroIni.free;
|
|||
end;
|
|||
except
|
|||
writeLn('Error al cargar datos');
|
|||
end;
|
|||
end;
|
|||
function Tservidor.ObtenerMiIp():string;
|
|||
var
|
|||
mip:string;
|
|||
begin
|
|||
try
|
|||
mip:=trim(HallarDatos('/sbin/ifconfig ' +fInterface+ ' | grep "inet" | head -n 1| tr -s " " | sed "s/^[ \t]*//" | cut -f2 -d":" | cut -f1 -d" "'));
|
|||
result:=mip;
|
|||
except
|
|||
result:='00:00:00:00:00:00';
|
|||
end;
|
|||
end;
|
|||
procedure Tservidor.ActivarTecladoRaton();
|
|||
const
|
|||
ORD_ACT_RA:string='xmodmap -e "pointer = default"';
|
|||
ORD_ACT_TE:string='xmodmap %s';
|
|||
var
|
|||
archivoCurrent,mihome,orden:string;
|
|||
begin
|
|||
try
|
|||
mihome:=GetEnvironmentVariable('HOME');
|
|||
fRatonTecladoDesactivados:=false;
|
|||
archivoCurrent:=mihome+'/.current_modmap';
|
|||
ejecutar(g_export_display+ORD_ACT_RA);
|
|||
orden:=Format(ORD_ACT_TE,[archivoCurrent]);
|
|||
ejecutar(g_export_display+orden);
|
|||
if FileExists(archivoCurrent) then
|
|||
deletefile(archivoCurrent);
|
|||
except
|
|||
writeln('Problemas al activar teclado');
|
|||
end;
|
|||
end;
|
|||
procedure Tservidor.InactivarTecladoRaton();
|
|||
const
|
|||
ORD_INA_TE:string='xmodmap %s';
|
|||
ORD_INA_RA:string='xmodmap -e "pointer = 9 8 7 6 5 4 3 2 1 "';
|
|||
var
|
|||
i:integer;
|
|||
ordcurmod,orden:string;
|
|||
mimapa:TstringList;
|
|||
mihome,ArchivoNull,archivoCurrent:string;
|
|||
begin
|
|||
try
|
|||
mihome:=GetEnvironmentVariable('HOME');
|
|||
ArchivoNull:=mihome+'/.null_modmap';
|
|||
archivoCurrent:=mihome+'/.current_modmap';
|
|||
try
|
|||
mimapa:=TstringList.create;
|
|||
for i:= 8 to 255 do mimapa.add('keycode ' + inttostr(i) + ' = NoSymbol');
|
|||
mimapa.add('clear Shift');
|
|||
mimapa.add('clear Lock');
|
|||
mimapa.add('clear Control');
|
|||
mimapa.add('clear Mod1');
|
|||
mimapa.add('clear Mod2');
|
|||
mimapa.add('clear Mod3');
|
|||
mimapa.add('clear Mod4');
|
|||
mimapa.add('clear Mod5');
|
|||
mimapa.savetofile(ArchivoNull);
|
|||
sleep(100);
|
|||
ordcurmod:='xmodmap -pke > '+archivoCurrent;
|
|||
Ejecutar(g_export_display+ordcurmod);
|
|||
mimapa.clear;
|
|||
sleep(300);
|
|||
if fileexists(archivoCurrent) then
|
|||
mimapa.loadfromfile(archivoCurrent);
|
|||
mimapa.add('clear Shift');
|
|||
mimapa.add('clear Lock');
|
|||
mimapa.add('clear Control');
|
|||
mimapa.add('clear Mod1');
|
|||
mimapa.add('clear Mod2');
|
|||
mimapa.add('clear Mod3');
|
|||
mimapa.add('clear Mod4');
|
|||
mimapa.add('clear Mod5');
|
|||
mimapa.add('add Shift = Shift_L Shift_R');
|
|||
mimapa.add('add Lock = Caps_Lock');
|
|||
mimapa.add('add Control = Control_L Control_R');
|
|||
mimapa.add('add Mod1 = Alt_L 0x007D 0x009C');
|
|||
mimapa.add('add Mod2 = Num_Lock');
|
|||
mimapa.add('add Mod4 = 0x007F 0x0080');
|
|||
mimapa.add('add Mod5 = Mode_switch ISO_Level3_Shift ISO_Level3_Shift');
|
|||
mimapa.savetofile(archivoCurrent);
|
|||
orden:=Format(ORD_INA_TE,[ArchivoNull]);
|
|||
Ejecutar(g_export_display+orden);
|
|||
Ejecutar(g_export_display+ORD_INA_RA);
|
|||
fRatonTecladoDesactivados:=true;
|
|||
DeleteFile(ArchivoNull);
|
|||
finally
|
|||
mimapa.free;
|
|||
end;
|
|||
except
|
|||
writeln('Problemas al desactivar teclado');
|
|||
end;
|
|||
end;
|
|||
end.
|
|||