Map Caps lock as additional Ctrl

Ubuntu (Maybe debian(Maybe linux))

# Edit /etc/default/keyboard

KXBOPTIONS="ctrl:nocaps"

or this:

#!/bin/bash
PATH='org.gnome.desktop.input-sources'
OPTION="'ctrl:nocaps'"
status=$(/usr/bin/gsettings get $PATH xkb-options)
if [[ "$status" == *"$OPTION"* ]]; then
    echo "Already configured"
    exit
fi

new_value="${status%]},'ctrl:nocaps']"
echo "$new_value"
/usr/bin/gsettings set $PATH xkb-options "$new_value"

Run setxkbmap -option ctrl:nocaps for temporarily setup.

Windows

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

OSX

GOTO preference.

Nginx, PHP-fpm, userdir

동아리에서 실습 서버를 구축하는데 아이들이 각자 웹페이지를 만들 수 있도록 userdir를 설정하고 싶었다.
userdir을 설정하면 계정마다 ~/public_html 디렉터리 밑에 파일들을 만들어 두면 server-name/~username 같은 URL로 접속할 수 있게 해 주어서 학교에서 자주 쓰인다.

아파치에서는 userdir 모듈을 로드하고 PHP도 주석 하나만 풀면 되는데 Nginx에서는 좀 어려웠다. 아무리 설정파일들을 찾아 봐도 PHP는 실행이 안 되었다. 그러다가 되는 설정을 찾았고 역시나 location 구문을 두 번 적고 중복되는 부분도 참 많다. Nginx에서 이 부분은 얼른 개선해 주면 좋겠는데 일부러 안 하는 듯 하다.

        # Userdir - php
        location ~ ^/~([^/]+)/(.+\.php)$ {
            if (!-f /home/$1/public_html/$2) {
                rewrite ^ 404;
            }
            alias /home/$1/public_html/$2;
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }

        # Userdir - static
        location ~ ^/~([^/]+)(/.*)?$ {
            alias /home/$1/public_html$2;
            index index.php index.html;
            autoindex on;
        }

SSH 프록시 설정

SSH를 쓰다 보면 프록시를 타야 할 경우가 가끔 생긴다. 공유기 밑에 여러 호스트가 물려 있다든지 최종 목적지가 특정한 IP로부터의 접속만 허용한다든가 하는 이유로 말이다.
그런 경우엔 방법이 몇 가지 존재하는데 프록시로 쓸 호스트를 A, 최종 목적지 호스트를 X라고 하자.

1. A에 접속한 후 거기에서 X에 접속

user@localhost$ ssh A
user@A$ ssh X
user@X$ 

1.1 이걸 한 번에

user@localhost$ ssh A -t ssh X
2대의 호스트를 거쳐 갈 경우에도 가능하다
user@localhost$ ssh A -t ssh B -t ssh X

2. 프록시 설정

1의 방법은 좀 문제가 있는데 SSH를 여러 번 타면 괜히 암호화를 여러 번 거치게 된다. scp도 쓰기에 굉장히 불편하고.
그래서 ~/.ssh/config를 수정해서 아예 프록시 설정을 만들어버리자.

ControlMaster auto
ControlPath ~/.ssh/tmp/%h_%p_%r

Host X
    ProxyCommand ssh -q A -W X:%p

ControlMaster, ControlPath 부분은 굳이 적지 않아도 되는 부분이지만 X 호스트에 여러 커넥션을 만들 때 굳이 A에 커넥션을 여러 개 만들지 않게 하는 옵션이다. 이 옵션을 쓰려면 ControlPath에 해당하는 디렉터리를 수동으로 만들어 줘야 한다. 디렉터리가 없다면 스스로 만들어 주지 않고 에러를 뱉는다.

ProxyCommand 옵션은 말 그대로 프록시를 만드는 커맨드를 적는 옵션인데 %p는 X에 접속할 때의 포트를 뜻하는 이스케이프 시퀀스이고 나머지는 그냥 평범하게 netcat을 이용해서 커넥션을 여는 것이다.
-W 옵션을 이용하여 nc 없이도 커넥션을 열 수 있다.

2.1 보너스

가끔 포트포워딩이 전혀 동작하지 않는 환경에서 SSH를 열어 둬야 할 때가 있는데 이 때는 Tor를 이용하면 편하다(Tor가 그러라고 있는 건 아니지만..). 참고
SSH를 Tor의 Hidden service로 열어 두고 ssh 설정에 이 ProxyCommand를 쓰면 된다.

# ~/.ssh/config
Host *.onion
    ProxyCommand /usr/bin/nc -xlocalhost:9050 -X5 %h %p
# Tor config on server
HiddenServiceDir [directory]
HiddenServicePort 22 127.0.0.1:22
HiddenServiceAuthorizeClient stealth clientname1,clientname2,clientname3