|
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.
|
|
|
|
|