Proyecto

General

Perfil

Descargar (10,1 KB) Estadísticas
| Rama: | Revisión:
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.