initial commit
This commit is contained in:
49
Dockerfile
Normal file
49
Dockerfile
Normal file
@@ -0,0 +1,49 @@
|
||||
FROM debian:trixie
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update
|
||||
|
||||
# locale gen
|
||||
RUN apt-get install -y locales
|
||||
ENV TZ=Asia/Seoul
|
||||
ENV LANG=ko_KR.UTF-8
|
||||
ENV LANGUAGE=ko_KR:ko
|
||||
ENV LC_ALL=ko_KR.UTF-8
|
||||
RUN sed -i 's/^# *ko_KR.UTF-8 UTF-8/ko_KR.UTF-8 UTF-8/' /etc/locale.gen && locale-gen $LANG && update-locale LANG=$LANG
|
||||
|
||||
# install modules
|
||||
RUN apt-get install -y dbus-x11 x11-xserver-utils xfce4 xfce4-goodies xorgxrdp xrdp tumbler \
|
||||
ibus ibus-gtk3 fcitx5-hangul fcitx5-config-qt fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fonts-noto-cjk \
|
||||
sudo nano vim net-tools chromium git curl npm \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# install vscode
|
||||
RUN curl -q -L -o vscode.deb https://update.code.visualstudio.com/1.103.2/linux-deb-x64/stable \
|
||||
&& apt-get install ./vscode.deb \
|
||||
&& rm -rf ./vscode.deb /etc/apt/sources.list.d/vscode.sources
|
||||
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
COPY user-entrypoint.sh /etc/X11/Xsession.d/97user-entrypoint
|
||||
|
||||
COPY initial-resource/ /var/initial-resource/
|
||||
|
||||
# korean keycode correction
|
||||
RUN sed -i 's/<HNGL> = 209;/<HNGL> = 122;/g' /usr/share/X11/xkb/keycodes/xfree86
|
||||
RUN sed -i 's/<HJCV> = 210;/<HJCV> = 121;/g' /usr/share/X11/xkb/keycodes/xfree86
|
||||
|
||||
# startup profile
|
||||
RUN echo "TZ=Asia/Seoul" >> /etc/environment && \
|
||||
echo "LANG=ko_KR.UTF-8" >> /etc/environment && \
|
||||
echo "LANGUAGE=ko_KR:ko" >> /etc/environment && \
|
||||
echo "LC_ALL=ko_KR.UTF-8" >> /etc/environment && \
|
||||
echo "GTK_IM_MODULE=fcitx" >> /etc/environment && \
|
||||
echo "QT_IM_MODULE=fcitx" >> /etc/environment && \
|
||||
echo "QT4_IM_MODULE=fcitx" >> /etc/environment && \
|
||||
echo "QT5_IM_MODULE=fcitx" >> /etc/environment && \
|
||||
echo "XMODIFIERS=@im=fcitx" >> /etc/environment
|
||||
|
||||
EXPOSE 3389
|
||||
ENTRYPOINT /entrypoint.sh
|
||||
33
README.md
Normal file
33
README.md
Normal file
@@ -0,0 +1,33 @@
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
# 설명
|
||||
RDP(리모트 데스크탑) 지원하는 경량 debian 13 (trixie) base 한글 XWINDOW(wayland) docker
|
||||
|
||||
# 설치된 프로그램
|
||||
- Visual studio code
|
||||
- Chromium
|
||||
- vim
|
||||
- git
|
||||
- npm + nodejs
|
||||
|
||||
# 사용법
|
||||
- docker 3389 port 열어서 띄우시면 됩니다. 그 후 윈도우 원격 데스크탑(3389포트)으로 해당 컨테이너 접속.
|
||||
- 사용자명을 지정하고 싶은 경우, docker env 에다가 XWINDOW_USER=(사용자명), XWINDOW_PASSWORD=(패스워드) 를 입력하시면 됩니다.
|
||||
- 만약 입력안하시는 경우 사용자명은 'user', 패스워드는 임의로 생성되며, 패스워드는 docker logs 에 표시됩니다.
|
||||
|
||||
# 사용자 데이터 및 볼륨 유지
|
||||
- docker 에서 /home/(사용자명) 볼륨을 연결하시는 경우 home 디렉토리 안에 있는 자료는 유지되며 계속 사용하실 수 있습니다.
|
||||
|
||||
# 로컬리소스 (드라이브) 연결
|
||||
- 보안 상 로컬리소스가 붙는게 막혀있습니다. 로컬 리소스를 연결해서 CTRL+C / CTRL+V 같은 파일 복사를 원하시는 경우에는 privileged 모드로 실행하세요.
|
||||
- privileged 모드로 실행하는 경우 C: 같은 드라이브는 home 디렉토리 내 thinclient_drives 에 마운트 됩니다.
|
||||
|
||||
# 새 사용자 생성
|
||||
sudo su 하셔서 루트 권한으로 adduser 하시면 됩니다.
|
||||
|
||||
# 주의사항
|
||||
- privileged mode 가 아닌 경우 vscode 나 chromium 이 no-sandbox 모드에서 실행됩니다. 참고하십시오.
|
||||
- sound 관련이 충돌이 많고 버그가 많아 포함시키지 않았습니다. 테스트 결과 설치하더라도 끊기거나 안정적이지 않습니다. 게다가 설치 용량도 너무 커지는 관계로 제외하였습니다.
|
||||
3
SECURITY.md
Normal file
3
SECURITY.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Security Policy
|
||||
|
||||
보안 문제라고 판단되시면 언제든 이슈 등록해주세요!
|
||||
49
entrypoint.sh
Normal file
49
entrypoint.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
export TZ=Asia/Seoul
|
||||
export LANG=ko_KR.UTF-8
|
||||
export LANGUAGE=ko_KR:ko
|
||||
export LC_ALL=ko_KR.UTF-8
|
||||
|
||||
# set username
|
||||
XWINDOW_USER="${XWINDOW_USER:-user}"
|
||||
if ! id -u $XWINDOW_USER >/dev/null 2>&1; then
|
||||
useradd -m -s /bin/bash $XWINDOW_USER
|
||||
echo "user '$XWINDOW_USER' generated."
|
||||
fi
|
||||
|
||||
# set password
|
||||
if [ -z "$XWINDOW_PASSWORD" ]; then
|
||||
XWINDOW_PASSWORD=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 8)
|
||||
echo "$XWINDOW_USER's generated password: $XWINDOW_PASSWORD"
|
||||
fi
|
||||
echo "$XWINDOW_USER:$XWINDOW_PASSWORD" | chpasswd
|
||||
echo "user '$XWINDOW_USER' password set."
|
||||
|
||||
# change own and permission
|
||||
chown $XWINDOW_USER:$XWINDOW_USER /home/$XWINDOW_USER
|
||||
chmod 700 /home/$XWINDOW_USER
|
||||
|
||||
# add sudo group
|
||||
usermod -aG sudo $XWINDOW_USER
|
||||
|
||||
# remove pid files
|
||||
[ ! -f /var/run/xrdp/xrdp-sesman.pid ] || rm -f /var/run/xrdp/xrdp-sesman.pid
|
||||
[ ! -f /var/run/xrdp/xrdp.pid ] || rm -f /var/run/xrdp/xrdp.pid
|
||||
|
||||
# check sandbox mode
|
||||
set +e
|
||||
SANDBOX_CHECK_OUTPUT=$(unshare -U true 2>&1)
|
||||
SANDBOX_CHECK_EXIT_CODE=$?
|
||||
if [ "$SANDBOX_CHECK_EXIT_CODE" -ne 0 ]; then
|
||||
sed -i 's|^CHROMIUM_FLAGS=""|CHROMIUM_FLAGS="--no-sandbox --start-maximized --disable-gpu"|' /usr/bin/chromium
|
||||
rm -rf /usr/bin/code
|
||||
ln -s /usr/share/code/bin/code /usr/bin/code
|
||||
sed -i 's|ELECTRON_RUN_AS_NODE=1 "\$ELECTRON" "\$CLI" "\$@"|ELECTRON_RUN_AS_NODE=1 "\$ELECTRON" "\$CLI" --no-sandbox --disable-gpu "\$@"|' /usr/share/code/bin/code
|
||||
fi
|
||||
set -e
|
||||
|
||||
# run program
|
||||
/usr/sbin/xrdp-sesman
|
||||
/usr/sbin/xrdp --nodaemon
|
||||
78
initial-resource/.config/fcitx5/config
Normal file
78
initial-resource/.config/fcitx5/config
Normal file
@@ -0,0 +1,78 @@
|
||||
[Hotkey]
|
||||
# 트리거 키를 반복해서 누를 때 열거하기
|
||||
EnumerateWithTriggerKeys=False
|
||||
# 입력기 전환
|
||||
EnumerateForwardKeys=
|
||||
# 입력기 역순으로 전환
|
||||
EnumerateBackwardKeys=
|
||||
# 열거하는 동안 첫 번째 입력기 건너뛰기
|
||||
EnumerateSkipFirst=False
|
||||
# 입력기 그룹 전환
|
||||
EnumerateGroupForwardKeys=
|
||||
# 입력기 그룹 역순으로 전환
|
||||
EnumerateGroupBackwardKeys=
|
||||
# 입력기 활성화
|
||||
ActivateKeys=
|
||||
# 입력기 비활성화
|
||||
DeactivateKeys=
|
||||
# Time limit in milliseconds for triggering modifier key shortcuts
|
||||
ModifierOnlyKeyTimeout=250
|
||||
|
||||
[Hotkey/TriggerKeys]
|
||||
0=Control+space
|
||||
1=Alt+Alt_R
|
||||
2=Hangul
|
||||
|
||||
[Hotkey/AltTriggerKeys]
|
||||
0=Shift_L
|
||||
|
||||
[Hotkey/PrevPage]
|
||||
0=Up
|
||||
|
||||
[Hotkey/NextPage]
|
||||
0=Down
|
||||
|
||||
[Hotkey/PrevCandidate]
|
||||
0=Shift+Tab
|
||||
|
||||
[Hotkey/NextCandidate]
|
||||
0=Tab
|
||||
|
||||
[Hotkey/TogglePreedit]
|
||||
0=Control+Alt+P
|
||||
|
||||
[Behavior]
|
||||
# 기본적으로 활성화
|
||||
ActiveByDefault=False
|
||||
# Reset state on Focus In
|
||||
resetStateWhenFocusIn=No
|
||||
# 입력 상태 공유
|
||||
ShareInputState=All
|
||||
# 응용프로그램에서 사전편집 표시
|
||||
PreeditEnabledByDefault=True
|
||||
# 입력기 변경시 입력기 정보 표시
|
||||
ShowInputMethodInformation=True
|
||||
# 포커스를 변경할 때 입력기 정보 표시
|
||||
showInputMethodInformationWhenFocusIn=False
|
||||
# 간결한 입력기 정보 표시
|
||||
CompactInputMethodInformation=True
|
||||
# 첫 번째 입력기 정보 표시
|
||||
ShowFirstInputMethodInformation=True
|
||||
# 페이지 크기 기본값
|
||||
DefaultPageSize=5
|
||||
# Xkb 옵션 재정의
|
||||
OverrideXkbOption=False
|
||||
# 사용자 지정 Xkb 옵션
|
||||
CustomXkbOption=
|
||||
# Force Enabled Addons
|
||||
EnabledAddons=
|
||||
# Force Disabled Addons
|
||||
DisabledAddons=
|
||||
# Preload input method to be used by default
|
||||
PreloadInputMethod=True
|
||||
# Allow input method in the password field
|
||||
AllowInputMethodForPassword=False
|
||||
# Show preedit text when typing password
|
||||
ShowPreeditForPassword=False
|
||||
# Interval of saving user data in minutes
|
||||
AutoSavePeriod=30
|
||||
22
initial-resource/.config/fcitx5/profile
Normal file
22
initial-resource/.config/fcitx5/profile
Normal file
@@ -0,0 +1,22 @@
|
||||
[Groups/0]
|
||||
# Group Name
|
||||
Name=기본값
|
||||
# Layout
|
||||
Default Layout=us
|
||||
# Default Input Method
|
||||
DefaultIM=keyboard-us
|
||||
|
||||
[Groups/0/Items/0]
|
||||
# Name
|
||||
Name=keyboard-us
|
||||
# Layout
|
||||
Layout=
|
||||
|
||||
[Groups/0/Items/1]
|
||||
# Name
|
||||
Name=hangul
|
||||
# Layout
|
||||
Layout=
|
||||
|
||||
[GroupOrder]
|
||||
0=기본값
|
||||
7
initial-resource/Desktop/chromium.desktop
Normal file
7
initial-resource/Desktop/chromium.desktop
Normal file
@@ -0,0 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=Chromium 웹 브라우저
|
||||
Comment=인터넷에 연결합니다
|
||||
Exec=/usr/bin/chromium %U
|
||||
Icon=chromium
|
||||
Terminal=false
|
||||
Type=Application
|
||||
7
initial-resource/Desktop/vscode.desktop
Normal file
7
initial-resource/Desktop/vscode.desktop
Normal file
@@ -0,0 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=Visual Studio Code
|
||||
Comment=Code Editing. Redefined.
|
||||
Exec=/usr/bin/code %F
|
||||
Icon=vscode
|
||||
Terminal=false
|
||||
Type=Application
|
||||
34
user-entrypoint.sh
Normal file
34
user-entrypoint.sh
Normal file
@@ -0,0 +1,34 @@
|
||||
FIRST_LOGIN_SETUP_FLAG="$HOME/.first_login_setup_done"
|
||||
|
||||
# first login script
|
||||
if [ ! -f "$FIRST_LOGIN_SETUP_FLAG" ]; then
|
||||
|
||||
# 디폴트 브라우져 설정
|
||||
xdg-settings set default-web-browser chromium.desktop
|
||||
|
||||
# fcitx5 설정 복사
|
||||
cp /var/initial-resource/.config ~ -R
|
||||
|
||||
# .desktop 파일 복사
|
||||
mkdir -p ~/바탕화면
|
||||
cp /var/initial-resource/Desktop/*.desktop ~/바탕화면/
|
||||
|
||||
# Desktop/*.desktop 반복 처리
|
||||
for FILE in ~/바탕화면/*.desktop; do
|
||||
# 1. 실행 권한 부여
|
||||
chmod +x "$FILE"
|
||||
|
||||
# 2. XFCE 체크섬 설정
|
||||
if command -v gio >/dev/null 2>&1; then
|
||||
SHA256=$(sha256sum "$FILE" | awk '{print $1}')
|
||||
gio set "$FILE" metadata::xfce-exe-checksum "$SHA256"
|
||||
chmod 700 "$FILE"
|
||||
fi
|
||||
done
|
||||
|
||||
touch "$FIRST_LOGIN_SETUP_FLAG"
|
||||
fi
|
||||
|
||||
# normal start scripts ------------------------------------------------------------------------
|
||||
fcitx5 -d
|
||||
(sleep 5; setxkbmap -rules base -model pc105 -layout kr -variant kr106 -option korean:ralt_hangul -option korean:rctrl_hanja;) &
|
||||
Reference in New Issue
Block a user