Пересобрано ядро с опциями
Код: Выделить всё
options NETSMB
options LIBMCHAIN
options LIBICONV
options SMBFS
Так же, в процессе установки добавляется пользователь (у меня это user) в группу wheel от которого будут производится большинство настроек.
Устанавливаем Xorg, оболочку xfce4 и xfce4-xkb-plugin (xfce4-xkb-plugin по умолчанию не устанавливается)
Код: Выделить всё
pkg install -y xorg
Код: Выделить всё
pkg install -y xfce xfce4-xkb-plugin
Установка и настройка xRDP
Код: Выделить всё
pkg install -y xrdp
Код: Выделить всё
[Globals]
ini_version=1
fork=true
port=3389
use_vsock=false
tcp_nodelay=true
tcp_keepalive=true
security_layer=rdp
crypt_level=high
autorun=
allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
hidelogwindow=true
max_bpp=32
new_cursors=true
use_fastpath=both
#require_credentials=true
#pamerrortxt=change your password according to policy at http://url
;; colors used by windows in RGB format
blue=1d87cd
grey=dedede
#black=000000
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72
;; configure login screen
; данные здесь параметры максимально приближены окну авторизации win2003
; Login Screen Window Title
ls_title=Авторизация
; top level window background color in RGB format
ls_top_window_bg_color=3a6ea5
; width and height of login screen
ls_width=427
ls_height=250
; login screen background color in RGB format
ls_bg_color=dedede
; optional background image filename (bmp format).
#ls_background_image=
; logo
; full path to bmp-file or file in shared folder
; картинка размером 420x90x8bpp
ls_logo_filename=/usr/local/etc/xrdp/bsd_xrdp_splash.bmp
ls_logo_x_pos=3
ls_logo_y_pos=23
; for positioning labels such as username, password etc
ls_label_x_pos=35
ls_label_width=100
; for positioning text and combo boxes next to above labels
ls_input_x_pos=135
ls_input_width=240
; y pos for first label and combo box
ls_input_y_pos=135
; OK button
ls_btn_ok_x_pos=250
ls_btn_ok_y_pos=215
ls_btn_ok_width=60
ls_btn_ok_height=24
; Cancel button
ls_btn_cancel_x_pos=315
ls_btn_cancel_y_pos=215
ls_btn_cancel_width=60
ls_btn_cancel_height=24
[Logging]
LogFile=xrdp.log
LogLevel=DEBUG
EnableSyslog=true
SyslogLevel=DEBUG
[Channels]
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true
#port=/tmp/.xrdp/xrdp_display_10
#chansrvport=/tmp/.xrdp/xrdp_chansrv_socket_7210
; Session types
[DOMAIN]
name=DOM.LOC
lib=libxup.so
username=ask
password=ask
pamsessionmng=127.0.0.1
ip=127.0.0.1
port=-1
code=20
[LOCAL]
name=localhost
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
#channel.rdpdr=true
#channel.rdpsnd=true
#channel.drdynvc=true
#channel.cliprdr=true
#channel.rail=true
#channel.xrdpvr=true
<ATTACHMENT filename="bsd_xrdp_splash.gif" index="2"> </ATTACHMENT>
Собственно сама картинка, используемая в конфиге.
<ATTACHMENT filename="bsd_xrdp_splash.zip" index="0"> </ATTACHMENT>
sesman.ini
Код: Выделить всё
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
; Включить исполнение скриптов входа/выхода
EnableUserWindowManager=true
; Скрипт, в пользовательской директории, выполняющийся после успешной авторизации
UserWindowManager=.startwm.sh
; Скрипт, в пользовательской директории, выполняющийся после завершения сеанса
; !!!! Используется ТОЛЬКО в измененном xRDP
;UserLogoutScript=.logoutwm.sh
; Give in full path or relative path to /usr/local/etc/xrdp
DefaultWindowManager=startwm.sh
; Give in full path or relative path to /usr/local/etc/xrdp
ReconnectScript=reconnectwm.sh
[Security]
AllowRootLogin=false
MaxLoginRetry=4
TerminalServerUsers=ts_users
TerminalServerAdmins=wheel
; When AlwaysGroupCheck=false access will be permitted if the group TerminalServerUsers is not defined.
; Выставлено в false, т. к. за авторизацию пользователей из определенной группы отвечает pam_winbind.so
AlwaysGroupCheck=false
[Sessions]
X11DisplayOffset=10
MaxSessions=100
KillDisconnected=false
DisconnectedTimeLimit=0
IdleTimeLimit=0
Policy=Default
[Logging]
LogFile=xrdp-sesman.log
LogLevel=DEBUG
EnableSyslog=false
SyslogLevel=DEBUG
;; Session definitions - startup command-line parameters for each session type
[DOMAIN]
param=Xorg
param=-config
param=xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
[LOCAL]
param=Xorg
param=-config
param=xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
[Chansrv]
FuseMountName=thinclient_drives
[SessionVariables]
PULSE_SCRIPT=/usr/local/etc/xrdp/pulse/default.pa
Код: Выделить всё
[default]
keyboard_type=0
keyboard_subtype=0
rdp_layouts=default_rdp_layouts
layouts_map=default_layouts_map
[default_rdp_layouts]
rdp_layout_us=0x00000409
rdp_layout_ru=0x00000419
[default_layouts_map]
rdp_layout_us=us
rdp_layout_ru=ru
[rdp_keyboard_ru]
keyboard_type=4
keyboard_subtype=1
model=pc105
options=grp:ctrl_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru
Код: Выделить всё
#!/bin/sh
export LANG=ru_RU.UTF-8
/usr/local/bin/setxkbmap -model "pc105" -layout "us,ru" -option "grp:ctrl_shift_toggle"
exec startxfce4
Добавляем в /etc/rc.conf
Код: Выделить всё
xrdp_enable="YES"
xrdp_sesman_enable="YES"
Проверяем
Код: Выделить всё
root@Test-BSD-Term:/home/user# sockstat -4l | grep xrdp
root xrdp 650 10 tcp4 *:3389 *:*
root xrdp-sesma 647 7 tcp4 127.0.0.1:3350 *:*
Настройка Samba410
Во время установки Xorg/XFCE4 была установлена samba410. Её будет достаточно для ввода сервера в домен. Нам собственно именно для этих целей она и нужна.
smb4.conf
Код: Выделить всё
# Global parameters
[global]
netbios name = Test-BSD-Term
realm = DOM.LOC
workgroup = DOM
security = ADS
log level = 10
log file = /var/log/samba4/log.%m
template shell = /bin/sh
template homedir = /usr/home/%D/%U
load printers = No
disable spoolss = Yes
# username map = /usr/local/etc/samba4/user.map
winbind enum groups = Yes
winbind enum users = Yes
winbind nested groups = Yes
winbind nss info = rfc2307
# winbind use default domain = Yes
winbind refresh tickets = Yes
idmap config * : range = 2000-9999
idmap config * : backend = tdb
# idmap config for the SAMDOM domain
idmap config DOM.LOC:backend = ad
idmap config DOM.LOC:schema_mode = rfc2307
idmap config DOM.LOC:range = 10000-999999
Код: Выделить всё
net ads join -UDOM\\admin
Код: Выделить всё
Enter DOM\admin's password:
Using short domain name -- DOM
Joined 'Test-BSD-Term' to dns domain 'dom.loc'
Код: Выделить всё
samba_server_enable="YES"
winbindd_enable="YES"
Проверка работоспособности в домене
wbinfo -u – выведет список доменных пользователей
wbinfo -g — выведет список доменных групп
Добавляем в /etc/pam.d/system модуль авторизации pam_winbind.so
Код: Выделить всё
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_winbind.so require_membership_of=DOM\\пользователи\ 1с
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth required pam_unix.so no_warn try_first_pass nullok
# account
account sufficient /usr/local/lib/pam_winbind.so
#account required pam_krb5.so
account required pam_login_access.so
account required pam_unix.so
# session
#session optional pam_ssh.so want_agent
session required pam_lastlog.so no_fail
session required pam_mkhomedir.so umask=0077 skel=/usr/share/skel/
# password
password sufficient /usr/local/lib/pam_winbind.so
#password sufficient pam_krb5.so no_warn try_first_pass
password required pam_unix.so no_warn try_first_pass
Изменяем в /etc/nsswitch.conf group и passwd на files winbind
Код: Выделить всё
#group: compat
group: files winbind
group_compat: nis
hosts: files dns
netgroup: compat
networks: files
#passwd: compat
passwd: files winbind
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
Чтобы автоматически создавались домашние директории, при подключении доменного пользователя, необходимо: в директории /usr/home создать директорию с наименованием домена (в данном случае DOM), и даем на неё права на чтение и запись chmod 0777 /usr/home/DOM, установить pam_mkhomedir и прописать его /etc/pam.d/system.
Код: Выделить всё
pkg install -y pam_mkhomedir
Настройка рабочего стола шаблон для пользователей.
Теперь можно попробовать подключиться к терминалке по RDP. Для конфигурации рабочего стола который потом послужит дефолтным для доменных пользователей, зайдем под пользователем user, и уже настройки из его профиля будут использованы в дальнейшем.
IMG
После настройки внешнего оформления рабочего пространства можно скопировать из папки .config, домашней директории пользователя под чьим именем производились настройки, в директорию /usr/share/skel/dot.config (все скрытые файлы и директории в skel, начинающиеся с точки, имеют префикс dot).
Так же, есть вариант отредактировать конфигурационные файлы в директории /usr/local/etc/xdg.
!!! ВНИМАНИЕ !!! Т. к. это дефолтные настройки, это необходимо делать с осторожностью и до начала каких-либо изменений ОБЯЗАТЕЛЬНО сделать резервную копию файлов.
В этом случае, правда, будет возможно внесение изменений в настройки со стороны пользователя.
Чтобы этого не происходило, параметры конфигурации необходимо заблокировать от изменений.
К примеру, если в заголовке (channel) конфигурационного файла /usr/local/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml вписать locked="*" unlocked="user" то редактирование параметров будет возможно ТОЛЬКО для пользователя user, для всех остальных
редактирование будет невозможно и будут применяться настройки по умолчанию.
Код: Выделить всё
<channel name="xfwm4" version="1.0" locked="*" unlocked="user" >
Чтобы не плодить PERFIX’ы WINE, для каждого пользователя, было решено запускать его только из одного PREFIX’а, для этого необходимо добавить пользователя без пароля.
Код: Выделить всё
root@vTerm-BSD:/# adduser
Username: windows
Full name: WINE User
Uid (Leave empty for default):
Login group [windows]:
Login group is windows. Invite window into other groups? []:
Login class [default]: russian
Shell (sh csh tcsh bash rbash nologin) [sh]: csh
Home directory [/home/windows]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : windows
Password : <disabled>
Full Name : WINE User
Uid : 2243
Class : russian
Groups : window
Home : /home/windows
Home Mode :
Shell : /bin/csh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (windows) to the user database.
Add another user? (yes/no): no
Goodbye!
Установка sudo
В дальнейшем для запуска 1С в WINE от имени пользователя windows, нам понадобится sudo.
Код: Выделить всё
pkg install -y sudo
Так же, добавляем в sudoers
Код: Выделить всё
# пользовательский алиас, в который входят локальная группа wheel и доменная DOM\domain users
User_Alias WINDOWS_USERS = %wheel, %DOM\\domain\x20users
# Список команд которые смогут выполнять пользователи из алиаса WINDOWS_USERS
Cmnd_Alias WINDOWS = /usr/local/bin/wine,/usr/local/bin/winecfg
# Список сессионных переменных которые будут передаваться в сессию пользователя windows
Defaults:WINDOWS_USERS env_reset
Defaults:WINDOWS_USERS env_keep += "DISPLAY XRDP_SESSION SESSION_MANAGER WINDOWID"
# и, собственно, что, как и от какой учетной записи смогут запускать пользователи из алиаса WINDOWS_USERS
WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS
Для работы 1С установим wine. А для конфигурации WINE установим cabextract, wget и zenity (можно из RDP сессии в терминале).
Код: Выделить всё
pkg install -y i386-wine-devel cabextract wget zenity
Из под root’a качаем и устанавливаем winetricks
Код: Выделить всё
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
cp winetricks /usr/local/bin
Т.к. пользователь windows создан, sudo установлено и в sudoers добавлены необходимые параметры, можно настраивать WINE непосредственно из-под пользователя windows, от чьей учетной записи, в дальнейшем, будет запускаться 1С.
На время конфигурации WINE, в файле sudoers, меняем строку
Код: Выделить всё
WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS
Код: Выделить всё
WINDOWS_USERS ALL = (windows) NOPASSWD: ALL
Разрешаем пользователю windows локально подключаться к сессии
Код: Выделить всё
user@Test-BSD-Term:~ % xhost +local:windows
non-network local connections being added to access control list
Код: Выделить всё
user@Test-BSD-Term:~ % sudo -u windows -H sh
$ id
uid=2243(windows) gid=2243(windows) groups=2243(windows)
$
Код: Выделить всё
$ wine winecfg
Далее, устанавливаем необходимые библиотеки
Код: Выделить всё
winetricks dotnet45
Код: Выделить всё
winetricks corefonts tahoma
winetricks mfc42 mdac28
Winetricks vcrun2005 vcrun2008 vcrun2010 vcrun2012 vcrun2013 vcrun2015
winetricks vcrun6 vcrun6sp6
winetricks d3dx10 vb5run vb6run vcrun2003
winetricks d3dx9_43 d3dxof devenum dinput8 directmusic directplay d3dx11_43 dxdiag
winetricks mfc40</I>
После конфигурации PERFIX’а WINE, уже установленная и «вылеченная» 1С копируется в папку /home/windows/.wine/drive_c/Program Files, (у меня 1C отучена от HASP, поэтому я её просто скопировал. К тому же, многие говорят что «в случае чего» к пропатченным версиям особо не придираются. Главное, наличие ключа).
На этом, конфигурация WINE для запуска 1С под WINE собственно и закончена, можно запускать 1C в «песочнице», т. е. от пользователя windows.
Можно менять в файле sudoers строки обратно с
Код: Выделить всё
WINDOWS_USERS ALL = (windows) NOPASSWD: ALL
Код: Выделить всё
WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS
Код: Выделить всё
user@Test-BSD-Term:~ % sudo -u windows -H wine "c:\Program Files\1Cv77\BIN\1cv7s.exe"
Теперь 1С’ке необходимо предоставить каталог с конфигурацией.
<I>Изначально в нашей 1С’ке конфигурация находилась на диске D: нашего сервака с MSSQL.
P.S. не знаю на сколько это правильно, не я это придумал, так было ещё со времен «царя гороха»</I>
Подключаем этот диск как smb шару и прописываем в fstab для автоматического монтирования.
Для того чтобы постоянно не вводить пароль, правим файл /etc/nsmb.conf
Код: Выделить всё
# Внимание названия серверов, имена пользователей и т.п. должно быть написано ПРОПИСНЫМИ буквами!
# Секция по умолчанию, здесь рекомендуется прописать рабочую группу или домен.
[default]
workgroup=DOM
# Параметры принадлежащие монтированию к серверу FSERVER
# The 'FSERVER' is an NT server.
[DBSERVER]
# Правильная кодировка русских букв
charsets=UTF8:CP1251
# DNS имя сервера или его ip адрес
addr=192.168.10.201
[DBSERVER:SQLSERVER]
# Параметры принадлежащие монтированию к серверу FSERVER для пользователя joe
# use persistent password cache for user 'joe'
# Пароль можно писать и в открытом виде, но можно и зашифровать с помощью команды smbutil crypt <Пароль>
# Учтите, что это очень слабое криптование и легко ломается, поэтому права на файл должны быть 0600.
# Например: smbutil crypt testing_password
password=$$17c5a5325393d1d29e0fefbccdda6b4af
Код: Выделить всё
//SQLSERVER@DBSERVER/d$ /media/sqlserver_d/ smbfs rw,-N 0 0
монтируем и делаем символическую ссылку в PREFIX сконфигурированного WINE
Код: Выделить всё
mount -a
ln -s /media/sqlserver_d/ /home/windows/.wine/dosdevices/d:
Чтобы все пользователи запускали 1С из под учетной записи windows, необходимо при запуске сессии выполнить команду xhost +local:windows,тем самым разрешаем пользователю windows локально подключаться к запущеной сессии
Код: Выделить всё
user@Test-BSD-Term:~ % xhost +local:windows
non-network local connections being added to access control list
Первый вариант. Создать в директории /usr/local/etc/xdg/autostart файл, например startup.desktop, с таким содержимым:
Код: Выделить всё
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=Startup
Comment=(xhost)
Exec=xhost +local:windows
OnlyShowIn=XFCE;
RunHook=0
StartupNotify=false
Terminal=false
Hidden=false
После создания ярлыка автозапуска его можно будет переместить в директорию общей конфигурации /usr/local/etc/xdg/autostart и эта команда будет запускаться для всех пользователей.
Печать из 1С
В качестве сервиса печати будем использовать CUPS. Хоть i386-wine-devel напрямую c CUPS’ом не работает, он работает с LPD, всё таки есть возможность печатать настроить печать в CUPS.
Устанавливаем CUPS, если он не установился ранее
Код: Выделить всё
pkg install -y cups
Если есть, правим конфиг CUPS, меняем Listen localhost:631 на Listen *:631 (если конфигурация предполагается не с localhost'а)
и в разделы
Код: Выделить всё
<Location />
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168.10.222
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168.10.222
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168.10.222
</Location>
# Restrict access to log files...
<Location /admin/log>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168.10.222
</Location>
Теперь, чтобы добиться печати на принтеры из 1C из WINE, подменим файлы стандартного сервиса lpd на lpd CUPS’а
Код: Выделить всё
cd /usr/bin
mv lp lp.bak
mv lpq lpq.bak
mv lpr lpr.bak
mv lprm lprm.bak
ln -s /usr/local/bin/lp /usr/bin/lp
ln -s /usr/local/bin/lpq /usr/bin/lpq
ln -s /usr/local/bin/lpr /usr/bin/lpr
ln -s /usr/local/bin/lprm /usr/bin/lprm
Код: Выделить всё
cupsd_enable="YES"
В принципе всё, можно попробовать распечатать что-либо из 1С.
XRDP пока ещё (и не известно, будет ли когда-нибудь) не научился пробрасывать, и добавлять в CUPS, принтеры подключенные к локальному компьютеру. Поэтому, это приходится делать вручную, добавляя принтер по протоколу LPD/LPR. Для этого в windows к которому подключен принтер и откуда идет подключение по RDP, необходимо добавить Службу печати LPD в Windows Vista и выше
или Службу печати UNIX в Windows XP, Windows Server 2003
А дальше по стандартому сценарию, расшариваем принтер и добавляем его в CUPS, с тем именем которое было указано при расшаривании.
Ну, вот как-то так.