Create TOC

레이블이 KDE인 게시물을 표시합니다. 모든 게시물 표시
레이블이 KDE인 게시물을 표시합니다. 모든 게시물 표시

2021년 3월 9일

KDE/qdbus로 단축키에 해당하는 기능 실행하기

KDE에서 fusuma를 이용해 trackpad 제스쳐를 설정할때 xdotool을 사용해 KDE 단축키를 누른 것과 같은 효과를 낼 수 있다. 다만 이때 가상머신등을 사용하는 경우 단축키를 가상머신에서 받아들이기 때문에 원하는 단축키 실행이 되지 않을 수 있다. 이때는 xdotool 대신 qdbus을 이용해 KDE 단축키에 해당하는 기능을 바로 실행하면 문제가 해결된다.

단축키를 가지는 component 목록 얻기

$ qdbus org.kde.kglobalaccel

모든 단축기 정보 얻기

$ qdbus --literal org.kde.kglobalaccel /component/plasmashell allShortcutInfos | bat -l json 

실행

$ qdbus org.kde.kglobalaccel /component/plasmashell invokeShortcut activate\ widget\ 200

자주 쓰는 단축키

시작 메뉴

$ qdbus org.kde.kglobalaccel /component/plasmashell invokeShortcut activate\ widget\ 200

Expose All

$ qdbus org.kde.kglobalaccel /component/kwin invokeShortcut ExposeAll

Expose

$ qdbus org.kde.kglobalaccel /component/kwin invokeShortcut Expose

Latte Dock 첫번째 항목 활성

$ qdbus org.kde.kglobalaccel /component/lattedock invokeShortcut activate\ entry\ 1

2021년 1월 27일

Debian/KDE에 xrdp 환경 설정

KDE에 xrdp 환경을 설정한다.

xrdp

설치

$ sudo apt install xrdp

설정

xrdp

/etc/xrdp/xrdp.ini에 아래 내용을 추가한다.

[x11vnc]
name=x11vnc
lib=libvnc.so
ip=127.0.0.1
port=5900
username=na
pamusername=ask
pampassword=ask
pamsessionmng=127.0.0.1

설정이 끝나면 xrdp 서버를 재시작한다.

$ sudo systemctl restart xrdp

방화벽

192.168.0.x 대역에서만 접속할 수 있게 방화벽을 설정한다.

$ sudo ufw allow from 192.168.0.0/24 to any port 3389 comment RDP

x11vnc

xrdp에서 사용할 x11vnc 서버를 설정한다. KDE의 krfb를 사용하면 한글 입력시 자소가 분리된다.

설치

$ sudo apt install x11vnc

systemd 설정

아래 명령으로 x11vnc.service 파일을 편집한다.

$ sudo systemctl edit --force --full x11vnc.service

파일 내용은 아래와 같다. xrdp에서만 접속하기 때문에 -localhost옵션을 넣었고 비밀번호를 사용하지 않기 위해 -nopw옵션을 사용했다.

[Unit]
Description=x11vnc server for SDDM
Requires=display-manager.service
After=display-manger.service

[Service]
ExecStartPre=/bin/bash -c 'while ! find /var/run/sddm -type f; do sleep 2; done' 
ExecStart=/bin/bash -c "/usr/bin/x11vnc -display :0 -auth $(/usr/bin/find /var/run/sddm/ -type f) -nopw -shared -xkb -norepeat -noxrecord -noxdamage -localhost -no6 -loop -forever"

[Install]
WantedBy=graphical.target

테스트

적당한 RDP client를 사용해 접속이 잘되는지 확인한다.

자동 실행 설정

재부팅 후 자동 실행하도록 설정한다.


$ sudo systemctl enable x11vnc.service

입력기 설정

RDP Client 에 따라서 오른쪽 alt 키나 한/영 키가 동작 안할 수 있기 때문에, 사용하는 입력기 설정에서 한/영 전환 키에 shift+space를 추가해둔다.

2020년 11월 29일

KDE/일출, 일몰에 따라 자동으로 테마 변경하기

