Добавлена поддерка face.icon

master3.3
Mike khiretskiy 11 years ago
parent 2751cffe0d
commit 0de104beec

@ -0,0 +1,20 @@
#!/bin/bash
#
# Syncronize icon face from local user to kdm
# (c) 2013 Calculate Ltd. http://www.calculate-linux.org
# get icon face directory from kdm config
get_icon_face_dir() {
local config_file=/usr/share/config/kdm/kdmrc
[[ -f $config_file ]] && sed -rn 's/^FaceDir=(.*)/\1/p' $config_file
}
# copy .face.icon from user home directory to kdm face directory
if [[ $DOMAIN_USER == "off" ]] && [[ -f $HOME_DIR/.face.icon ]]; then
FACE_DIR=$(get_icon_face_dir)
if [[ -n $FACE_DIR ]] && [[ -d $FACE_DIR ]];then
cp $HOME_DIR/.face.icon $FACE_DIR
fi
fi
exit 0

@ -291,3 +291,24 @@ class Desktop:
time.sleep(1)
else:
return False
def prepareFace(self,ur_home_path):
"""Подготовить каталог пользователя с шифрованием для работы с .face
Для шифрованных профилей в корне домашней директории
создается симлинк на .ecryptfs/.face. В зашифрованном профиле
такой симлинк будет создаваться шаблонами
Args:
ur_home_path: домашняя директория пользователя
Returns:
True/False в зависимости от успешности
"""
if path.exists(ur_home_path):
symlink_path = path.join(ur_home_path,'.face')
if not path.lexists(symlink_path):
os.symlink('.ecryptfs/.face', symlink_path)
return True
else:
return False

@ -65,16 +65,24 @@ class ClDesktopAction(Action):
'method':'Desktop.createUserDir(ur_login,ur_uid,ur_gid,ur_home_path)',
'condition':lambda dv:not path.exists(dv.Get('ur_home_path'))
},
# подключить шифрованные данные
{'name':'ecryptfs',
'message':__("Mounting encrypted data"),
'method':'Desktop.createCryptDir(ur_login,ur_uid,ur_gid,'
'ur_home_path,False)',
# используется ли шифрование
{'name':'crypt',
'condition':lambda dv:(not isMount(dv.Get('ur_home_path')) and \
dv.Get('ur_home_crypt_set') == 'on' and
(not dv.isModuleInstalled("install") or
dv.Get('install.cl_autologin') != dv.Get('ur_login')))
},
# подготовить шифрованный профиль пользователя для работы с .icon
{'name':'crypt:prepare_icon',
'method':'Desktop.prepareFace(ur_home_path)',
'condition':lambda Get:Get('ur_domain_set') == 'off'
},
# подключить шифрованные данные
{'name':'crypt:ecryptfs',
'message':__("Mounting encrypted data"),
'method':'Desktop.createCryptDir(ur_login,ur_uid,ur_gid,'
'ur_home_path,False)'
},
# настроить пользовательских профиль шаблонами
{'name':'user_profile',
'message':__("Setting up the user profile"),

@ -22,10 +22,12 @@ import pwd
from calculate.lib.datavars import Variable,VariableError,ReadonlyVariable, \
ReadonlyTableVariable,FieldValue
from calculate.lib.variables.user import VariableUrLogin
from calculate.lib.utils.files import readLinesFile,process,isMount
from calculate.lib.utils.files import (readLinesFile,process,isMount,
listDirectory)
from calculate.desktop._cl_keys import getKey
from itertools import *
from calculate.lib.cl_template import (templateFunction,iniParser)
import hashlib
from calculate.lib.cl_lang import setLocalTranslate
setLocalTranslate('cl_desktop3',sys.modules[__name__])
@ -372,3 +374,31 @@ class VariableClDesktopForceSetupSet(Variable):
def init(self):
self.label = _("Force setup")
self.help = _("force setup")
class VariableClDesktopFacePath(Variable):
"""Путь к стандартным иконкам пользователей"""
value = "/usr/share/pixmaps/faces"
class VariableClDesktopFaceList(Variable):
"""Список доступных иконок по умолчанию для пользователей"""
type = "list"
def get(self):
return sorted(
filter(lambda x:x.endswith('.png'),
listDirectory(self.Get('cl_desktop_face_path'))))
class VariableClDesktopHashFace(Variable):
"""Номер иконки пользователя
Номер вычисляется по контрольной сумму md5 логина пользователя
"""
def get(self):
login = self.Get('ur_login')
icon_list = self.Get('cl_desktop_face_list')
if icon_list:
return path.join(self.Get('cl_desktop_face_path'),
icon_list[sum(map(lambda x:ord(x),
hashlib.md5(login).digest()))%len(icon_list)])
else:
return ""

Loading…
Cancel
Save