KDE에는 일출, 일몰에 따라 자동으로 테마를 변경하는 설정이 없어서 따로 스크립트를 만들어서 변경한다.

일몰, 일출 시간을 얻기 위해서 python3-astral 패키지를 설치한다.

$ sudo apt install python3-astral

아래 python 스크립트를 ~/.local/bin/lookandfeel_change.py 으로 저장한다.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# vim:set expandtab fenc=utf-8 ff=unix:

import os
import logging
import datetime
import subprocess
import argparse
from astral import Astral  # type:ignore


logging.basicConfig(format='[%(asctime)s]{%(name)s}(%(levelname)s) %(message)s', level=logging.INFO)
logger = logging.getLogger(os.path.basename(__file__))
KST = datetime.timezone(datetime.timedelta(hours=9))

DARK_THEME = 'org.kde.breezedark.desktop'
LIGHT_THEME = 'org.kde.breeze.desktop'


def kreadconfig(group: str, key: str) -> str:
    p = subprocess.run(['/usr/bin/kreadconfig5', '--group', group, '--key', key],
                       capture_output=True)
    return p.stdout.decode('utf-8').strip()


def kwriteconfig(group: str, key: str, value: str):
    p = subprocess.run(['/usr/bin/kwriteconfig5', '--group', group, '--key', key, value],
                       capture_output=True)
    logger.debug(p.stdout.decode('utf-8').strip())
    logger.debug(p.stderr.decode('utf-8').strip())


def apply_theme(theme: str):
    p = subprocess.run(['/usr/bin/lookandfeeltool', '-a', theme], capture_output=True)
    logger.debug(p.stdout.decode('utf-8').strip())
    logger.debug(p.stderr.decode('utf-8').strip())
    kwriteconfig('KDE', 'LookAndFeelPackage', theme)


def main():
    ast = Astral()
    city = ast['Seoul']
    now = datetime.datetime.now(tz=KST)
    today = city.sun(date=now, local=True)
    logger.debug(f'{today["sunrise"]} <= {now} < {today["sunset"]}')

    new_theme = DARK_THEME
    if (today['sunrise'] <= now < today['sunset']):
        new_theme = LIGHT_THEME

    cur_theme = kreadconfig('KDE', 'LookAndFeelPackage')

    if cur_theme != new_theme:
        apply_theme(new_theme)
        logger.debug(f'apply {new_theme}')
    else:
        logger.debug(f'already applied {cur_theme}')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='일출/일몰시간을 기준으로 Plasma 테마를 변경')

    parser.add_argument('--debug', '-d', action='store_true')

    options = parser.parse_args()

    if options.debug:
        logger.setLevel(logging.DEBUG)

    main()

저장 후 실행 속성을 준다.

$ chmod +x ~/.local/bin/lookandfeel_change.py

이대로 cron에 등록하면 제대로 동작하지 않는다. cron으로 실행하는 경우 login 했을 때와 환경 변수 구성이 다르기 때문이다. 아래 script를 ~/.local/bin/lookandfeel_change.sh으로 저장한다.

#!/bin/bash

export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/계정id/bus
export DESKTOP_SESSION=plasma
export DISPLAY=:0
export PATH=/home/계정명/.local/bin:/usr/local/bin/:/usr/local/bin:/usr/bin:/bin:/usr/games
export SHELL=/bin/bash
export XDG_CURRENT_DESKTOP=KDE
export XDG_RUNTIME_DIR=/run/user/계정id
export XDG_DATA_DIRS=/var/lib/flatpak/exports/share:/usr/local/share:/usr/share

/home/계정명/.local/bin/lookandfeel_change.py

계정id는 id 명령으로 확인할 수 있다. Debian 계열인 경우 첫번째로 추가한 사용자 id는 보통 1000 이다.

$ id

저장 후 실행 속성을 준다.

$ chmod +x ~/.local/bin/lookandfeel_change.sh

이제 10분마다 실행할 수 있게 crontab에 등록한다.

*/10 * * * * /home/계정명/.local/bin/lookandfeel_change.sh