<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://wiki.dong-min.kim/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kim135797531</id>
	<title>DM wiki - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dong-min.kim/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kim135797531"/>
	<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/view/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Kim135797531"/>
	<updated>2026-06-05T19:14:47Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.37.0-beta</generator>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=222</id>
		<title>시놀로지 도커 설정</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=222"/>
		<updated>2025-05-02T03:09:19Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* 응용 프로그램(애플리케이션) - 독립형 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 외부 노출 서버 (시놀로지 VMM) ==&lt;br /&gt;
&lt;br /&gt;
* alpine-virt-3.11.3&lt;br /&gt;
&lt;br /&gt;
=== 역할 ===&lt;br /&gt;
&lt;br /&gt;
* 현재 IPv6 Cloudflare에 보고(갱신)&lt;br /&gt;
* 웹 프록시&lt;br /&gt;
&lt;br /&gt;
=== 마운트 설정 ===&lt;br /&gt;
&lt;br /&gt;
* alpine에 nfsmount 설치&lt;br /&gt;
** apk add nfsmount&lt;br /&gt;
* /etc/fstab에 다음 내용 추가&lt;br /&gt;
** 맨 뒤의 _netdev와 0 0을 꼭 추가해야 한다 (안하면 네트워크 연결 전에 마운트 시도해서 부팅 안 됨)&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
내부서버IP:/volume1/시놀로지폴더 /마운트경로 nfs nfsvers=3,rsize=524288,wsize=524288,ro,auto,nolock,_netdev 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare 연동 IP 등록 ===&lt;br /&gt;
&lt;br /&gt;
* 일본 특성상 IPv4 포트가 매우 제한적으로 열려 있고, 10000번대 밑으로는 아예 열리지도 않음&lt;br /&gt;
* IPv6는 이런 제한이 없음. 공유기가 각각의 머신에 뿌려주는 IP는 DHCP라기보다는 일본 인터넷에 직접 연결된 공인 IP.&lt;br /&gt;
** IPv6는 설계시부터 모든 기기가 고유의 공인 IP를 갖는 형태로 설계됨. 다만 그 특성상 보안에 취약하므로, 영구 IPv6 주소와 별개로 임시 IPv6가 부여되어, 수시로 주소가 바뀜.&lt;br /&gt;
** 주소 바뀜을 체크하여, Cloudflare DNS에 등록해 주는 역할 (v6 레코드인 AAAA를 업데이트 함)&lt;br /&gt;
** 다음 파일을 alpine 서버의 /etc/init.d에 저장. (파일 이름 cloudflare-alpine.service)&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
# $apk add python3&lt;br /&gt;
# $apk add py3-requests&lt;br /&gt;
# Copy this file into /etc/init.d/&lt;br /&gt;
# Test by $rc-service cloudflare-alpine.service start&lt;br /&gt;
# $rc-update add cloudflare-alpine.service&lt;br /&gt;
# $rc-service cloudflare-alpine.service restart&lt;br /&gt;
# $rc-update -u&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;Update Cloudflare DNS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
command=&amp;quot;/usr/bin/python3 /root/cloudflare-alpine.py&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;/var/run/cloudflare/cloudflare.pid&amp;quot;&lt;br /&gt;
command_background=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
        need net&lt;br /&gt;
        need nfsmount&lt;br /&gt;
        need sshd&lt;br /&gt;
        after iptables&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        ebegin &amp;quot;Starting cloudflare&amp;quot;&lt;br /&gt;
        mkdir -p /var/run/cloudflare || return 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;실제 업데이트를 수행하는 Python 파일을 위의 서비스 스크립트에 지정된 위치로 잘 저장&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_KEY = 'XXX'&lt;br /&gt;
CLOUDFLARE_ZONE_ID = 'XXX'&lt;br /&gt;
CLOUDFLARE_DNS_TOKEN = 'XXX'&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_HEADER = {&lt;br /&gt;
    'Authorization': 'Bearer {}'.format(CLOUDFLARE_DNS_TOKEN),&lt;br /&gt;
    'Content-Type': 'application/json'&lt;br /&gt;
}&lt;br /&gt;
DNS_GET_URL = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(CLOUDFLARE_ZONE_ID)&lt;br /&gt;
&lt;br /&gt;
device = 'eth0'&lt;br /&gt;
addr_file = '/tmp/cloudflare.addr6'&lt;br /&gt;
&lt;br /&gt;
def check():&lt;br /&gt;
    addr = ''&lt;br /&gt;
    try:&lt;br /&gt;
        with open(addr_file, 'r') as f:&lt;br /&gt;
            addr = f.read()&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    get_addr_cmd = &amp;quot;ip -6 addr list scope global $device | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v ' fd' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'deprecated' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'mngtmpaddr' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;head -n 2 | &amp;quot; \&lt;br /&gt;
                   &amp;quot;tail -n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    new_addr = os.popen(get_addr_cmd).read()&lt;br /&gt;
    new_addr = new_addr.split()[1]&lt;br /&gt;
    new_addr = new_addr.split('/')[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if addr == new_addr:&lt;br /&gt;
        print('same ip {}'.format(new_addr))&lt;br /&gt;
    else:&lt;br /&gt;
        r = requests.get(DNS_GET_URL, headers=CLOUDFLARE_HEADER)&lt;br /&gt;
        j = json.loads(r.text)&lt;br /&gt;
&lt;br /&gt;
        for item in j['result']:&lt;br /&gt;
            dns_put_url = DNS_GET_URL + '/' + item['id']&lt;br /&gt;
            new_data = dict(&lt;br /&gt;
                type=item['type'],&lt;br /&gt;
                name=item['name'],&lt;br /&gt;
                content=new_addr,&lt;br /&gt;
            )&lt;br /&gt;
            if item['type'] == 'AAAA':&lt;br /&gt;
                new_data['proxied'] = True&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
            elif item['type'] == 'TXT':&lt;br /&gt;
                new_data['content'] = 'v=spf1 {} ~all'.format(new_addr)&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
&lt;br /&gt;
        with open(addr_file, 'w') as f:&lt;br /&gt;
            f.write(new_addr)&lt;br /&gt;
            f.close()&lt;br /&gt;
        print('updated ip {}'.format(new_addr))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    check()&lt;br /&gt;
    sleep(60)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 그 후 서비스 등록&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
rc-update add cloudflare-alpine.service&lt;br /&gt;
rc-service cloudflare-alpine.service restart&lt;br /&gt;
rc-update -u&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 프록시 ===&lt;br /&gt;
&lt;br /&gt;
* Cloudflare로부터 오는 HTTPS 요청을 처리하여, 내부 서버에 전달&lt;br /&gt;
* 처음 도입 목적은 Cloudflare의 IPv6 over IPv4 기능을 이용하기 위함&lt;br /&gt;
* 생각해보니 외부/내부를 분리하여 보안성도 높아지고, 도커를 이용한 로드밸런서 구현 및 포트 번호 추상화가 가능해져 채택&lt;br /&gt;
* /etc/nginx/conf.d는 시놀로지에 config를 등록해 놓고 폴더째로 마운트&lt;br /&gt;
* wiki-proxy.conf 예시&lt;br /&gt;
** proxy_set_header를 설정해야 내부 서버에서 보이는 접속 요청 IP가 실제 사용자의 IP로 제대로 뜬다&lt;br /&gt;
** 내부 서버사이의 통신은 http로 하여 속도 향상 (방화벽 설정은 따로)&lt;br /&gt;
** TODO: upstream 요청 처리가 60초 이상 걸려도 취소 안 하게 설정하기? wiki의 restbase나 mathoid가 고장나는 이유가 이것 때문인 듯&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    listen   [::]:80;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
        &lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$server_name$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
	listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate pem파일;&lt;br /&gt;
    ssl_certificate_key key파일;&lt;br /&gt;
        &lt;br /&gt;
	server_name wiki.dong-min.kim;&lt;br /&gt;
    server_tokens off;&lt;br /&gt;
   &lt;br /&gt;
	location / {&lt;br /&gt;
        proxy_set_header  Host $host;&lt;br /&gt;
        proxy_set_header  X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header  X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header  Client-IP $remote_addr;&lt;br /&gt;
		proxy_pass http://내부 서버 주소:포트;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 웹 데몬 ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* HTTP 요청을 받아서&lt;br /&gt;
** 직접 처리(static)하거나&lt;br /&gt;
** PHP 인터프리터로 보내거나&lt;br /&gt;
** 다른 웹 데몬(Node.js, Python, ...)으로 다시 proxy한다&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/nginx&lt;br /&gt;
* 1.17.8-alpine&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** htpasswd -&amp;gt; (비공개)/htpasswd&lt;br /&gt;
** passwd -&amp;gt; /etc/passwd&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
** nginx/conf.d/ -&amp;gt; /etc/nginx/conf.d/&lt;br /&gt;
** nginx/nginx.conf -&amp;gt; /etc/nginx/nginx.conf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 ==&lt;br /&gt;
&lt;br /&gt;
=== PHP (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* PHP 데몬&lt;br /&gt;
* FPM(FastCGI Process Manager) 사용하여 동적 워커 생성&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 공식 레포지토리의 7.3.31-fpm-alpine3.14 기반&lt;br /&gt;
* 추가로 PHP 확장 기능을 설치하기 위해 Dockerfile 작성&lt;br /&gt;
** gd, mysqli, intl, @composer&lt;br /&gt;
* 이용한 라이브러리&lt;br /&gt;
** https://github.com/mlocati/docker-php-extension-installer&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9000&lt;br /&gt;
** 참고로 www.conf에서 다른 포트로 설정해도 php-fpm.d/zz-docker.conf에서 무조건 기본값으로 바꿈&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** php.ini -&amp;gt; /usr/local/etc/php/php.ini&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf.default&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
**php-패스wd -&amp;gt; /이티시/패스wd&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
==== php.ini 설정 ====&lt;br /&gt;
&lt;br /&gt;
* max_execution_time = 30&lt;br /&gt;
* max_input_time = 60&lt;br /&gt;
* memory_limit = 512M&lt;br /&gt;
* post_max_size = 10240M&lt;br /&gt;
* upload_max_filesize = 10240M&lt;br /&gt;
* default_socket_timeout = 30&lt;br /&gt;
* extension gd2, mysqli 활성화&lt;br /&gt;
&lt;br /&gt;
==== www.conf 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 여기 설정은 주로 미디어위키의 VisualEditor 확장 기능 + Math 수식 입력기를 사용할 때 Restbase 서버에 동시에 많은 요청을 보내는 것을 처리하기 위해 필요함&lt;br /&gt;
&lt;br /&gt;
* pm.max_children = 16&lt;br /&gt;
* pm.start_servers = 16&lt;br /&gt;
* pm.min_spare_servers = 16&lt;br /&gt;
* pm.max_spare_servers = 16&lt;br /&gt;
* pm.process_idle_timeout = 30s&lt;br /&gt;
&lt;br /&gt;
== 데이터베이스 ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 워드프레스, 미디어위키에 사용하기 위한 범용 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/mysql&lt;br /&gt;
* 5.7.29&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정 시작 번호-2):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** MySQL 실제 DB 파일 폴더 -&amp;gt; /var/lib/mysql/&lt;br /&gt;
** mysql.cnf -&amp;gt; /etc/mysql/conf.d/mysql.cnf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Cassandra (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API 백엔드 Restbase에서 사용하기 위한 고성능 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/cassandra/&lt;br /&gt;
* 3.11.6&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** Cassandra 실제 DB 파일 폴더 -&amp;gt; /var/lib/cassandra/&lt;br /&gt;
** Cassandra 설정 폴더 -&amp;gt; /etc/cassandra/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CASSANDRA_BROADCAST_ADDRESS = (호스트 주소 - 집 안의 NAS IP)&lt;br /&gt;
&lt;br /&gt;
==== cassandra-env.sh 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* MAX_HEAP_SIZE=&amp;quot;128M&amp;quot;&lt;br /&gt;
* HEAP_NEWSIZE=&amp;quot;20M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== cassandra.yaml 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* key_cache_size_in_mb: 0&lt;br /&gt;
* concurrent_reads: 2&lt;br /&gt;
* concurrent_writes: 2&lt;br /&gt;
* rpc_server_type: hsha&lt;br /&gt;
* rpc_min_threads: 1&lt;br /&gt;
* rpc_max_threads: 1&lt;br /&gt;
* concurrent_compactors: 1&lt;br /&gt;
* compaction_throughput_mb_per_sec: 0&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - Nginx 종속 ==&lt;br /&gt;
&lt;br /&gt;
=== 워드프레스 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 포트폴리오&lt;br /&gt;
* https://dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== wp-컨피그.php ====&lt;br /&gt;
&lt;br /&gt;
* FTPS 설정 (SFTP가 아니다)&lt;br /&gt;
* 프록시된 요청을 처리하기 위한 추가 설정&lt;br /&gt;
** $_SERVER['HTTPS']='on'; 구절만 있으면 된다&lt;br /&gt;
** 나머지는 프록시 서버 측의 설정이 잘못된 상태일 때 필요했었다&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FTP_HOST', '내부 서버 주소:내부 포트 번호');&lt;br /&gt;
define('FTP_USER', 'wp-ftps');&lt;br /&gt;
define('FTP_PASS', '');&lt;br /&gt;
define('FTP_SSL', true);&lt;br /&gt;
define('FTP_BASE', '(비공개)/wordpress/');&lt;br /&gt;
define('FTP_CONTENT_DIR', '(비공개)/wp-content/');&lt;br /&gt;
define('FTP_PLUGIN_DIR ', '(비공개)/wp-content/plugins/');&lt;br /&gt;
&lt;br /&gt;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')&lt;br /&gt;
    $_SERVER['HTTPS']='on';&lt;br /&gt;
    // define('RELOCATE', true); &lt;br /&gt;
    // define('WP_HOME', 'https://dong-min.kim');&lt;br /&gt;
    // define('WP_SITEURL', 'https://dong-min.kim');&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {&lt;br /&gt;
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 위키&lt;br /&gt;
* https://wiki.dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== 확장 기능 ====&lt;br /&gt;
&lt;br /&gt;
* VisualEditor, Math, SyntaxHighlight&lt;br /&gt;
** VisualEditor와 Math를 연동할 때, 수식 편집기에서 동적 업데이트 횟수에 비례해서 서버가 느려지는 현상 발생&lt;br /&gt;
** Math 확장 기능에서 제공하는 MWLatexNode.js가 수식이 업데이트 될 때마다 과거 기록을 지우지 않고 전부 갖고 있는 버그가 원인&lt;br /&gt;
** 그 기록들도 매 번 의미없는 업데이트를 하느라 서버가 느려짐&lt;br /&gt;
** 임시 해결 방법&lt;br /&gt;
*** Math 확장 기능의 modules/ve-math/ve.ce.MWLatexNode.js 파일의 맨 아래 쪽에 다음 항목을 추가하여, 강제 업데이트를 방지&lt;br /&gt;
*** 이거 해도 새로 고침은 하지만, 적어도 Mathoid 서버에 새로 요청 하지는 않는다 (캐시 사용)&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @inheritdoc ve.ce.GeneratedContentNode&lt;br /&gt;
 */&lt;br /&gt;
ve.ce.MWLatexNode.prototype.onGeneratedContentNodeUpdate = function ( staged ) {&lt;br /&gt;
	// 꼼수... this.root가 있을 때만 업데이트함&lt;br /&gt;
	// this.root가 있는 노드는 실제 글 속의 math 노드 (다이얼로그 속은 root 없음)&lt;br /&gt;
	if (this.root)&lt;br /&gt;
		this.update( undefined, staged );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Nginx config =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   ?????;&lt;br /&gt;
    listen   [::]:?????;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/wiki.access.log main;&lt;br /&gt;
    error_log /var/log/nginx/wiki.error.log;&lt;br /&gt;
&lt;br /&gt;
	charset utf-8;&lt;br /&gt;
	root ?????;&lt;br /&gt;
	index index.html index.htm index.php;&lt;br /&gt;
&lt;br /&gt;
	client_max_body_size 10240M;&lt;br /&gt;
	&lt;br /&gt;
    # Avoid 504 HTTP Timeout Errors&lt;br /&gt;
    proxy_connect_timeout       605;&lt;br /&gt;
    proxy_send_timeout          605;&lt;br /&gt;
    proxy_read_timeout          605;&lt;br /&gt;
    send_timeout                605;&lt;br /&gt;
    keepalive_timeout           605;&lt;br /&gt;
	fastcgi_read_timeout		605;&lt;br /&gt;
    &lt;br /&gt;
	location ~ ^/w/(index|load|thumb|opensearch_desc|api|rest|img_auth)\.php$ {&lt;br /&gt;
		include fastcgi.conf;&lt;br /&gt;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
		fastcgi_pass ?????:?????;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Images&lt;br /&gt;
	location /w/images {&lt;br /&gt;
		# Separate location for images/ so .php execution won't apply&lt;br /&gt;
		try_files $uri 404;		&lt;br /&gt;
	}&lt;br /&gt;
	location /w/images/deleted {&lt;br /&gt;
		# Deny access to deleted images folder&lt;br /&gt;
		deny all;&lt;br /&gt;
	}&lt;br /&gt;
	# MediaWiki assets (usually images)&lt;br /&gt;
	location ~ ^/w/resources/(assets|lib|src) {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
	# Assets, scripts and styles from skins and extensions&lt;br /&gt;
	location ~ ^/w/(skins|extensions)/.+\.(css|js|gif|jpg|jpeg|png|svg)$ {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# License and credits files&lt;br /&gt;
	location ~ ^/w/(COPYING|CREDITS)$ {&lt;br /&gt;
		default_type text/plain;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	## Uncomment the following code if you wish to use the installer/updater&lt;br /&gt;
	## installer/updater&lt;br /&gt;
	# location /w/mw-config/ {&lt;br /&gt;
	# 	# Do this inside of a location so it can be negated&lt;br /&gt;
	# 	location ~ \.php$ {&lt;br /&gt;
    #       include fastcgi.conf;&lt;br /&gt;
	# 		fastcgi_param SCRIPT_FILENAME $document_root/w/mw-config/$fastcgi_script_name;&lt;br /&gt;
	# 		fastcgi_pass ?????:????; # or whatever port your PHP-FPM listens on&lt;br /&gt;
	# 	}&lt;br /&gt;
	# }&lt;br /&gt;
	&lt;br /&gt;
	# Handling for Mediawiki REST API, see [[mw:API:REST_API]]&lt;br /&gt;
	location /w/rest.php/ {&lt;br /&gt;
		try_files $uri $uri/ /w/rest.php?$query_string;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Handling for the article path (pretty URLs)&lt;br /&gt;
	location /view/ {&lt;br /&gt;
		rewrite ^/view/(?&amp;lt;pagename&amp;gt;.*)$ /w/index.php;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Allow robots.txt in case you have one&lt;br /&gt;
	location = /robots.txt {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location = /favicon.ico {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location / {&lt;br /&gt;
		rewrite ^/(.*)$ /view/$1 redirect;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocalSettings.php ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// ... (생략)&lt;br /&gt;
&lt;br /&gt;
$wgArticlePath = &amp;quot;/view/$1&amp;quot;;&lt;br /&gt;
$wgUsePathInfo = true;&lt;br /&gt;
$wgScriptExtension = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgMathValidModes[] = 'mathml';&lt;br /&gt;
$wgDefaultUserOptions['math'] = 'mathml';&lt;br /&gt;
$wgMathFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
$wgMathMathMLUrl = 'https://wiki-mathoid.dong-min.kim';&lt;br /&gt;
&lt;br /&gt;
# START VisualEditor Setting&lt;br /&gt;
$wgGroupPermissions['user']['writeapi'] = true;&lt;br /&gt;
wfLoadExtension( 'Parsoid', 'vendor/wikimedia/parsoid/extension.json' );&lt;br /&gt;
# END VisualEditor Setting&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Restbase (도커) ===&lt;br /&gt;
&lt;br /&gt;
* 이 Restbase를 비롯하여 아래의 Parsoid, Mathoid는 미디어위키에서 Visual Editor + Math 확장 기능을 사용하기 위해 설치함&lt;br /&gt;
* 원래 미디어위키에서 무료로 제공하는 기본 Restbase서버와 Mathoid 서버를 이용해도 되지만, 속도가 정말 '''&amp;lt;big&amp;gt;끔찍&amp;lt;/big&amp;gt;하게''' 느려서 직접 구축&lt;br /&gt;
* 제대로 된 문서가 없어서 구축 삽질 엄청 했다... 코드 안에 mediawiki url 하드코딩이 너무 많아 뭐가 문제인지 발견하기가 힘들었다&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API를 처리하기 위한 REST 처리 서버&lt;br /&gt;
* REST로 받은 요청을 내부 독립 서버 (Parsoid, Mathoid 등)에 전달 및 반환 결과 캐싱&lt;br /&gt;
* 기본 DB 세팅인 SQLite는 동시에 많은 요청이 들어오면 db파일이 죽는 경우가 있어서, Cassandra 세팅으로 바꿈&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-restbase&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):7231&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Parsoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Visual Editor 등에서 html &amp;lt;-&amp;gt; wikitext 간 변환 등을 위해 문서 실시간 파싱 등을 처리&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-parsoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):8000&lt;br /&gt;
** (비공개):8001&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Mathoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Math 확장 기능에서 사용&lt;br /&gt;
* LaTeX 문법을 svg, png 등으로 변환&lt;br /&gt;
* Node.js 10&lt;br /&gt;
* pm2로 서비스화 시킴&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-mathoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):10042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Deluge (토렌트) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 토렌트 서버&lt;br /&gt;
* 컨테이너를 완전히 OpenVPN으로 감싸서, VPN 등록이 되지 않은 상태에서는 네트워크 접속을 원천 차단&lt;br /&gt;
* *.ovpn 파일은 config 폴더에 넣으면 됨&lt;br /&gt;
* vpn 서버의 IP 주소를 찾지 못하므로, /etc/hosts에 수동으로 IP주소 써 주기&lt;br /&gt;
* (일본 한정) v6플러스의 포트 포화를 막기 위해, 토렌트 속도를 희생하고 timeout이 없는 UDP가 아닌 timeout도 있고 공유기가 IP 마스커레이드도 잘 해주는 TCP로 vpn 설정&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/binhex/arch-delugevpn&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (기본값)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config/ -&amp;gt; /config&lt;br /&gt;
** (자료 저장 폴더) -&amp;gt; /data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** NAME_SERVERS = 1.1.1.1&lt;br /&gt;
** LAN_NETWORK = 호스트의 아이피 말고 호스트의 서브넷 (xxx.xxx.xxx.xxx/xx)&lt;br /&gt;
** ENABLE_PRIVOXY = yes&lt;br /&gt;
** PGID = 100&lt;br /&gt;
** PUID = 1026&lt;br /&gt;
** VPN_PROV = custom&lt;br /&gt;
** VPN_ENABLED = yes&lt;br /&gt;
** HOME = /config/home&lt;br /&gt;
&lt;br /&gt;
=== Gitlab ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 사설 Git 서버&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-ce/&lt;br /&gt;
* 12.8.8&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
&lt;br /&gt;
==== gitlab.rb 설정 ====&lt;br /&gt;
&lt;br /&gt;
* external_url 'https://git.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['gitlab_ssh_host'] = 'kasumi.synology.me'&lt;br /&gt;
* gitlab_rails['time_zone'] = 'Asia/Seoul'&lt;br /&gt;
* gitlab_rails['gitlab_default_theme'] = 10  # dark(default) = 2, red = 9, light red = 10&lt;br /&gt;
* gitlab_rails['trusted_proxies'] = ['시놀로지IP', '프록시IP']&lt;br /&gt;
* gitlab_rails['gitlab_shell_ssh_port'] = 64100&lt;br /&gt;
* registry_external_url 'https://registry.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['registry_enabled'] = true&lt;br /&gt;
* unicorn['worker_processes'] = 2&lt;br /&gt;
* sidekiq['concurrency'] = 3  # default 25&lt;br /&gt;
* nginx['gzip_enabled'] = false&lt;br /&gt;
* nginx['listen_port'] = 80&lt;br /&gt;
* nginx['listen_https'] = false&lt;br /&gt;
* registry_nginx['enable'] = true&lt;br /&gt;
* registry_nginx['gzip_enabled'] = false&lt;br /&gt;
* registry_nginx['listen_port'] = 5005&lt;br /&gt;
* registry_nginx['listen_https'] = false&lt;br /&gt;
&lt;br /&gt;
==== 업데이트 ====&lt;br /&gt;
* 업그레이드 패스 참조: https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/&lt;br /&gt;
* 컨테이너 들어가기&lt;br /&gt;
* 서비스 중지&lt;br /&gt;
** gitlab-ctl stop&lt;br /&gt;
* 컨테이너 정지&lt;br /&gt;
* 컨테이너 삭제&lt;br /&gt;
* 새 컨테이너 생성&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
* 상태 확인: https://git.dong-min.kim/admin/background_migrations&lt;br /&gt;
* 최종 확인&lt;br /&gt;
** gitlab-rake gitlab:check&lt;br /&gt;
&lt;br /&gt;
=== Gitlab Runner ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* Gitlab의 CI/CD 실행용 Runner&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-runner/&lt;br /&gt;
* 12.8.0&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 파일 설정&lt;br /&gt;
** docker.sock -&amp;gt; /var/run/docker.sock&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab runner 설정 폴더 -&amp;gt; /etc/gitlab-runner&lt;br /&gt;
* 주의점&lt;br /&gt;
** 시놀로지 docker를 쓰려면 시놀로지의 docker.sock이 필요하다.&lt;br /&gt;
*** 먼저 시놀로지 측에서 sudo ln -s /var/run/docker.sock /volume1/docker/docker.sock 으로 심볼릭 링크 생성&lt;br /&gt;
*** Gitlab Runner 컨테이너 생성할 때 위 파일 링크가 안 됨&lt;br /&gt;
*** 먼저 아무 파일이나 링크해서 일단 컨테이너 생성&lt;br /&gt;
*** 컨테이너 설정 백업해서, 그 파일 안에서 링크 수정&lt;br /&gt;
*** 수정한 컨테이너 설정을 다시 로드&lt;br /&gt;
** 컨테이너 실행 후 gitlab-runner register 명령어로 gitlab 등록&lt;br /&gt;
&lt;br /&gt;
=== kb_apart (광규 외주) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 광규 외주 프로그램 - 아파트 시세 확인&lt;br /&gt;
&lt;br /&gt;
* gliderlabs/alpine:3.3 기반 (glibc 설치용)&lt;br /&gt;
* Miniconda3 설치&lt;br /&gt;
* Python 3.7.5 + Flask&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-kb-apart-src&lt;br /&gt;
* 도커 레포지토리 없음 (비공개 코드)&lt;br /&gt;
** tar 파일로 직접 업로드&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):5000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** 법정동.txt -&amp;gt; /var/lib/kb_apart/utils/법정동.txt&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CONDA_ENV_NAME = kb_apart&lt;br /&gt;
&lt;br /&gt;
=== Internet Speed Logger (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 일정 주기마다 Speedtest 사이트로 속도 측정해서 그래프로 표시&lt;br /&gt;
* 자꾸 집 인터넷 QoS 걸리는 것 같아서 설치함&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/vkentta/internet-speed-logger&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):3000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** internet speed logger 설정 폴더 -&amp;gt; /usr/src/app/data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CHECK_PERIOD_MINUTES = 30&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - 독립형 ==&lt;br /&gt;
&lt;br /&gt;
=== busybox (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 게스트 관점에서 바라보는 파일 권한 확인, 간단한 명령어 (curl이나 ping 등) 실행용&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/busybox&lt;br /&gt;
* 1.31.1-glibc&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (없음)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== openvpn (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* OpenVPN Client 를 수행해서, 그 결과를 SOCKS5 프록시 서버로 통신 가능&lt;br /&gt;
* OpenVPN to SOCKS5/HTTP Proxy Docker Image&lt;br /&gt;
* 시놀로지 도커에서 자꾸 IPV6 설정 실패하니, ovpn 파일 안의&lt;br /&gt;
** ovpn 파일 안에 proto udp를 proto udp4로&lt;br /&gt;
** setenv UV_IPV6 yes 주석처리&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://registry.hub.docker.com/r/curve25519xsalsa20poly1305/openvpn/&lt;br /&gt;
* latest&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):1080 tcp&lt;br /&gt;
** (비공개):1080 udp&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** (openvpn 설정폴더)/vpn -&amp;gt; /vpn&lt;br /&gt;
** /dev/net/tun -&amp;gt; /dev/net/tun (필요없을수도?)&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** OPENVPN_CONFIG = /vpn/설정파일.ovpn&lt;br /&gt;
&lt;br /&gt;
=== rustdesk (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* rustdesk self-host server&lt;br /&gt;
*설치방법&lt;br /&gt;
**https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/synology/dsm-7/&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** (openvpn 설정폴더)/data -&amp;gt; (프로젝트 자동설정)&lt;br /&gt;
&lt;br /&gt;
== 권한 관련 팁 ==&lt;br /&gt;
Nginx, PHP의 404 Not found 오류는 권한 문제일 때가 많다. 도커에서 실행중이라고 했을 때 살펴볼 것은&lt;br /&gt;
&lt;br /&gt;
* 컨테이너 내에서 Nginx나 PHP를 실행하고 있는 uid는 무엇인가?&lt;br /&gt;
** 해당 uid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* uid가 속해 있는 그룹 확인 (gid)&lt;br /&gt;
** 해당 gid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* 권한이 있는데도 접근이 안 되는 경우&lt;br /&gt;
** 루트 디렉터리에서부터 시작해서, 해당 파일이 있는 디렉터리까지의 경로까지 중에서 현재 uid 또는 gid로 '''실행 권한'''을 얻을 수 있는지 확인할 것.&lt;br /&gt;
** 읽기, 쓰기 권한이 아니라 실행 권한이다.&lt;br /&gt;
* 겉으로 보기에는 같은 www-data이더라도 컨테이너에 따라 id는 다를 수 있다.&lt;br /&gt;
* 시놀로지의 경우 NFS 서버로 마운트한 클라이언트에서 본 권한과도 다를 수 있기 때문에 주의&lt;br /&gt;
* LDAP 설정해서 동기화 하려 했으나 귀찮아서 일단 보류&lt;br /&gt;
&lt;br /&gt;
== 집 Docker Swarm 삽질 ==&lt;br /&gt;
&lt;br /&gt;
=== GUI 프로그램 ===&lt;br /&gt;
&lt;br /&gt;
==== Portainer (9000) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** '''터미널 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** gitlab 레지스트리 목록 보기 불가&lt;br /&gt;
** 이미지에서 마우스로 컨테이너 실행 불가&lt;br /&gt;
&lt;br /&gt;
==== Swarmpit (888) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** gitlab 레지스트리 목록 보기 가능&lt;br /&gt;
** '''이미지에서 마우스로 컨테이너 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** 터미널 실행 불가&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=221</id>
		<title>시놀로지 도커 설정</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=221"/>
		<updated>2024-08-12T06:11:51Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* Deluge (토렌트) (도커) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 외부 노출 서버 (시놀로지 VMM) ==&lt;br /&gt;
&lt;br /&gt;
* alpine-virt-3.11.3&lt;br /&gt;
&lt;br /&gt;
=== 역할 ===&lt;br /&gt;
&lt;br /&gt;
* 현재 IPv6 Cloudflare에 보고(갱신)&lt;br /&gt;
* 웹 프록시&lt;br /&gt;
&lt;br /&gt;
=== 마운트 설정 ===&lt;br /&gt;
&lt;br /&gt;
* alpine에 nfsmount 설치&lt;br /&gt;
** apk add nfsmount&lt;br /&gt;
* /etc/fstab에 다음 내용 추가&lt;br /&gt;
** 맨 뒤의 _netdev와 0 0을 꼭 추가해야 한다 (안하면 네트워크 연결 전에 마운트 시도해서 부팅 안 됨)&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
내부서버IP:/volume1/시놀로지폴더 /마운트경로 nfs nfsvers=3,rsize=524288,wsize=524288,ro,auto,nolock,_netdev 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare 연동 IP 등록 ===&lt;br /&gt;
&lt;br /&gt;
* 일본 특성상 IPv4 포트가 매우 제한적으로 열려 있고, 10000번대 밑으로는 아예 열리지도 않음&lt;br /&gt;
* IPv6는 이런 제한이 없음. 공유기가 각각의 머신에 뿌려주는 IP는 DHCP라기보다는 일본 인터넷에 직접 연결된 공인 IP.&lt;br /&gt;
** IPv6는 설계시부터 모든 기기가 고유의 공인 IP를 갖는 형태로 설계됨. 다만 그 특성상 보안에 취약하므로, 영구 IPv6 주소와 별개로 임시 IPv6가 부여되어, 수시로 주소가 바뀜.&lt;br /&gt;
** 주소 바뀜을 체크하여, Cloudflare DNS에 등록해 주는 역할 (v6 레코드인 AAAA를 업데이트 함)&lt;br /&gt;
** 다음 파일을 alpine 서버의 /etc/init.d에 저장. (파일 이름 cloudflare-alpine.service)&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
# $apk add python3&lt;br /&gt;
# $apk add py3-requests&lt;br /&gt;
# Copy this file into /etc/init.d/&lt;br /&gt;
# Test by $rc-service cloudflare-alpine.service start&lt;br /&gt;
# $rc-update add cloudflare-alpine.service&lt;br /&gt;
# $rc-service cloudflare-alpine.service restart&lt;br /&gt;
# $rc-update -u&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;Update Cloudflare DNS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
command=&amp;quot;/usr/bin/python3 /root/cloudflare-alpine.py&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;/var/run/cloudflare/cloudflare.pid&amp;quot;&lt;br /&gt;
command_background=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
        need net&lt;br /&gt;
        need nfsmount&lt;br /&gt;
        need sshd&lt;br /&gt;
        after iptables&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        ebegin &amp;quot;Starting cloudflare&amp;quot;&lt;br /&gt;
        mkdir -p /var/run/cloudflare || return 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;실제 업데이트를 수행하는 Python 파일을 위의 서비스 스크립트에 지정된 위치로 잘 저장&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_KEY = 'XXX'&lt;br /&gt;
CLOUDFLARE_ZONE_ID = 'XXX'&lt;br /&gt;
CLOUDFLARE_DNS_TOKEN = 'XXX'&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_HEADER = {&lt;br /&gt;
    'Authorization': 'Bearer {}'.format(CLOUDFLARE_DNS_TOKEN),&lt;br /&gt;
    'Content-Type': 'application/json'&lt;br /&gt;
}&lt;br /&gt;
DNS_GET_URL = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(CLOUDFLARE_ZONE_ID)&lt;br /&gt;
&lt;br /&gt;
device = 'eth0'&lt;br /&gt;
addr_file = '/tmp/cloudflare.addr6'&lt;br /&gt;
&lt;br /&gt;
def check():&lt;br /&gt;
    addr = ''&lt;br /&gt;
    try:&lt;br /&gt;
        with open(addr_file, 'r') as f:&lt;br /&gt;
            addr = f.read()&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    get_addr_cmd = &amp;quot;ip -6 addr list scope global $device | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v ' fd' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'deprecated' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'mngtmpaddr' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;head -n 2 | &amp;quot; \&lt;br /&gt;
                   &amp;quot;tail -n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    new_addr = os.popen(get_addr_cmd).read()&lt;br /&gt;
    new_addr = new_addr.split()[1]&lt;br /&gt;
    new_addr = new_addr.split('/')[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if addr == new_addr:&lt;br /&gt;
        print('same ip {}'.format(new_addr))&lt;br /&gt;
    else:&lt;br /&gt;
        r = requests.get(DNS_GET_URL, headers=CLOUDFLARE_HEADER)&lt;br /&gt;
        j = json.loads(r.text)&lt;br /&gt;
&lt;br /&gt;
        for item in j['result']:&lt;br /&gt;
            dns_put_url = DNS_GET_URL + '/' + item['id']&lt;br /&gt;
            new_data = dict(&lt;br /&gt;
                type=item['type'],&lt;br /&gt;
                name=item['name'],&lt;br /&gt;
                content=new_addr,&lt;br /&gt;
            )&lt;br /&gt;
            if item['type'] == 'AAAA':&lt;br /&gt;
                new_data['proxied'] = True&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
            elif item['type'] == 'TXT':&lt;br /&gt;
                new_data['content'] = 'v=spf1 {} ~all'.format(new_addr)&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
&lt;br /&gt;
        with open(addr_file, 'w') as f:&lt;br /&gt;
            f.write(new_addr)&lt;br /&gt;
            f.close()&lt;br /&gt;
        print('updated ip {}'.format(new_addr))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    check()&lt;br /&gt;
    sleep(60)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 그 후 서비스 등록&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
rc-update add cloudflare-alpine.service&lt;br /&gt;
rc-service cloudflare-alpine.service restart&lt;br /&gt;
rc-update -u&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 프록시 ===&lt;br /&gt;
&lt;br /&gt;
* Cloudflare로부터 오는 HTTPS 요청을 처리하여, 내부 서버에 전달&lt;br /&gt;
* 처음 도입 목적은 Cloudflare의 IPv6 over IPv4 기능을 이용하기 위함&lt;br /&gt;
* 생각해보니 외부/내부를 분리하여 보안성도 높아지고, 도커를 이용한 로드밸런서 구현 및 포트 번호 추상화가 가능해져 채택&lt;br /&gt;
* /etc/nginx/conf.d는 시놀로지에 config를 등록해 놓고 폴더째로 마운트&lt;br /&gt;
* wiki-proxy.conf 예시&lt;br /&gt;
** proxy_set_header를 설정해야 내부 서버에서 보이는 접속 요청 IP가 실제 사용자의 IP로 제대로 뜬다&lt;br /&gt;
** 내부 서버사이의 통신은 http로 하여 속도 향상 (방화벽 설정은 따로)&lt;br /&gt;
** TODO: upstream 요청 처리가 60초 이상 걸려도 취소 안 하게 설정하기? wiki의 restbase나 mathoid가 고장나는 이유가 이것 때문인 듯&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    listen   [::]:80;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
        &lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$server_name$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
	listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate pem파일;&lt;br /&gt;
    ssl_certificate_key key파일;&lt;br /&gt;
        &lt;br /&gt;
	server_name wiki.dong-min.kim;&lt;br /&gt;
    server_tokens off;&lt;br /&gt;
   &lt;br /&gt;
	location / {&lt;br /&gt;
        proxy_set_header  Host $host;&lt;br /&gt;
        proxy_set_header  X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header  X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header  Client-IP $remote_addr;&lt;br /&gt;
		proxy_pass http://내부 서버 주소:포트;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 웹 데몬 ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* HTTP 요청을 받아서&lt;br /&gt;
** 직접 처리(static)하거나&lt;br /&gt;
** PHP 인터프리터로 보내거나&lt;br /&gt;
** 다른 웹 데몬(Node.js, Python, ...)으로 다시 proxy한다&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/nginx&lt;br /&gt;
* 1.17.8-alpine&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** htpasswd -&amp;gt; (비공개)/htpasswd&lt;br /&gt;
** passwd -&amp;gt; /etc/passwd&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
** nginx/conf.d/ -&amp;gt; /etc/nginx/conf.d/&lt;br /&gt;
** nginx/nginx.conf -&amp;gt; /etc/nginx/nginx.conf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 ==&lt;br /&gt;
&lt;br /&gt;
=== PHP (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* PHP 데몬&lt;br /&gt;
* FPM(FastCGI Process Manager) 사용하여 동적 워커 생성&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 공식 레포지토리의 7.3.31-fpm-alpine3.14 기반&lt;br /&gt;
* 추가로 PHP 확장 기능을 설치하기 위해 Dockerfile 작성&lt;br /&gt;
** gd, mysqli, intl, @composer&lt;br /&gt;
* 이용한 라이브러리&lt;br /&gt;
** https://github.com/mlocati/docker-php-extension-installer&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9000&lt;br /&gt;
** 참고로 www.conf에서 다른 포트로 설정해도 php-fpm.d/zz-docker.conf에서 무조건 기본값으로 바꿈&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** php.ini -&amp;gt; /usr/local/etc/php/php.ini&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf.default&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
**php-패스wd -&amp;gt; /이티시/패스wd&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
==== php.ini 설정 ====&lt;br /&gt;
&lt;br /&gt;
* max_execution_time = 30&lt;br /&gt;
* max_input_time = 60&lt;br /&gt;
* memory_limit = 512M&lt;br /&gt;
* post_max_size = 10240M&lt;br /&gt;
* upload_max_filesize = 10240M&lt;br /&gt;
* default_socket_timeout = 30&lt;br /&gt;
* extension gd2, mysqli 활성화&lt;br /&gt;
&lt;br /&gt;
==== www.conf 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 여기 설정은 주로 미디어위키의 VisualEditor 확장 기능 + Math 수식 입력기를 사용할 때 Restbase 서버에 동시에 많은 요청을 보내는 것을 처리하기 위해 필요함&lt;br /&gt;
&lt;br /&gt;
* pm.max_children = 16&lt;br /&gt;
* pm.start_servers = 16&lt;br /&gt;
* pm.min_spare_servers = 16&lt;br /&gt;
* pm.max_spare_servers = 16&lt;br /&gt;
* pm.process_idle_timeout = 30s&lt;br /&gt;
&lt;br /&gt;
== 데이터베이스 ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 워드프레스, 미디어위키에 사용하기 위한 범용 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/mysql&lt;br /&gt;
* 5.7.29&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정 시작 번호-2):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** MySQL 실제 DB 파일 폴더 -&amp;gt; /var/lib/mysql/&lt;br /&gt;
** mysql.cnf -&amp;gt; /etc/mysql/conf.d/mysql.cnf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Cassandra (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API 백엔드 Restbase에서 사용하기 위한 고성능 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/cassandra/&lt;br /&gt;
* 3.11.6&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** Cassandra 실제 DB 파일 폴더 -&amp;gt; /var/lib/cassandra/&lt;br /&gt;
** Cassandra 설정 폴더 -&amp;gt; /etc/cassandra/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CASSANDRA_BROADCAST_ADDRESS = (호스트 주소 - 집 안의 NAS IP)&lt;br /&gt;
&lt;br /&gt;
==== cassandra-env.sh 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* MAX_HEAP_SIZE=&amp;quot;128M&amp;quot;&lt;br /&gt;
* HEAP_NEWSIZE=&amp;quot;20M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== cassandra.yaml 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* key_cache_size_in_mb: 0&lt;br /&gt;
* concurrent_reads: 2&lt;br /&gt;
* concurrent_writes: 2&lt;br /&gt;
* rpc_server_type: hsha&lt;br /&gt;
* rpc_min_threads: 1&lt;br /&gt;
* rpc_max_threads: 1&lt;br /&gt;
* concurrent_compactors: 1&lt;br /&gt;
* compaction_throughput_mb_per_sec: 0&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - Nginx 종속 ==&lt;br /&gt;
&lt;br /&gt;
=== 워드프레스 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 포트폴리오&lt;br /&gt;
* https://dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== wp-컨피그.php ====&lt;br /&gt;
&lt;br /&gt;
* FTPS 설정 (SFTP가 아니다)&lt;br /&gt;
* 프록시된 요청을 처리하기 위한 추가 설정&lt;br /&gt;
** $_SERVER['HTTPS']='on'; 구절만 있으면 된다&lt;br /&gt;
** 나머지는 프록시 서버 측의 설정이 잘못된 상태일 때 필요했었다&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FTP_HOST', '내부 서버 주소:내부 포트 번호');&lt;br /&gt;
define('FTP_USER', 'wp-ftps');&lt;br /&gt;
define('FTP_PASS', '');&lt;br /&gt;
define('FTP_SSL', true);&lt;br /&gt;
define('FTP_BASE', '(비공개)/wordpress/');&lt;br /&gt;
define('FTP_CONTENT_DIR', '(비공개)/wp-content/');&lt;br /&gt;
define('FTP_PLUGIN_DIR ', '(비공개)/wp-content/plugins/');&lt;br /&gt;
&lt;br /&gt;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')&lt;br /&gt;
    $_SERVER['HTTPS']='on';&lt;br /&gt;
    // define('RELOCATE', true); &lt;br /&gt;
    // define('WP_HOME', 'https://dong-min.kim');&lt;br /&gt;
    // define('WP_SITEURL', 'https://dong-min.kim');&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {&lt;br /&gt;
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 위키&lt;br /&gt;
* https://wiki.dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== 확장 기능 ====&lt;br /&gt;
&lt;br /&gt;
* VisualEditor, Math, SyntaxHighlight&lt;br /&gt;
** VisualEditor와 Math를 연동할 때, 수식 편집기에서 동적 업데이트 횟수에 비례해서 서버가 느려지는 현상 발생&lt;br /&gt;
** Math 확장 기능에서 제공하는 MWLatexNode.js가 수식이 업데이트 될 때마다 과거 기록을 지우지 않고 전부 갖고 있는 버그가 원인&lt;br /&gt;
** 그 기록들도 매 번 의미없는 업데이트를 하느라 서버가 느려짐&lt;br /&gt;
** 임시 해결 방법&lt;br /&gt;
*** Math 확장 기능의 modules/ve-math/ve.ce.MWLatexNode.js 파일의 맨 아래 쪽에 다음 항목을 추가하여, 강제 업데이트를 방지&lt;br /&gt;
*** 이거 해도 새로 고침은 하지만, 적어도 Mathoid 서버에 새로 요청 하지는 않는다 (캐시 사용)&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @inheritdoc ve.ce.GeneratedContentNode&lt;br /&gt;
 */&lt;br /&gt;
ve.ce.MWLatexNode.prototype.onGeneratedContentNodeUpdate = function ( staged ) {&lt;br /&gt;
	// 꼼수... this.root가 있을 때만 업데이트함&lt;br /&gt;
	// this.root가 있는 노드는 실제 글 속의 math 노드 (다이얼로그 속은 root 없음)&lt;br /&gt;
	if (this.root)&lt;br /&gt;
		this.update( undefined, staged );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Nginx config =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   ?????;&lt;br /&gt;
    listen   [::]:?????;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/wiki.access.log main;&lt;br /&gt;
    error_log /var/log/nginx/wiki.error.log;&lt;br /&gt;
&lt;br /&gt;
	charset utf-8;&lt;br /&gt;
	root ?????;&lt;br /&gt;
	index index.html index.htm index.php;&lt;br /&gt;
&lt;br /&gt;
	client_max_body_size 10240M;&lt;br /&gt;
	&lt;br /&gt;
    # Avoid 504 HTTP Timeout Errors&lt;br /&gt;
    proxy_connect_timeout       605;&lt;br /&gt;
    proxy_send_timeout          605;&lt;br /&gt;
    proxy_read_timeout          605;&lt;br /&gt;
    send_timeout                605;&lt;br /&gt;
    keepalive_timeout           605;&lt;br /&gt;
	fastcgi_read_timeout		605;&lt;br /&gt;
    &lt;br /&gt;
	location ~ ^/w/(index|load|thumb|opensearch_desc|api|rest|img_auth)\.php$ {&lt;br /&gt;
		include fastcgi.conf;&lt;br /&gt;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
		fastcgi_pass ?????:?????;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Images&lt;br /&gt;
	location /w/images {&lt;br /&gt;
		# Separate location for images/ so .php execution won't apply&lt;br /&gt;
		try_files $uri 404;		&lt;br /&gt;
	}&lt;br /&gt;
	location /w/images/deleted {&lt;br /&gt;
		# Deny access to deleted images folder&lt;br /&gt;
		deny all;&lt;br /&gt;
	}&lt;br /&gt;
	# MediaWiki assets (usually images)&lt;br /&gt;
	location ~ ^/w/resources/(assets|lib|src) {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
	# Assets, scripts and styles from skins and extensions&lt;br /&gt;
	location ~ ^/w/(skins|extensions)/.+\.(css|js|gif|jpg|jpeg|png|svg)$ {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# License and credits files&lt;br /&gt;
	location ~ ^/w/(COPYING|CREDITS)$ {&lt;br /&gt;
		default_type text/plain;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	## Uncomment the following code if you wish to use the installer/updater&lt;br /&gt;
	## installer/updater&lt;br /&gt;
	# location /w/mw-config/ {&lt;br /&gt;
	# 	# Do this inside of a location so it can be negated&lt;br /&gt;
	# 	location ~ \.php$ {&lt;br /&gt;
    #       include fastcgi.conf;&lt;br /&gt;
	# 		fastcgi_param SCRIPT_FILENAME $document_root/w/mw-config/$fastcgi_script_name;&lt;br /&gt;
	# 		fastcgi_pass ?????:????; # or whatever port your PHP-FPM listens on&lt;br /&gt;
	# 	}&lt;br /&gt;
	# }&lt;br /&gt;
	&lt;br /&gt;
	# Handling for Mediawiki REST API, see [[mw:API:REST_API]]&lt;br /&gt;
	location /w/rest.php/ {&lt;br /&gt;
		try_files $uri $uri/ /w/rest.php?$query_string;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Handling for the article path (pretty URLs)&lt;br /&gt;
	location /view/ {&lt;br /&gt;
		rewrite ^/view/(?&amp;lt;pagename&amp;gt;.*)$ /w/index.php;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Allow robots.txt in case you have one&lt;br /&gt;
	location = /robots.txt {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location = /favicon.ico {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location / {&lt;br /&gt;
		rewrite ^/(.*)$ /view/$1 redirect;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocalSettings.php ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// ... (생략)&lt;br /&gt;
&lt;br /&gt;
$wgArticlePath = &amp;quot;/view/$1&amp;quot;;&lt;br /&gt;
$wgUsePathInfo = true;&lt;br /&gt;
$wgScriptExtension = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgMathValidModes[] = 'mathml';&lt;br /&gt;
$wgDefaultUserOptions['math'] = 'mathml';&lt;br /&gt;
$wgMathFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
$wgMathMathMLUrl = 'https://wiki-mathoid.dong-min.kim';&lt;br /&gt;
&lt;br /&gt;
# START VisualEditor Setting&lt;br /&gt;
$wgGroupPermissions['user']['writeapi'] = true;&lt;br /&gt;
wfLoadExtension( 'Parsoid', 'vendor/wikimedia/parsoid/extension.json' );&lt;br /&gt;
# END VisualEditor Setting&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Restbase (도커) ===&lt;br /&gt;
&lt;br /&gt;
* 이 Restbase를 비롯하여 아래의 Parsoid, Mathoid는 미디어위키에서 Visual Editor + Math 확장 기능을 사용하기 위해 설치함&lt;br /&gt;
* 원래 미디어위키에서 무료로 제공하는 기본 Restbase서버와 Mathoid 서버를 이용해도 되지만, 속도가 정말 '''&amp;lt;big&amp;gt;끔찍&amp;lt;/big&amp;gt;하게''' 느려서 직접 구축&lt;br /&gt;
* 제대로 된 문서가 없어서 구축 삽질 엄청 했다... 코드 안에 mediawiki url 하드코딩이 너무 많아 뭐가 문제인지 발견하기가 힘들었다&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API를 처리하기 위한 REST 처리 서버&lt;br /&gt;
* REST로 받은 요청을 내부 독립 서버 (Parsoid, Mathoid 등)에 전달 및 반환 결과 캐싱&lt;br /&gt;
* 기본 DB 세팅인 SQLite는 동시에 많은 요청이 들어오면 db파일이 죽는 경우가 있어서, Cassandra 세팅으로 바꿈&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-restbase&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):7231&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Parsoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Visual Editor 등에서 html &amp;lt;-&amp;gt; wikitext 간 변환 등을 위해 문서 실시간 파싱 등을 처리&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-parsoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):8000&lt;br /&gt;
** (비공개):8001&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Mathoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Math 확장 기능에서 사용&lt;br /&gt;
* LaTeX 문법을 svg, png 등으로 변환&lt;br /&gt;
* Node.js 10&lt;br /&gt;
* pm2로 서비스화 시킴&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-mathoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):10042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Deluge (토렌트) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 토렌트 서버&lt;br /&gt;
* 컨테이너를 완전히 OpenVPN으로 감싸서, VPN 등록이 되지 않은 상태에서는 네트워크 접속을 원천 차단&lt;br /&gt;
* *.ovpn 파일은 config 폴더에 넣으면 됨&lt;br /&gt;
* vpn 서버의 IP 주소를 찾지 못하므로, /etc/hosts에 수동으로 IP주소 써 주기&lt;br /&gt;
* (일본 한정) v6플러스의 포트 포화를 막기 위해, 토렌트 속도를 희생하고 timeout이 없는 UDP가 아닌 timeout도 있고 공유기가 IP 마스커레이드도 잘 해주는 TCP로 vpn 설정&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/binhex/arch-delugevpn&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (기본값)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config/ -&amp;gt; /config&lt;br /&gt;
** (자료 저장 폴더) -&amp;gt; /data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** NAME_SERVERS = 1.1.1.1&lt;br /&gt;
** LAN_NETWORK = 호스트의 아이피 말고 호스트의 서브넷 (xxx.xxx.xxx.xxx/xx)&lt;br /&gt;
** ENABLE_PRIVOXY = yes&lt;br /&gt;
** PGID = 100&lt;br /&gt;
** PUID = 1026&lt;br /&gt;
** VPN_PROV = custom&lt;br /&gt;
** VPN_ENABLED = yes&lt;br /&gt;
** HOME = /config/home&lt;br /&gt;
&lt;br /&gt;
=== Gitlab ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 사설 Git 서버&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-ce/&lt;br /&gt;
* 12.8.8&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
&lt;br /&gt;
==== gitlab.rb 설정 ====&lt;br /&gt;
&lt;br /&gt;
* external_url 'https://git.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['gitlab_ssh_host'] = 'kasumi.synology.me'&lt;br /&gt;
* gitlab_rails['time_zone'] = 'Asia/Seoul'&lt;br /&gt;
* gitlab_rails['gitlab_default_theme'] = 10  # dark(default) = 2, red = 9, light red = 10&lt;br /&gt;
* gitlab_rails['trusted_proxies'] = ['시놀로지IP', '프록시IP']&lt;br /&gt;
* gitlab_rails['gitlab_shell_ssh_port'] = 64100&lt;br /&gt;
* registry_external_url 'https://registry.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['registry_enabled'] = true&lt;br /&gt;
* unicorn['worker_processes'] = 2&lt;br /&gt;
* sidekiq['concurrency'] = 3  # default 25&lt;br /&gt;
* nginx['gzip_enabled'] = false&lt;br /&gt;
* nginx['listen_port'] = 80&lt;br /&gt;
* nginx['listen_https'] = false&lt;br /&gt;
* registry_nginx['enable'] = true&lt;br /&gt;
* registry_nginx['gzip_enabled'] = false&lt;br /&gt;
* registry_nginx['listen_port'] = 5005&lt;br /&gt;
* registry_nginx['listen_https'] = false&lt;br /&gt;
&lt;br /&gt;
==== 업데이트 ====&lt;br /&gt;
* 업그레이드 패스 참조: https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/&lt;br /&gt;
* 컨테이너 들어가기&lt;br /&gt;
* 서비스 중지&lt;br /&gt;
** gitlab-ctl stop&lt;br /&gt;
* 컨테이너 정지&lt;br /&gt;
* 컨테이너 삭제&lt;br /&gt;
* 새 컨테이너 생성&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
* 상태 확인: https://git.dong-min.kim/admin/background_migrations&lt;br /&gt;
* 최종 확인&lt;br /&gt;
** gitlab-rake gitlab:check&lt;br /&gt;
&lt;br /&gt;
=== Gitlab Runner ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* Gitlab의 CI/CD 실행용 Runner&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-runner/&lt;br /&gt;
* 12.8.0&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 파일 설정&lt;br /&gt;
** docker.sock -&amp;gt; /var/run/docker.sock&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab runner 설정 폴더 -&amp;gt; /etc/gitlab-runner&lt;br /&gt;
* 주의점&lt;br /&gt;
** 시놀로지 docker를 쓰려면 시놀로지의 docker.sock이 필요하다.&lt;br /&gt;
*** 먼저 시놀로지 측에서 sudo ln -s /var/run/docker.sock /volume1/docker/docker.sock 으로 심볼릭 링크 생성&lt;br /&gt;
*** Gitlab Runner 컨테이너 생성할 때 위 파일 링크가 안 됨&lt;br /&gt;
*** 먼저 아무 파일이나 링크해서 일단 컨테이너 생성&lt;br /&gt;
*** 컨테이너 설정 백업해서, 그 파일 안에서 링크 수정&lt;br /&gt;
*** 수정한 컨테이너 설정을 다시 로드&lt;br /&gt;
** 컨테이너 실행 후 gitlab-runner register 명령어로 gitlab 등록&lt;br /&gt;
&lt;br /&gt;
=== kb_apart (광규 외주) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 광규 외주 프로그램 - 아파트 시세 확인&lt;br /&gt;
&lt;br /&gt;
* gliderlabs/alpine:3.3 기반 (glibc 설치용)&lt;br /&gt;
* Miniconda3 설치&lt;br /&gt;
* Python 3.7.5 + Flask&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-kb-apart-src&lt;br /&gt;
* 도커 레포지토리 없음 (비공개 코드)&lt;br /&gt;
** tar 파일로 직접 업로드&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):5000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** 법정동.txt -&amp;gt; /var/lib/kb_apart/utils/법정동.txt&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CONDA_ENV_NAME = kb_apart&lt;br /&gt;
&lt;br /&gt;
=== Internet Speed Logger (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 일정 주기마다 Speedtest 사이트로 속도 측정해서 그래프로 표시&lt;br /&gt;
* 자꾸 집 인터넷 QoS 걸리는 것 같아서 설치함&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/vkentta/internet-speed-logger&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):3000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** internet speed logger 설정 폴더 -&amp;gt; /usr/src/app/data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CHECK_PERIOD_MINUTES = 30&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - 독립형 ==&lt;br /&gt;
&lt;br /&gt;
=== busybox (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 게스트 관점에서 바라보는 파일 권한 확인, 간단한 명령어 (curl이나 ping 등) 실행용&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/busybox&lt;br /&gt;
* 1.31.1-glibc&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (없음)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== openvpn (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* OpenVPN Client 를 수행해서, 그 결과를 SOCKS5 프록시 서버로 통신 가능&lt;br /&gt;
* OpenVPN to SOCKS5/HTTP Proxy Docker Image&lt;br /&gt;
* 시놀로지 도커에서 자꾸 IPV6 설정 실패하니, ovpn 파일 안의&lt;br /&gt;
** ovpn 파일 안에 proto udp를 proto udp4로&lt;br /&gt;
** setenv UV_IPV6 yes 주석처리&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://registry.hub.docker.com/r/curve25519xsalsa20poly1305/openvpn/&lt;br /&gt;
* latest&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):1080 tcp&lt;br /&gt;
** (비공개):1080 udp&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** (openvpn 설정폴더)/vpn -&amp;gt; /vpn&lt;br /&gt;
** /dev/net/tun -&amp;gt; /dev/net/tun (필요없을수도?)&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** OPENVPN_CONFIG = /vpn/설정파일.ovpn&lt;br /&gt;
&lt;br /&gt;
== 권한 관련 팁 ==&lt;br /&gt;
Nginx, PHP의 404 Not found 오류는 권한 문제일 때가 많다. 도커에서 실행중이라고 했을 때 살펴볼 것은&lt;br /&gt;
&lt;br /&gt;
* 컨테이너 내에서 Nginx나 PHP를 실행하고 있는 uid는 무엇인가?&lt;br /&gt;
** 해당 uid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* uid가 속해 있는 그룹 확인 (gid)&lt;br /&gt;
** 해당 gid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* 권한이 있는데도 접근이 안 되는 경우&lt;br /&gt;
** 루트 디렉터리에서부터 시작해서, 해당 파일이 있는 디렉터리까지의 경로까지 중에서 현재 uid 또는 gid로 '''실행 권한'''을 얻을 수 있는지 확인할 것.&lt;br /&gt;
** 읽기, 쓰기 권한이 아니라 실행 권한이다.&lt;br /&gt;
* 겉으로 보기에는 같은 www-data이더라도 컨테이너에 따라 id는 다를 수 있다.&lt;br /&gt;
* 시놀로지의 경우 NFS 서버로 마운트한 클라이언트에서 본 권한과도 다를 수 있기 때문에 주의&lt;br /&gt;
* LDAP 설정해서 동기화 하려 했으나 귀찮아서 일단 보류&lt;br /&gt;
&lt;br /&gt;
== 집 Docker Swarm 삽질 ==&lt;br /&gt;
&lt;br /&gt;
=== GUI 프로그램 ===&lt;br /&gt;
&lt;br /&gt;
==== Portainer (9000) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** '''터미널 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** gitlab 레지스트리 목록 보기 불가&lt;br /&gt;
** 이미지에서 마우스로 컨테이너 실행 불가&lt;br /&gt;
&lt;br /&gt;
==== Swarmpit (888) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** gitlab 레지스트리 목록 보기 가능&lt;br /&gt;
** '''이미지에서 마우스로 컨테이너 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** 터미널 실행 불가&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=220</id>
		<title>시놀로지 도커 설정</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=220"/>
		<updated>2024-07-20T18:01:16Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 외부 노출 서버 (시놀로지 VMM) ==&lt;br /&gt;
&lt;br /&gt;
* alpine-virt-3.11.3&lt;br /&gt;
&lt;br /&gt;
=== 역할 ===&lt;br /&gt;
&lt;br /&gt;
* 현재 IPv6 Cloudflare에 보고(갱신)&lt;br /&gt;
* 웹 프록시&lt;br /&gt;
&lt;br /&gt;
=== 마운트 설정 ===&lt;br /&gt;
&lt;br /&gt;
* alpine에 nfsmount 설치&lt;br /&gt;
** apk add nfsmount&lt;br /&gt;
* /etc/fstab에 다음 내용 추가&lt;br /&gt;
** 맨 뒤의 _netdev와 0 0을 꼭 추가해야 한다 (안하면 네트워크 연결 전에 마운트 시도해서 부팅 안 됨)&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
내부서버IP:/volume1/시놀로지폴더 /마운트경로 nfs nfsvers=3,rsize=524288,wsize=524288,ro,auto,nolock,_netdev 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare 연동 IP 등록 ===&lt;br /&gt;
&lt;br /&gt;
* 일본 특성상 IPv4 포트가 매우 제한적으로 열려 있고, 10000번대 밑으로는 아예 열리지도 않음&lt;br /&gt;
* IPv6는 이런 제한이 없음. 공유기가 각각의 머신에 뿌려주는 IP는 DHCP라기보다는 일본 인터넷에 직접 연결된 공인 IP.&lt;br /&gt;
** IPv6는 설계시부터 모든 기기가 고유의 공인 IP를 갖는 형태로 설계됨. 다만 그 특성상 보안에 취약하므로, 영구 IPv6 주소와 별개로 임시 IPv6가 부여되어, 수시로 주소가 바뀜.&lt;br /&gt;
** 주소 바뀜을 체크하여, Cloudflare DNS에 등록해 주는 역할 (v6 레코드인 AAAA를 업데이트 함)&lt;br /&gt;
** 다음 파일을 alpine 서버의 /etc/init.d에 저장. (파일 이름 cloudflare-alpine.service)&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
# $apk add python3&lt;br /&gt;
# $apk add py3-requests&lt;br /&gt;
# Copy this file into /etc/init.d/&lt;br /&gt;
# Test by $rc-service cloudflare-alpine.service start&lt;br /&gt;
# $rc-update add cloudflare-alpine.service&lt;br /&gt;
# $rc-service cloudflare-alpine.service restart&lt;br /&gt;
# $rc-update -u&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;Update Cloudflare DNS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
command=&amp;quot;/usr/bin/python3 /root/cloudflare-alpine.py&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;/var/run/cloudflare/cloudflare.pid&amp;quot;&lt;br /&gt;
command_background=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
        need net&lt;br /&gt;
        need nfsmount&lt;br /&gt;
        need sshd&lt;br /&gt;
        after iptables&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        ebegin &amp;quot;Starting cloudflare&amp;quot;&lt;br /&gt;
        mkdir -p /var/run/cloudflare || return 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;실제 업데이트를 수행하는 Python 파일을 위의 서비스 스크립트에 지정된 위치로 잘 저장&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_KEY = 'XXX'&lt;br /&gt;
CLOUDFLARE_ZONE_ID = 'XXX'&lt;br /&gt;
CLOUDFLARE_DNS_TOKEN = 'XXX'&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_HEADER = {&lt;br /&gt;
    'Authorization': 'Bearer {}'.format(CLOUDFLARE_DNS_TOKEN),&lt;br /&gt;
    'Content-Type': 'application/json'&lt;br /&gt;
}&lt;br /&gt;
DNS_GET_URL = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(CLOUDFLARE_ZONE_ID)&lt;br /&gt;
&lt;br /&gt;
device = 'eth0'&lt;br /&gt;
addr_file = '/tmp/cloudflare.addr6'&lt;br /&gt;
&lt;br /&gt;
def check():&lt;br /&gt;
    addr = ''&lt;br /&gt;
    try:&lt;br /&gt;
        with open(addr_file, 'r') as f:&lt;br /&gt;
            addr = f.read()&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    get_addr_cmd = &amp;quot;ip -6 addr list scope global $device | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v ' fd' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'deprecated' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'mngtmpaddr' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;head -n 2 | &amp;quot; \&lt;br /&gt;
                   &amp;quot;tail -n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    new_addr = os.popen(get_addr_cmd).read()&lt;br /&gt;
    new_addr = new_addr.split()[1]&lt;br /&gt;
    new_addr = new_addr.split('/')[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if addr == new_addr:&lt;br /&gt;
        print('same ip {}'.format(new_addr))&lt;br /&gt;
    else:&lt;br /&gt;
        r = requests.get(DNS_GET_URL, headers=CLOUDFLARE_HEADER)&lt;br /&gt;
        j = json.loads(r.text)&lt;br /&gt;
&lt;br /&gt;
        for item in j['result']:&lt;br /&gt;
            dns_put_url = DNS_GET_URL + '/' + item['id']&lt;br /&gt;
            new_data = dict(&lt;br /&gt;
                type=item['type'],&lt;br /&gt;
                name=item['name'],&lt;br /&gt;
                content=new_addr,&lt;br /&gt;
            )&lt;br /&gt;
            if item['type'] == 'AAAA':&lt;br /&gt;
                new_data['proxied'] = True&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
            elif item['type'] == 'TXT':&lt;br /&gt;
                new_data['content'] = 'v=spf1 {} ~all'.format(new_addr)&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
&lt;br /&gt;
        with open(addr_file, 'w') as f:&lt;br /&gt;
            f.write(new_addr)&lt;br /&gt;
            f.close()&lt;br /&gt;
        print('updated ip {}'.format(new_addr))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    check()&lt;br /&gt;
    sleep(60)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 그 후 서비스 등록&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
rc-update add cloudflare-alpine.service&lt;br /&gt;
rc-service cloudflare-alpine.service restart&lt;br /&gt;
rc-update -u&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 프록시 ===&lt;br /&gt;
&lt;br /&gt;
* Cloudflare로부터 오는 HTTPS 요청을 처리하여, 내부 서버에 전달&lt;br /&gt;
* 처음 도입 목적은 Cloudflare의 IPv6 over IPv4 기능을 이용하기 위함&lt;br /&gt;
* 생각해보니 외부/내부를 분리하여 보안성도 높아지고, 도커를 이용한 로드밸런서 구현 및 포트 번호 추상화가 가능해져 채택&lt;br /&gt;
* /etc/nginx/conf.d는 시놀로지에 config를 등록해 놓고 폴더째로 마운트&lt;br /&gt;
* wiki-proxy.conf 예시&lt;br /&gt;
** proxy_set_header를 설정해야 내부 서버에서 보이는 접속 요청 IP가 실제 사용자의 IP로 제대로 뜬다&lt;br /&gt;
** 내부 서버사이의 통신은 http로 하여 속도 향상 (방화벽 설정은 따로)&lt;br /&gt;
** TODO: upstream 요청 처리가 60초 이상 걸려도 취소 안 하게 설정하기? wiki의 restbase나 mathoid가 고장나는 이유가 이것 때문인 듯&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    listen   [::]:80;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
        &lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$server_name$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
	listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate pem파일;&lt;br /&gt;
    ssl_certificate_key key파일;&lt;br /&gt;
        &lt;br /&gt;
	server_name wiki.dong-min.kim;&lt;br /&gt;
    server_tokens off;&lt;br /&gt;
   &lt;br /&gt;
	location / {&lt;br /&gt;
        proxy_set_header  Host $host;&lt;br /&gt;
        proxy_set_header  X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header  X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header  Client-IP $remote_addr;&lt;br /&gt;
		proxy_pass http://내부 서버 주소:포트;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 웹 데몬 ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* HTTP 요청을 받아서&lt;br /&gt;
** 직접 처리(static)하거나&lt;br /&gt;
** PHP 인터프리터로 보내거나&lt;br /&gt;
** 다른 웹 데몬(Node.js, Python, ...)으로 다시 proxy한다&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/nginx&lt;br /&gt;
* 1.17.8-alpine&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** htpasswd -&amp;gt; (비공개)/htpasswd&lt;br /&gt;
** passwd -&amp;gt; /etc/passwd&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
** nginx/conf.d/ -&amp;gt; /etc/nginx/conf.d/&lt;br /&gt;
** nginx/nginx.conf -&amp;gt; /etc/nginx/nginx.conf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 ==&lt;br /&gt;
&lt;br /&gt;
=== PHP (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* PHP 데몬&lt;br /&gt;
* FPM(FastCGI Process Manager) 사용하여 동적 워커 생성&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 공식 레포지토리의 7.3.31-fpm-alpine3.14 기반&lt;br /&gt;
* 추가로 PHP 확장 기능을 설치하기 위해 Dockerfile 작성&lt;br /&gt;
** gd, mysqli, intl, @composer&lt;br /&gt;
* 이용한 라이브러리&lt;br /&gt;
** https://github.com/mlocati/docker-php-extension-installer&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9000&lt;br /&gt;
** 참고로 www.conf에서 다른 포트로 설정해도 php-fpm.d/zz-docker.conf에서 무조건 기본값으로 바꿈&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** php.ini -&amp;gt; /usr/local/etc/php/php.ini&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf.default&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
**php-패스wd -&amp;gt; /이티시/패스wd&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
==== php.ini 설정 ====&lt;br /&gt;
&lt;br /&gt;
* max_execution_time = 30&lt;br /&gt;
* max_input_time = 60&lt;br /&gt;
* memory_limit = 512M&lt;br /&gt;
* post_max_size = 10240M&lt;br /&gt;
* upload_max_filesize = 10240M&lt;br /&gt;
* default_socket_timeout = 30&lt;br /&gt;
* extension gd2, mysqli 활성화&lt;br /&gt;
&lt;br /&gt;
==== www.conf 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 여기 설정은 주로 미디어위키의 VisualEditor 확장 기능 + Math 수식 입력기를 사용할 때 Restbase 서버에 동시에 많은 요청을 보내는 것을 처리하기 위해 필요함&lt;br /&gt;
&lt;br /&gt;
* pm.max_children = 16&lt;br /&gt;
* pm.start_servers = 16&lt;br /&gt;
* pm.min_spare_servers = 16&lt;br /&gt;
* pm.max_spare_servers = 16&lt;br /&gt;
* pm.process_idle_timeout = 30s&lt;br /&gt;
&lt;br /&gt;
== 데이터베이스 ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 워드프레스, 미디어위키에 사용하기 위한 범용 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/mysql&lt;br /&gt;
* 5.7.29&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정 시작 번호-2):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** MySQL 실제 DB 파일 폴더 -&amp;gt; /var/lib/mysql/&lt;br /&gt;
** mysql.cnf -&amp;gt; /etc/mysql/conf.d/mysql.cnf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Cassandra (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API 백엔드 Restbase에서 사용하기 위한 고성능 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/cassandra/&lt;br /&gt;
* 3.11.6&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** Cassandra 실제 DB 파일 폴더 -&amp;gt; /var/lib/cassandra/&lt;br /&gt;
** Cassandra 설정 폴더 -&amp;gt; /etc/cassandra/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CASSANDRA_BROADCAST_ADDRESS = (호스트 주소 - 집 안의 NAS IP)&lt;br /&gt;
&lt;br /&gt;
==== cassandra-env.sh 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* MAX_HEAP_SIZE=&amp;quot;128M&amp;quot;&lt;br /&gt;
* HEAP_NEWSIZE=&amp;quot;20M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== cassandra.yaml 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* key_cache_size_in_mb: 0&lt;br /&gt;
* concurrent_reads: 2&lt;br /&gt;
* concurrent_writes: 2&lt;br /&gt;
* rpc_server_type: hsha&lt;br /&gt;
* rpc_min_threads: 1&lt;br /&gt;
* rpc_max_threads: 1&lt;br /&gt;
* concurrent_compactors: 1&lt;br /&gt;
* compaction_throughput_mb_per_sec: 0&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - Nginx 종속 ==&lt;br /&gt;
&lt;br /&gt;
=== 워드프레스 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 포트폴리오&lt;br /&gt;
* https://dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== wp-컨피그.php ====&lt;br /&gt;
&lt;br /&gt;
* FTPS 설정 (SFTP가 아니다)&lt;br /&gt;
* 프록시된 요청을 처리하기 위한 추가 설정&lt;br /&gt;
** $_SERVER['HTTPS']='on'; 구절만 있으면 된다&lt;br /&gt;
** 나머지는 프록시 서버 측의 설정이 잘못된 상태일 때 필요했었다&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FTP_HOST', '내부 서버 주소:내부 포트 번호');&lt;br /&gt;
define('FTP_USER', 'wp-ftps');&lt;br /&gt;
define('FTP_PASS', '');&lt;br /&gt;
define('FTP_SSL', true);&lt;br /&gt;
define('FTP_BASE', '(비공개)/wordpress/');&lt;br /&gt;
define('FTP_CONTENT_DIR', '(비공개)/wp-content/');&lt;br /&gt;
define('FTP_PLUGIN_DIR ', '(비공개)/wp-content/plugins/');&lt;br /&gt;
&lt;br /&gt;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')&lt;br /&gt;
    $_SERVER['HTTPS']='on';&lt;br /&gt;
    // define('RELOCATE', true); &lt;br /&gt;
    // define('WP_HOME', 'https://dong-min.kim');&lt;br /&gt;
    // define('WP_SITEURL', 'https://dong-min.kim');&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {&lt;br /&gt;
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 위키&lt;br /&gt;
* https://wiki.dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== 확장 기능 ====&lt;br /&gt;
&lt;br /&gt;
* VisualEditor, Math, SyntaxHighlight&lt;br /&gt;
** VisualEditor와 Math를 연동할 때, 수식 편집기에서 동적 업데이트 횟수에 비례해서 서버가 느려지는 현상 발생&lt;br /&gt;
** Math 확장 기능에서 제공하는 MWLatexNode.js가 수식이 업데이트 될 때마다 과거 기록을 지우지 않고 전부 갖고 있는 버그가 원인&lt;br /&gt;
** 그 기록들도 매 번 의미없는 업데이트를 하느라 서버가 느려짐&lt;br /&gt;
** 임시 해결 방법&lt;br /&gt;
*** Math 확장 기능의 modules/ve-math/ve.ce.MWLatexNode.js 파일의 맨 아래 쪽에 다음 항목을 추가하여, 강제 업데이트를 방지&lt;br /&gt;
*** 이거 해도 새로 고침은 하지만, 적어도 Mathoid 서버에 새로 요청 하지는 않는다 (캐시 사용)&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @inheritdoc ve.ce.GeneratedContentNode&lt;br /&gt;
 */&lt;br /&gt;
ve.ce.MWLatexNode.prototype.onGeneratedContentNodeUpdate = function ( staged ) {&lt;br /&gt;
	// 꼼수... this.root가 있을 때만 업데이트함&lt;br /&gt;
	// this.root가 있는 노드는 실제 글 속의 math 노드 (다이얼로그 속은 root 없음)&lt;br /&gt;
	if (this.root)&lt;br /&gt;
		this.update( undefined, staged );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Nginx config =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   ?????;&lt;br /&gt;
    listen   [::]:?????;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/wiki.access.log main;&lt;br /&gt;
    error_log /var/log/nginx/wiki.error.log;&lt;br /&gt;
&lt;br /&gt;
	charset utf-8;&lt;br /&gt;
	root ?????;&lt;br /&gt;
	index index.html index.htm index.php;&lt;br /&gt;
&lt;br /&gt;
	client_max_body_size 10240M;&lt;br /&gt;
	&lt;br /&gt;
    # Avoid 504 HTTP Timeout Errors&lt;br /&gt;
    proxy_connect_timeout       605;&lt;br /&gt;
    proxy_send_timeout          605;&lt;br /&gt;
    proxy_read_timeout          605;&lt;br /&gt;
    send_timeout                605;&lt;br /&gt;
    keepalive_timeout           605;&lt;br /&gt;
	fastcgi_read_timeout		605;&lt;br /&gt;
    &lt;br /&gt;
	location ~ ^/w/(index|load|thumb|opensearch_desc|api|rest|img_auth)\.php$ {&lt;br /&gt;
		include fastcgi.conf;&lt;br /&gt;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
		fastcgi_pass ?????:?????;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Images&lt;br /&gt;
	location /w/images {&lt;br /&gt;
		# Separate location for images/ so .php execution won't apply&lt;br /&gt;
		try_files $uri 404;		&lt;br /&gt;
	}&lt;br /&gt;
	location /w/images/deleted {&lt;br /&gt;
		# Deny access to deleted images folder&lt;br /&gt;
		deny all;&lt;br /&gt;
	}&lt;br /&gt;
	# MediaWiki assets (usually images)&lt;br /&gt;
	location ~ ^/w/resources/(assets|lib|src) {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
	# Assets, scripts and styles from skins and extensions&lt;br /&gt;
	location ~ ^/w/(skins|extensions)/.+\.(css|js|gif|jpg|jpeg|png|svg)$ {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# License and credits files&lt;br /&gt;
	location ~ ^/w/(COPYING|CREDITS)$ {&lt;br /&gt;
		default_type text/plain;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	## Uncomment the following code if you wish to use the installer/updater&lt;br /&gt;
	## installer/updater&lt;br /&gt;
	# location /w/mw-config/ {&lt;br /&gt;
	# 	# Do this inside of a location so it can be negated&lt;br /&gt;
	# 	location ~ \.php$ {&lt;br /&gt;
    #       include fastcgi.conf;&lt;br /&gt;
	# 		fastcgi_param SCRIPT_FILENAME $document_root/w/mw-config/$fastcgi_script_name;&lt;br /&gt;
	# 		fastcgi_pass ?????:????; # or whatever port your PHP-FPM listens on&lt;br /&gt;
	# 	}&lt;br /&gt;
	# }&lt;br /&gt;
	&lt;br /&gt;
	# Handling for Mediawiki REST API, see [[mw:API:REST_API]]&lt;br /&gt;
	location /w/rest.php/ {&lt;br /&gt;
		try_files $uri $uri/ /w/rest.php?$query_string;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Handling for the article path (pretty URLs)&lt;br /&gt;
	location /view/ {&lt;br /&gt;
		rewrite ^/view/(?&amp;lt;pagename&amp;gt;.*)$ /w/index.php;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Allow robots.txt in case you have one&lt;br /&gt;
	location = /robots.txt {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location = /favicon.ico {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location / {&lt;br /&gt;
		rewrite ^/(.*)$ /view/$1 redirect;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocalSettings.php ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// ... (생략)&lt;br /&gt;
&lt;br /&gt;
$wgArticlePath = &amp;quot;/view/$1&amp;quot;;&lt;br /&gt;
$wgUsePathInfo = true;&lt;br /&gt;
$wgScriptExtension = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgMathValidModes[] = 'mathml';&lt;br /&gt;
$wgDefaultUserOptions['math'] = 'mathml';&lt;br /&gt;
$wgMathFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
$wgMathMathMLUrl = 'https://wiki-mathoid.dong-min.kim';&lt;br /&gt;
&lt;br /&gt;
# START VisualEditor Setting&lt;br /&gt;
$wgGroupPermissions['user']['writeapi'] = true;&lt;br /&gt;
wfLoadExtension( 'Parsoid', 'vendor/wikimedia/parsoid/extension.json' );&lt;br /&gt;
# END VisualEditor Setting&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Restbase (도커) ===&lt;br /&gt;
&lt;br /&gt;
* 이 Restbase를 비롯하여 아래의 Parsoid, Mathoid는 미디어위키에서 Visual Editor + Math 확장 기능을 사용하기 위해 설치함&lt;br /&gt;
* 원래 미디어위키에서 무료로 제공하는 기본 Restbase서버와 Mathoid 서버를 이용해도 되지만, 속도가 정말 '''&amp;lt;big&amp;gt;끔찍&amp;lt;/big&amp;gt;하게''' 느려서 직접 구축&lt;br /&gt;
* 제대로 된 문서가 없어서 구축 삽질 엄청 했다... 코드 안에 mediawiki url 하드코딩이 너무 많아 뭐가 문제인지 발견하기가 힘들었다&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API를 처리하기 위한 REST 처리 서버&lt;br /&gt;
* REST로 받은 요청을 내부 독립 서버 (Parsoid, Mathoid 등)에 전달 및 반환 결과 캐싱&lt;br /&gt;
* 기본 DB 세팅인 SQLite는 동시에 많은 요청이 들어오면 db파일이 죽는 경우가 있어서, Cassandra 세팅으로 바꿈&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-restbase&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):7231&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Parsoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Visual Editor 등에서 html &amp;lt;-&amp;gt; wikitext 간 변환 등을 위해 문서 실시간 파싱 등을 처리&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-parsoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):8000&lt;br /&gt;
** (비공개):8001&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Mathoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Math 확장 기능에서 사용&lt;br /&gt;
* LaTeX 문법을 svg, png 등으로 변환&lt;br /&gt;
* Node.js 10&lt;br /&gt;
* pm2로 서비스화 시킴&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-mathoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):10042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Deluge (토렌트) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 토렌트 서버&lt;br /&gt;
* 컨테이너를 완전히 OpenVPN으로 감싸서, VPN 등록이 되지 않은 상태에서는 네트워크 접속을 원천 차단&lt;br /&gt;
* *.ovpn 파일은 config 폴더에 넣으면 됨&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/binhex/arch-delugevpn&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (기본값)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config/ -&amp;gt; /config&lt;br /&gt;
** (자료 저장 폴더) -&amp;gt; /data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** NAME_SERVERS = 1.1.1.1&lt;br /&gt;
** LAN_NETWORK = 호스트의 아이피 말고 호스트의 서브넷 (xxx.xxx.xxx.xxx/xx)&lt;br /&gt;
** ENABLE_PRIVOXY = yes&lt;br /&gt;
** PGID = 100&lt;br /&gt;
** PUID = 1026&lt;br /&gt;
** VPN_PROV = custom&lt;br /&gt;
** VPN_ENABLED = yes&lt;br /&gt;
** HOME = /config/home&lt;br /&gt;
&lt;br /&gt;
=== Gitlab ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 사설 Git 서버&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-ce/&lt;br /&gt;
* 12.8.8&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
&lt;br /&gt;
==== gitlab.rb 설정 ====&lt;br /&gt;
&lt;br /&gt;
* external_url 'https://git.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['gitlab_ssh_host'] = 'kasumi.synology.me'&lt;br /&gt;
* gitlab_rails['time_zone'] = 'Asia/Seoul'&lt;br /&gt;
* gitlab_rails['gitlab_default_theme'] = 10  # dark(default) = 2, red = 9, light red = 10&lt;br /&gt;
* gitlab_rails['trusted_proxies'] = ['시놀로지IP', '프록시IP']&lt;br /&gt;
* gitlab_rails['gitlab_shell_ssh_port'] = 64100&lt;br /&gt;
* registry_external_url 'https://registry.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['registry_enabled'] = true&lt;br /&gt;
* unicorn['worker_processes'] = 2&lt;br /&gt;
* sidekiq['concurrency'] = 3  # default 25&lt;br /&gt;
* nginx['gzip_enabled'] = false&lt;br /&gt;
* nginx['listen_port'] = 80&lt;br /&gt;
* nginx['listen_https'] = false&lt;br /&gt;
* registry_nginx['enable'] = true&lt;br /&gt;
* registry_nginx['gzip_enabled'] = false&lt;br /&gt;
* registry_nginx['listen_port'] = 5005&lt;br /&gt;
* registry_nginx['listen_https'] = false&lt;br /&gt;
&lt;br /&gt;
==== 업데이트 ====&lt;br /&gt;
* 업그레이드 패스 참조: https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/&lt;br /&gt;
* 컨테이너 들어가기&lt;br /&gt;
* 서비스 중지&lt;br /&gt;
** gitlab-ctl stop&lt;br /&gt;
* 컨테이너 정지&lt;br /&gt;
* 컨테이너 삭제&lt;br /&gt;
* 새 컨테이너 생성&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
* 상태 확인: https://git.dong-min.kim/admin/background_migrations&lt;br /&gt;
* 최종 확인&lt;br /&gt;
** gitlab-rake gitlab:check&lt;br /&gt;
&lt;br /&gt;
=== Gitlab Runner ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* Gitlab의 CI/CD 실행용 Runner&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-runner/&lt;br /&gt;
* 12.8.0&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 파일 설정&lt;br /&gt;
** docker.sock -&amp;gt; /var/run/docker.sock&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab runner 설정 폴더 -&amp;gt; /etc/gitlab-runner&lt;br /&gt;
* 주의점&lt;br /&gt;
** 시놀로지 docker를 쓰려면 시놀로지의 docker.sock이 필요하다.&lt;br /&gt;
*** 먼저 시놀로지 측에서 sudo ln -s /var/run/docker.sock /volume1/docker/docker.sock 으로 심볼릭 링크 생성&lt;br /&gt;
*** Gitlab Runner 컨테이너 생성할 때 위 파일 링크가 안 됨&lt;br /&gt;
*** 먼저 아무 파일이나 링크해서 일단 컨테이너 생성&lt;br /&gt;
*** 컨테이너 설정 백업해서, 그 파일 안에서 링크 수정&lt;br /&gt;
*** 수정한 컨테이너 설정을 다시 로드&lt;br /&gt;
** 컨테이너 실행 후 gitlab-runner register 명령어로 gitlab 등록&lt;br /&gt;
&lt;br /&gt;
=== kb_apart (광규 외주) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 광규 외주 프로그램 - 아파트 시세 확인&lt;br /&gt;
&lt;br /&gt;
* gliderlabs/alpine:3.3 기반 (glibc 설치용)&lt;br /&gt;
* Miniconda3 설치&lt;br /&gt;
* Python 3.7.5 + Flask&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-kb-apart-src&lt;br /&gt;
* 도커 레포지토리 없음 (비공개 코드)&lt;br /&gt;
** tar 파일로 직접 업로드&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):5000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** 법정동.txt -&amp;gt; /var/lib/kb_apart/utils/법정동.txt&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CONDA_ENV_NAME = kb_apart&lt;br /&gt;
&lt;br /&gt;
=== Internet Speed Logger (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 일정 주기마다 Speedtest 사이트로 속도 측정해서 그래프로 표시&lt;br /&gt;
* 자꾸 집 인터넷 QoS 걸리는 것 같아서 설치함&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/vkentta/internet-speed-logger&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):3000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** internet speed logger 설정 폴더 -&amp;gt; /usr/src/app/data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CHECK_PERIOD_MINUTES = 30&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - 독립형 ==&lt;br /&gt;
&lt;br /&gt;
=== busybox (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 게스트 관점에서 바라보는 파일 권한 확인, 간단한 명령어 (curl이나 ping 등) 실행용&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/busybox&lt;br /&gt;
* 1.31.1-glibc&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (없음)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== openvpn (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* OpenVPN Client 를 수행해서, 그 결과를 SOCKS5 프록시 서버로 통신 가능&lt;br /&gt;
* OpenVPN to SOCKS5/HTTP Proxy Docker Image&lt;br /&gt;
* 시놀로지 도커에서 자꾸 IPV6 설정 실패하니, ovpn 파일 안의&lt;br /&gt;
** ovpn 파일 안에 proto udp를 proto udp4로&lt;br /&gt;
** setenv UV_IPV6 yes 주석처리&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://registry.hub.docker.com/r/curve25519xsalsa20poly1305/openvpn/&lt;br /&gt;
* latest&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):1080 tcp&lt;br /&gt;
** (비공개):1080 udp&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** (openvpn 설정폴더)/vpn -&amp;gt; /vpn&lt;br /&gt;
** /dev/net/tun -&amp;gt; /dev/net/tun (필요없을수도?)&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** OPENVPN_CONFIG = /vpn/설정파일.ovpn&lt;br /&gt;
&lt;br /&gt;
== 권한 관련 팁 ==&lt;br /&gt;
Nginx, PHP의 404 Not found 오류는 권한 문제일 때가 많다. 도커에서 실행중이라고 했을 때 살펴볼 것은&lt;br /&gt;
&lt;br /&gt;
* 컨테이너 내에서 Nginx나 PHP를 실행하고 있는 uid는 무엇인가?&lt;br /&gt;
** 해당 uid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* uid가 속해 있는 그룹 확인 (gid)&lt;br /&gt;
** 해당 gid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* 권한이 있는데도 접근이 안 되는 경우&lt;br /&gt;
** 루트 디렉터리에서부터 시작해서, 해당 파일이 있는 디렉터리까지의 경로까지 중에서 현재 uid 또는 gid로 '''실행 권한'''을 얻을 수 있는지 확인할 것.&lt;br /&gt;
** 읽기, 쓰기 권한이 아니라 실행 권한이다.&lt;br /&gt;
* 겉으로 보기에는 같은 www-data이더라도 컨테이너에 따라 id는 다를 수 있다.&lt;br /&gt;
* 시놀로지의 경우 NFS 서버로 마운트한 클라이언트에서 본 권한과도 다를 수 있기 때문에 주의&lt;br /&gt;
* LDAP 설정해서 동기화 하려 했으나 귀찮아서 일단 보류&lt;br /&gt;
&lt;br /&gt;
== 집 Docker Swarm 삽질 ==&lt;br /&gt;
&lt;br /&gt;
=== GUI 프로그램 ===&lt;br /&gt;
&lt;br /&gt;
==== Portainer (9000) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** '''터미널 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** gitlab 레지스트리 목록 보기 불가&lt;br /&gt;
** 이미지에서 마우스로 컨테이너 실행 불가&lt;br /&gt;
&lt;br /&gt;
==== Swarmpit (888) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** gitlab 레지스트리 목록 보기 가능&lt;br /&gt;
** '''이미지에서 마우스로 컨테이너 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** 터미널 실행 불가&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=219</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=219"/>
		<updated>2023-11-28T10:41:40Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
* Ubuntu 20.04에서 경고창 뜨는 속도 느린 거 고치기 (안 고쳐지는듯?)&lt;br /&gt;
** vi ~/.config/pulse/default.pa 만들어서 넣자&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.include /etc/pulse/default.pa&lt;br /&gt;
unload-module module-suspend-on-idle&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작 표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
* 제목 표시줄 마우스 휠 버튼 눌렀을 때 최소화 없애기&lt;br /&gt;
** dcond-editor에서&lt;br /&gt;
** org.gnome.desktop.wm.preferences action-middle-click-titlebar 'none'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* gedit에서 저장할 때 튕기는 거 방지&lt;br /&gt;
** 바탕화면 아이콘을 없애면 안 튕긴다...&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gjs/+bug/1882410&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
**백그라운드에서 한국어로 실행하기&lt;br /&gt;
***LANGUAGE=ko_KR.utf-8 nohup /opt/google/chrome/google-chrome 2&amp;gt; /dev/null &amp;amp; disown&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
*멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*일괄 이름 바꾸기&lt;br /&gt;
**Thunar (Xfce 기본 파일 매니저)&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 문제 해결 ==&lt;br /&gt;
&lt;br /&gt;
* libc등등을 대충 dpkg로 넣어서 의존성 문제 생겨버렸을 때&lt;br /&gt;
** 즉 아래와 같은 문제가 생겼을 때. 그리고 sudo apt install -f 도 먹지 않을 때.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ibc6-dbg: Depends: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.1 is installed \&lt;br /&gt;
libc6-dev: Depends: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.1 is installed \&lt;br /&gt;
           Depends: libc-dev-bin (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.2 is installed&lt;br /&gt;
libc6-i386: Depends: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.1 is installed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** apt show -a libc6로, 원래 ubuntu에 들어있던 라이브러리의 정확한 이름을 알아낸다. (ex: 2.31-0ubuntu9.1)&lt;br /&gt;
** sudo apt download libc6=2.31-0ubuntu9.1로 deb 파일을 다운받는다.&lt;br /&gt;
** sudp dpkg -i libc~~.deb로 overwrite 한다.&lt;br /&gt;
** 다시 sudo apt install -f 해서 고치기 완료&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D_%EC%97%B0%EC%8A%B5%EC%9E%A5&amp;diff=218</id>
		<title>머신러닝 연습장</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D_%EC%97%B0%EC%8A%B5%EC%9E%A5&amp;diff=218"/>
		<updated>2023-09-29T03:01:49Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Intel MKL로 설치하기&lt;br /&gt;
** conda create -n disentangle_tf -c intel intelpython3_core python=3.6 numpy=1.16.2&lt;br /&gt;
* 지수표기 끄기&lt;br /&gt;
** np.set_printoptions(suppress=True)&lt;br /&gt;
** torch.set_printoptions(sci_mode=False)&lt;br /&gt;
* Conv2d에서 채널만 바꾸는 조합 (가로세로 그대로)&lt;br /&gt;
** kernel_size=1&lt;br /&gt;
** kernel_size=3, padding=1&lt;br /&gt;
*** ex) nn.Conv2d(16, 32, kernel_size=3, padding=1) 하면 16채널짜리 2d가 32채널짜리 2d가 된다&lt;br /&gt;
* torch 네트워크 그래프 출력&lt;br /&gt;
** torchviz.make_dot(recon, params=dict(self.vqvae.named_parameters()))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 도커 관련 ===&lt;br /&gt;
&lt;br /&gt;
* 이미지 빌드&lt;br /&gt;
** docker build . --tag kb_apart:200225&lt;br /&gt;
* 컨테이너 실행&lt;br /&gt;
** docker run -i -t -d -p [외부 포트]:[내부 포트] -v [외부 폴더 or 파일][내부 폴더 or 파일] kb_apart:200225&lt;br /&gt;
** 맨 뒤에 sh 등 붙이면 entrypoint 기본이 아닌 그거 실행함&lt;br /&gt;
* 컨테이너 붙기&lt;br /&gt;
** docker exec -it [컨테이너 해시] sh&lt;br /&gt;
* 컨테이너 (전체) 종료&lt;br /&gt;
** docker kill $(docker ps -q)&lt;br /&gt;
* 이미지 (전체) 삭제&lt;br /&gt;
** docker rm $(docker ps -a -q)&lt;br /&gt;
&lt;br /&gt;
=== pycharm 원격 서버에서 실행하기 설정 ===&lt;br /&gt;
&lt;br /&gt;
* 설정-&amp;gt;도구-&amp;gt;SSH 구성&lt;br /&gt;
**ssh-remote-(servername) 추가&lt;br /&gt;
*설정-&amp;gt;프로젝트-&amp;gt;Python 인터프리터-&amp;gt;인터프리터 추가&lt;br /&gt;
**위치: SSH&lt;br /&gt;
**SSH 연결: 기존&lt;br /&gt;
**시스템 인터프리터: /home/isi/d-kim/anaconda3/envs/(envname)/bin/python&lt;br /&gt;
**동기화 폴더: 기본값 (이 뒤에 따로 설정할 예정)&lt;br /&gt;
**서버에 프로젝트 파일 자동 업로드: 체크 해제 (이 뒤에 따로 설정할 예정)&lt;br /&gt;
**설정 완료 후 이름 바꿔주기: remote-(servername)-(envname)&lt;br /&gt;
*프로젝트 인터프리터는 그대로 local 인터프리터로 놔 두기.&lt;br /&gt;
**나중에 실행 옵션에서 선택해 줄 예정&lt;br /&gt;
*도구-&amp;gt;배포-&amp;gt;구성&lt;br /&gt;
**연결탭 들어가기&lt;br /&gt;
**루트 경로: /mnt/ISINAS3/d-kim/pycharm&lt;br /&gt;
**다운로드/업로드/싱크에 Rsync 사용 체크하기&lt;br /&gt;
**매핑탭 들어가기&lt;br /&gt;
**로컬 경로: 기본값 (프로젝트 경로)&lt;br /&gt;
**배포 경로: /(project_folder_name)&lt;br /&gt;
**웹 경로: /&lt;br /&gt;
**제외된 경로: 로컬 경로의 log 등등 선택&lt;br /&gt;
*여러 서버 중에 파일 업로드를 담당할 서버에서 체크버튼 누르기&lt;br /&gt;
*도구-&amp;gt;배포-&amp;gt;자동 업로드(항상)에 체크하기&lt;br /&gt;
*실행-&amp;gt;구성 편집&lt;br /&gt;
**새 구성 추가: python&lt;br /&gt;
**이름: (projectname)_(servername)&lt;br /&gt;
**인터프리터: remote-(servername)-(envname)&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=217</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=217"/>
		<updated>2023-07-12T08:10:45Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* OS 관련 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
* Ubuntu 20.04에서 경고창 뜨는 속도 느린 거 고치기 (안 고쳐지는듯?)&lt;br /&gt;
** vi ~/.config/pulse/default.pa 만들어서 넣자&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.include /etc/pulse/default.pa&lt;br /&gt;
unload-module module-suspend-on-idle&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작 표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
* 제목 표시줄 마우스 휠 버튼 눌렀을 때 최소화 없애기&lt;br /&gt;
** dcond-editor에서&lt;br /&gt;
** org.gnome.desktop.wm.preferences action-middle-click-titlebar 'none'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* gedit에서 저장할 때 튕기는 거 방지&lt;br /&gt;
** 바탕화면 아이콘을 없애면 안 튕긴다...&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gjs/+bug/1882410&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
**백그라운드에서 한국어로 실행하기&lt;br /&gt;
***LANGUAGE=ko_KR.utf-8 nohup /opt/google/chrome/google-chrome 2&amp;gt; /dev/null &amp;amp; disown&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
*멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*일괄 이름 바꾸기&lt;br /&gt;
**Thunar (Xfce 기본 파일 매니저)&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=216</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=216"/>
		<updated>2023-07-01T09:55:48Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* 딱 접속할 노드만 접속하고, 재부팅해도 접속되는 방법 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* ffmpeg에서 사진 모음을 영상으로 만들기&lt;br /&gt;
** ffmpeg -r 10 -pattern_type glob -i 'bvp_x_y_*.png' -vf fps=60,scale=1280:-2 -pix_fmt yuv420p result.mp4&lt;br /&gt;
** r은 초당 몇 개를 보여줄 것인가&lt;br /&gt;
** pattern_type glob -i 는 입력 파일 패턴&lt;br /&gt;
** fps는 fps&lt;br /&gt;
** scale은 1280으로 만들고, 다음이 -1이면 세로 자동 결정, -2면 세로를 짝수로 만들어 줌&lt;br /&gt;
*pdf 관련&lt;br /&gt;
**잘라내기&lt;br /&gt;
***pdfcrop --margin '5 5 5 5' 원본파일.pdf 결과파일.pdf&lt;br /&gt;
**페이지 한 개만 따기&lt;br /&gt;
***gs -dNOPAUSE -dQUIET -dBATCH -dFirstPage=1 -dLastPage=1 -sDEVICE=pdfwrite -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 최고화질&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 중간화질 (사진들 개판됨)&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 최저화질&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/display -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기/압축풀기&lt;br /&gt;
** 압축: tar -zcvf data.tar.gz ./data&lt;br /&gt;
** 풀기: tar -xvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** 압축: tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
** 풀기: tar --use-compress-prog=pbzip2 -xvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&lt;br /&gt;
*파일 인코딩 일괄 바꾸기&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -iname '*.cpp' -exec sh -c 'iconv -f SHIFT_JIS -t utf-8 -o converted &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; mv converted &amp;quot;$1&amp;quot;' -- {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ISCSI 관련 ==&lt;br /&gt;
&lt;br /&gt;
=== 딱 접속할 노드만 접속하고, 재부팅해도 접속되는 방법 ===&lt;br /&gt;
&lt;br /&gt;
* 기존 설정 제거&lt;br /&gt;
** cd /etc/iscsi  rm -rf /etc/iscsi/nodes/*  rm -rf /etc/iscsi/send_targets/*&lt;br /&gt;
* 서비스 중단&lt;br /&gt;
** service open-iscsi stop  systemctl stop iscsi.service  systemctl stop iscsid.socket&lt;br /&gt;
* 노드 생성 및 자동 접속 설정&lt;br /&gt;
** iscsiadm \  --mode node \  --target &amp;quot;iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa&amp;quot; \  --portal [타겟 ip 주소] \  --op new&lt;br /&gt;
** iscsiadm \  --mode node \  --target &amp;quot;iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa&amp;quot; \  --portal [타겟 ip 주소] \  --op update \  -n node.startup \  -v automatic&lt;br /&gt;
* 서비스 재시작&lt;br /&gt;
** systemctl restart iscsi.service&lt;br /&gt;
** service open-iscsi status&lt;br /&gt;
* 붙었는지 확인하기&lt;br /&gt;
** iscsiadm -m session -P 3  | grep -i 'attached scsi'&lt;br /&gt;
* 붙은 하드 파티션 만들기&lt;br /&gt;
** mkfs.ext4 /dev/[방금 확인한 장치명]&lt;br /&gt;
* 부팅시 자동으로 붙게 하기&lt;br /&gt;
** mkdir /mnt/docker-test&lt;br /&gt;
** vi /etc/fstab&lt;br /&gt;
*** /dev/[장치명] /mnt/docker-test ext4 _netdev 0 0&lt;br /&gt;
** mount -av&lt;br /&gt;
&lt;br /&gt;
=== 헷갈리는 것 (하면 안 됨) ===&lt;br /&gt;
&lt;br /&gt;
* 디스커버리 하기&lt;br /&gt;
** iscsiadm -m discovery -t sendtargets -p [타겟 ip 주소]&lt;br /&gt;
** iscsiadm \    --mode discoverydb \    --type sendtargets \    --portal [타겟 ip 주소] \    --op new&lt;br /&gt;
* 한 번 discovery 하는게 아니라 계속 반복해서 시도할 것인지&lt;br /&gt;
** iscsiadm \    --mode discoverydb \    --type sendtargets \    --portal &amp;quot;192.168.0.16&amp;quot; \    --op update \    -n discovery.sendtargets.use_discoveryd \    -v Yes&lt;br /&gt;
* 계속 시도하는거 몇 초에 한 번 씩 할 것인지&lt;br /&gt;
** iscsiadm \    --mode discoverydb \    --type sendtargets \    --portal &amp;quot;192.168.0.16&amp;quot; \    --op update \    -n discovery.sendtargets.discoveryd_poll_inval \    -v 30&lt;br /&gt;
* 로그인 하기. 근데 이건 한번만 접속하고 재부팅하면 접속 안 하는듯?&lt;br /&gt;
** iscsiadm -m node --targetname &amp;quot;iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa -p [타겟 주소] -l&lt;br /&gt;
* 이거 하면 모든 discovery 된 node가 다 부팅시 연결됨&lt;br /&gt;
** 그리고 discovery 하고 아래 설정을 바꾸면 자동으로 모든 노드를 다시 연결하는게 하니라, 아래 설정 후 discovery 한 항목부터 자동 연결 설정이 적용됨&lt;br /&gt;
** 즉, 이미 discovery 된 node나 target은 해당 node나 target 안의 conf 파일 안의 node.startup 등을 바꿔줘야 하는 것&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
*** node.leading_login = No 에서 node.leading_login = Yes 으로&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=215</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=215"/>
		<updated>2023-07-01T09:12:19Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* ffmpeg에서 사진 모음을 영상으로 만들기&lt;br /&gt;
** ffmpeg -r 10 -pattern_type glob -i 'bvp_x_y_*.png' -vf fps=60,scale=1280:-2 -pix_fmt yuv420p result.mp4&lt;br /&gt;
** r은 초당 몇 개를 보여줄 것인가&lt;br /&gt;
** pattern_type glob -i 는 입력 파일 패턴&lt;br /&gt;
** fps는 fps&lt;br /&gt;
** scale은 1280으로 만들고, 다음이 -1이면 세로 자동 결정, -2면 세로를 짝수로 만들어 줌&lt;br /&gt;
*pdf 관련&lt;br /&gt;
**잘라내기&lt;br /&gt;
***pdfcrop --margin '5 5 5 5' 원본파일.pdf 결과파일.pdf&lt;br /&gt;
**페이지 한 개만 따기&lt;br /&gt;
***gs -dNOPAUSE -dQUIET -dBATCH -dFirstPage=1 -dLastPage=1 -sDEVICE=pdfwrite -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 최고화질&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 중간화질 (사진들 개판됨)&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 최저화질&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/display -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기/압축풀기&lt;br /&gt;
** 압축: tar -zcvf data.tar.gz ./data&lt;br /&gt;
** 풀기: tar -xvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** 압축: tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
** 풀기: tar --use-compress-prog=pbzip2 -xvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&lt;br /&gt;
*파일 인코딩 일괄 바꾸기&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -iname '*.cpp' -exec sh -c 'iconv -f SHIFT_JIS -t utf-8 -o converted &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; mv converted &amp;quot;$1&amp;quot;' -- {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ISCSI 관련 ==&lt;br /&gt;
&lt;br /&gt;
=== 딱 접속할 노드만 접속하고, 재부팅해도 접속되는 방법 ===&lt;br /&gt;
&lt;br /&gt;
* 기존 설정 제거&lt;br /&gt;
** cd /etc/iscsi  rm -rf /etc/iscsi/nodes/*  rm -rf /etc/iscsi/send_targets/*&lt;br /&gt;
* 서비스 중단&lt;br /&gt;
** service open-iscsi stop  systemctl stop iscsi.service  systemctl stop iscsid.socket&lt;br /&gt;
* 노드 생성 및 자동 접속 설정&lt;br /&gt;
** iscsiadm \  --mode node \  --target &amp;quot;iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa&amp;quot; \  --portal [타겟 ip 주소] \  --op new&lt;br /&gt;
** iscsiadm \  --mode node \  --target &amp;quot;iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa&amp;quot; \  --portal [타겟 ip 주소] \  --op update \  -n node.startup \  -v automatic&lt;br /&gt;
* 서비스 재시작&lt;br /&gt;
** systemctl restart iscsi.service&lt;br /&gt;
** service open-iscsi status&lt;br /&gt;
* 붙었는지 확인하기&lt;br /&gt;
** iscsiadm -m session -P 3  | grep -i 'attached scsi'&lt;br /&gt;
* 붙은 하드 파티션 만들기&lt;br /&gt;
** mkfs.ext4 /dev/[방금 확인한 장치명]&lt;br /&gt;
* 부팅시 자동으로 붙게 하기&lt;br /&gt;
** mkdir /mnt/docker-test&lt;br /&gt;
** vi /etc/fstab&lt;br /&gt;
*** /dev/[장치명] /mnt/docker-test ext4 _netdev 0 0&lt;br /&gt;
** mount -av&lt;br /&gt;
* ㅁㅁ&lt;br /&gt;
&lt;br /&gt;
=== 헷갈리는 것 (하면 안 됨) ===&lt;br /&gt;
&lt;br /&gt;
* 디스커버리 하기&lt;br /&gt;
** iscsiadm -m discovery -t sendtargets -p [타겟 ip 주소]&lt;br /&gt;
** iscsiadm \    --mode discoverydb \    --type sendtargets \    --portal [타겟 ip 주소] \    --op new&lt;br /&gt;
* 한 번 discovery 하는게 아니라 계속 반복해서 시도할 것인지&lt;br /&gt;
** iscsiadm \    --mode discoverydb \    --type sendtargets \    --portal &amp;quot;192.168.0.16&amp;quot; \    --op update \    -n discovery.sendtargets.use_discoveryd \    -v Yes&lt;br /&gt;
* 계속 시도하는거 몇 초에 한 번 씩 할 것인지&lt;br /&gt;
** iscsiadm \    --mode discoverydb \    --type sendtargets \    --portal &amp;quot;192.168.0.16&amp;quot; \    --op update \    -n discovery.sendtargets.discoveryd_poll_inval \    -v 30&lt;br /&gt;
* 로그인 하기. 근데 이건 한번만 접속하고 재부팅하면 접속 안 하는듯?&lt;br /&gt;
** iscsiadm -m node --targetname &amp;quot;iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa -p [타겟 주소] -l&lt;br /&gt;
* 이거 하면 모든 discovery 된 node가 다 부팅시 연결됨&lt;br /&gt;
** 그리고 discovery 하고 아래 설정을 바꾸면 자동으로 모든 노드를 다시 연결하는게 하니라, 아래 설정 후 discovery 한 항목부터 자동 연결 설정이 적용됨&lt;br /&gt;
** 즉, 이미 discovery 된 node나 target은 해당 node나 target 안의 conf 파일 안의 node.startup 등을 바꿔줘야 하는 것&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
*** node.leading_login = No 에서 node.leading_login = Yes 으로&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=214</id>
		<title>대문</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=214"/>
		<updated>2023-03-15T09:15:04Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* 까먹기는 아쉬운 자잘한 목록 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div&amp;gt;&lt;br /&gt;
__목차숨김__&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;동민 위키에 오신 것을 환영합니다.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 이 위키는 [https://dong-min.kim 저]만 작성할 수 있는 개인적인 위키입니다.&lt;br /&gt;
** 질문 또는 문의 사항이 있으시면, [[파일:KDM_email.png]]로 연락해 주시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;
= 작업 =&lt;br /&gt;
&lt;br /&gt;
== 진행중 작업 ==&lt;br /&gt;
여러 가지 작업중인 내용입니다.&lt;br /&gt;
&lt;br /&gt;
* [[머신러닝]]&lt;br /&gt;
&lt;br /&gt;
== 일시정지 작업 ==&lt;br /&gt;
바빠서 일시정지한 작업 내용들입니다.&lt;br /&gt;
&lt;br /&gt;
== 저장된 작업 ==&lt;br /&gt;
끝난 작업입니다.&lt;br /&gt;
&lt;br /&gt;
* [[우분투 설치할 목록]]&lt;br /&gt;
* [[시놀로지 도커 설정]]&lt;br /&gt;
* [[캐나다 어학연수]]&lt;br /&gt;
&lt;br /&gt;
= 메모 =&lt;br /&gt;
&lt;br /&gt;
== 까먹기는 아쉬운 자잘한 목록 ==&lt;br /&gt;
신경써서 외우긴 귀찮은데 까먹으면 귀찮은 목록입니다.&lt;br /&gt;
&lt;br /&gt;
* [[코딩 네이밍 규칙]]&lt;br /&gt;
* [[더러운 C++ 해결책 모음]]&lt;br /&gt;
* [[더러운 python 해결책 모음]]&lt;br /&gt;
* [[더러운 matlab 해결책 모음]]&lt;br /&gt;
* [[더러운 프론트엔드 해결책 모음]]&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
*[[WSL 세팅하기]]&lt;br /&gt;
* [[Git 메모]]&lt;br /&gt;
* [[맞춤법]]&lt;br /&gt;
&lt;br /&gt;
= 기타 =&lt;br /&gt;
여긴 내 맘입니다. 크하하하&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[[겨울왕국|'''겨울왕국''']]&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;'''[[아이돌마스터]]'''&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;'''[[뱅드림]]'''&amp;lt;/s&amp;gt;&lt;br /&gt;
* [[독서 목록]]&lt;br /&gt;
* [[날아간 위키 링크들]]&lt;br /&gt;
&lt;br /&gt;
= 빠른 링크 =&lt;br /&gt;
&lt;br /&gt;
* [https://dong-min.kim 김동민 블로그]&lt;br /&gt;
* [https://github.com/kim135797531 Github]&lt;br /&gt;
* [https://git.dong-min.kim 사설 git]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=213</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=213"/>
		<updated>2022-03-30T08:04:30Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
* Ubuntu 20.04에서 경고창 뜨는 속도 느린 거 고치기 (안 고쳐지는듯?)&lt;br /&gt;
** vi ~/.config/pulse/default.pa 만들어서 넣자&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.include /etc/pulse/default.pa&lt;br /&gt;
unload-module module-suspend-on-idle&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작 표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
* 제목 표시줄 마우스 휠 버튼 눌렀을 때 최소화 없애기&lt;br /&gt;
** dcond-editor에서&lt;br /&gt;
** org.gnome.desktop.wm.preferences action-middle-click-titlebar 'none'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
**백그라운드에서 한국어로 실행하기&lt;br /&gt;
***LANGUAGE=ko_KR.utf-8 nohup /opt/google/chrome/google-chrome 2&amp;gt; /dev/null &amp;amp; disown&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
*멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*일괄 이름 바꾸기&lt;br /&gt;
**Thunar (Xfce 기본 파일 매니저)&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=212</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=212"/>
		<updated>2022-02-14T08:27:09Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* ffmpeg에서 사진 모음을 영상으로 만들기&lt;br /&gt;
** ffmpeg -r 10 -pattern_type glob -i 'bvp_x_y_*.png' -vf fps=60,scale=1280:-2 -pix_fmt yuv420p result.mp4&lt;br /&gt;
** r은 초당 몇 개를 보여줄 것인가&lt;br /&gt;
** pattern_type glob -i 는 입력 파일 패턴&lt;br /&gt;
** fps는 fps&lt;br /&gt;
** scale은 1280으로 만들고, 다음이 -1이면 세로 자동 결정, -2면 세로를 짝수로 만들어 줌&lt;br /&gt;
*pdf 관련&lt;br /&gt;
**잘라내기&lt;br /&gt;
***pdfcrop --margin '5 5 5 5' 원본파일.pdf 결과파일.pdf&lt;br /&gt;
**페이지 한 개만 따기&lt;br /&gt;
***gs -dNOPAUSE -dQUIET -dBATCH -dFirstPage=1 -dLastPage=1 -sDEVICE=pdfwrite -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 최고화질&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 중간화질 (사진들 개판됨)&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
**압축하기 최저화질&lt;br /&gt;
***gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/display -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기/압축풀기&lt;br /&gt;
** 압축: tar -zcvf data.tar.gz ./data&lt;br /&gt;
** 풀기: tar -xvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** 압축: tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
** 풀기: tar --use-compress-prog=pbzip2 -xvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&lt;br /&gt;
*파일 인코딩 일괄 바꾸기&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -iname '*.cpp' -exec sh -c 'iconv -f SHIFT_JIS -t utf-8 -o converted &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; mv converted &amp;quot;$1&amp;quot;' -- {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=211</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=211"/>
		<updated>2021-11-19T06:21:45Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* ffmpeg에서 사진 모음을 영상으로 만들기&lt;br /&gt;
** ffmpeg -r 10 -pattern_type glob -i 'bvp_x_y_*.png' -vf fps=60,scale=1280:-2 -pix_fmt yuv420p result.mp4&lt;br /&gt;
** r은 초당 몇 개를 보여줄 것인가&lt;br /&gt;
** pattern_type glob -i 는 입력 파일 패턴&lt;br /&gt;
** fps는 fps&lt;br /&gt;
** scale은 1280으로 만들고, 다음이 -1이면 세로 자동 결정, -2면 세로를 짝수로 만들어 줌&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기/압축풀기&lt;br /&gt;
** 압축: tar -zcvf data.tar.gz ./data&lt;br /&gt;
** 풀기: tar -xvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** 압축: tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
** 풀기: tar --use-compress-prog=pbzip2 -xvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&lt;br /&gt;
*파일 인코딩 일괄 바꾸기&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -iname '*.cpp' -exec sh -c 'iconv -f SHIFT_JIS -t utf-8 -o converted &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; mv converted &amp;quot;$1&amp;quot;' -- {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=210</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=210"/>
		<updated>2021-11-16T09:16:32Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
* Ubuntu 20.04에서 경고창 뜨는 속도 느린 거 고치기 (안 고쳐지는듯?)&lt;br /&gt;
** vi ~/.config/pulse/default.pa 만들어서 넣자&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.include /etc/pulse/default.pa&lt;br /&gt;
unload-module module-suspend-on-idle&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작 표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
* 제목 표시줄 마우스 휠 버튼 눌렀을 때 최소화 없애기&lt;br /&gt;
** dcond-editor에서&lt;br /&gt;
** org.gnome.desktop.wm.preferences action-middle-click-titlebar 'none'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
*멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*일괄 이름 바꾸기&lt;br /&gt;
**Thunar (Xfce 기본 파일 매니저)&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=Mujoco_%EB%B2%88%EC%97%AD&amp;diff=209</id>
		<title>Mujoco 번역</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=Mujoco_%EB%B2%88%EC%97%AD&amp;diff=209"/>
		<updated>2021-11-08T09:37:10Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;참고: 아래의 모든 내용은 mujoco.org/book 을 비공식적으로 번역한 것이며, 오역이 있을 수 있습니다. 문제시 삭제하겠습니다.&lt;br /&gt;
DISCLAIMER: This is an unofficial translation of mujoco.org/book and may be mistranslated. Will be removed if any problem.&lt;br /&gt;
&lt;br /&gt;
= 계산 (Computation) =&lt;br /&gt;
&lt;br /&gt;
== 파라미터 (Parameters) ==&lt;br /&gt;
&amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; = 제약 집합&lt;br /&gt;
&lt;br /&gt;
여기서 &amp;lt;math&amp;gt;( R, a^* )&amp;lt;/math&amp;gt;가 모델 파라미터로부터 어떻게 계산되는지 설명한다. 선택된 파라미터화가 make sense하기 위하여, 우리는 먼저 이 수치들이 어떻게 다이나믹스에 영향을 미치는지 이해해야 한다. 우리는 (4)의 제약되지 않은 minimizer, &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;f^+ = (A+R)^{-1} (a^* - a^0 )&amp;lt;/math&amp;gt;에 대해 설명한다. 만약 &amp;lt;math&amp;gt;(f^+ \in \Omega )&amp;lt;/math&amp;gt; 이라면, &amp;lt;math&amp;gt;f^+ = f&amp;lt;/math&amp;gt;가 우리 모델에서 생성되는 실제 제약 힘이다. 특정 시간에 활성 상태인 &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;(제약)의 부분집합의 크기는 일반적으로 작고, 또한 실제로 이 경우만이 우리가 분석할 수 있기 때문에 이 경우에 집중할 것이다. 제약 다이나믹스 (5) 안의 &amp;lt;math&amp;gt;f^+&amp;lt;/math&amp;gt;를 치환하고 항들을 재배열하면 &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;a^1 = A (A+R)^{-1} a^* + R (A+R)^{-1} a^0&amp;lt;/math&amp;gt;가 된다. 따라서 제약된 가속도는 제약되지 않은 가속도와 참조(reference) 가속도 사이에서 보간된다. 특히, 한계 &amp;lt;math&amp;gt;R \to 0&amp;lt;/math&amp;gt; 에서는 우리는 강한 제약을 갖고 &amp;lt;math&amp;gt;a^1 = a^*&amp;lt;/math&amp;gt;이 되지만, &amp;lt;math&amp;gt;R \to \infty&amp;lt;/math&amp;gt;에서는 우리는 무한대로 부드러운 제약 (예: 제약 없음)을 갖고 &amp;lt;math&amp;gt;a^1 = a^0&amp;lt;/math&amp;gt;이다. 따라서 보간을 직접 제어하는 모델 파라미터를 도입하는 것이 자연스럽다. 우리는 이 파라미터를 ''임피던스(Impedance)''라고 부르고 &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;라고 표기한다. 이것은 &amp;lt;math&amp;gt;n_C &amp;lt;/math&amp;gt;차원의 벡터이고 각 요소별로 &amp;lt;math&amp;gt;0&amp;lt;d&amp;lt;1&amp;lt;/math&amp;gt;를 만족한다. 일단 이것이 지정되면, 우리는 정규화기(regularizer)의 대각 요소를 &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;R_{ii} = \frac{1-d_i}{d_i} \hat{A}_{ii}&amp;lt;/math&amp;gt;로 갖는다. 참고로 우리는 실제 &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; 행렬의 대각성분이 아니라 근사치를 사용하고 있다. 이것은 우리가 sparse solver나 inverse dynamics에서 A를 계산하고 싶지 않기 때문이다. 이 근사(대각 성분으로 제한된)는 모델이 초기 설정값 mjModel.qpos0일 때의 모든 &amp;quot;엔드 이펙터&amp;quot; body의 inertia, joint, tendon를 사용해서 구성된다. 이러한 수치는 컴파일러에서 계산된다. 만약 우리의 근사치가 정확하고, &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; 행렬 자체가 대각이라면, 각 스칼라 제약의 가속도는 &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;a^1_i = d_i a^*_i + (1-d_i) a^0_i&amp;lt;/math&amp;gt;을 만족할 것이고 우리는 원하는 보간 효과를 얻을 수 있을 것이다. 물론 이는 일반적으로 적용되는 것은 아니지만, 여기서의 목표는 제약 모델에 대한 합리적이고 직관적인 파라미터화를 구성하고 확장을 올바르게 수행하는 것이다.&lt;br /&gt;
&lt;br /&gt;
다음으로 참조(reference) 가속도의 계산 방법을 설명한다. 이미 언급한 바와 같이, ''damping(감쇠)'' 및 ''stiffness(강성)'' 계수에 의해 매개 변수화된 스프링 댐퍼 모델을 요소별로 사용한다:&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;a^*_i = -b_i (J v)_i - k_i r_i&amp;lt;/math&amp;gt;r은 위치 residual (elliptic cones의 마찰 차원과마찰 손실이 0인 경우) 이고, &amp;lt;math&amp;gt;Jv&amp;lt;/math&amp;gt;는 제약에 투영된 joint 속도임을 상기하자; index 표기는 투영된 속도 벡터의 한 성분을 참조한다.&lt;br /&gt;
&lt;br /&gt;
요약하면, 사용자는 임피던스 계수  &amp;lt;math&amp;gt;0&amp;lt;d&amp;lt;1&amp;lt;/math&amp;gt;, damping 계수 &amp;lt;math&amp;gt;b &amp;gt; 0&amp;lt;/math&amp;gt;과 stiffness 계수 &amp;lt;math&amp;gt;k &amp;gt; 0&amp;lt;/math&amp;gt; 들의 벡터를 지정한다. 그 뒤 위와 같이 &amp;lt;math&amp;gt;R, a^*&amp;lt;/math&amp;gt;는 MuJoCo에 의해 계산되고, 선택된 최적화 알고리즘이 문제 (4)를 풀기 위해 적용된다. Modeling 챕터의 Solver parameters 섹션에서 설명하듯이, MuJoCo는 임계 damping에 도달하도록 &amp;lt;math&amp;gt;d, b, k&amp;lt;/math&amp;gt; 설정을 위한 추가적인 자동화를 제공하거나, 거리에 따라 바뀌는 &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;를 통한 부드러운 contact 레이어를 제공한다.&lt;br /&gt;
&lt;br /&gt;
= 모델링 (Modeling) =&lt;br /&gt;
&lt;br /&gt;
== Solver 파라미터 (Solver parameters) ==&lt;br /&gt;
Computation 챕터의 Solver 파라미터 섹션에서 MuJoCo의 제약의 행동을 결정하는 수치 d, b, k의 수학적 알고리즘적 의미를 설명했다. 여기서 우리는 그것을 어떻게 설정하는지 설명한다.&lt;br /&gt;
&lt;br /&gt;
설정은 '제약'을 갖고 있는 모든 MJCF 요소의 solref와 solimp attribute에 의해 간접적으로 완료된다.&lt;br /&gt;
&lt;br /&gt;
이 파라미터들은 각 제약 또는 각 기본 클래스에 대해 조정되거나, 혹은 미설정 상태로 남겨둘 수 있다 - 그러면 MuJoCo는 아래에 나와 있는 내부 기본 값을 사용한다.&lt;br /&gt;
&lt;br /&gt;
참고로 option에서 오버라이드 메커니즘도 가능하다; 런타임에 모든 접촉과 관련된 solver 파라미터를 바꾸는데 사용될 수 있어, 파라미터 세팅이나 수치 최적화에서의 연속적인 방법을 동적으로 실험할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
여기서 우리는 한 개의 스칼라 제약에 초점을 둔다.&lt;br /&gt;
&lt;br /&gt;
Computation 챕터에서와 조금 다른 표기법을 사용하여,&lt;br /&gt;
&lt;br /&gt;
* a1을 가속도,&lt;br /&gt;
* v를 속도,&lt;br /&gt;
* r을 위치 또는 유수 (마찰 차원에서 0으로 정의된다),&lt;br /&gt;
* b와 k는 각각 스프링에서의 참조 가속도 aref = -b*v - k*r을 나타내기 위한 단단함, 댐핑을 나타낸다.&lt;br /&gt;
* d는 상수 응답(임피던스),&lt;br /&gt;
* a0은 제약 힘이 없을 때의 가속도라고 한다. (원래 가속도)&lt;br /&gt;
&lt;br /&gt;
앞서 분석에서 우리는 제약 공간에서의 다이나믹스가 대략 &lt;br /&gt;
&lt;br /&gt;
* a1 + d * (b v + k r) = (1 - d) * a0&lt;br /&gt;
* 가속도 + 상수 * (단단함 * 속도 + 댐핑 * 위치) = (1 - 상수) * 원래 가속도&lt;br /&gt;
&lt;br /&gt;
으로 나타냄을 밝혔다.&lt;br /&gt;
&lt;br /&gt;
다시, 유저가 조정할 수 있는 파라미터는 d, b, k(상수, 단단함, 댐핑) 이다. 나머지 양들은 시스템의 상태이며 각 시간 스텝에서 자동으로 계산된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
먼저 우리는 응답 상수 d에 대해 설명한다.&lt;br /&gt;
&lt;br /&gt;
* d는 반드시 0~1 사이여야 한다; 내부적으로 MuJoCo는 0.0001 ~ 0.9999로 자른다.&lt;br /&gt;
* 이것이 solver가 a0과 aref 사이를 상호작용 할 수 있게 해준다.&lt;br /&gt;
* 작은 d값은 부드럽고 약한 제약이고, 큰 d값은 강하고 딱딱한 제약이다.&lt;br /&gt;
* 유저는 d를 상수로 설정하거나, 아니면 위치 의존적인 함수 d(r)로 설정할 수 있다.&lt;br /&gt;
** 위치 의존적 응답은 물체 주변의 부드러운 접촉 레이어로 사용하거나, 혹은 큰 위반일수록 강해지는 equality 제약을 정의할 수 있다. (따라서 예제에서의 backlash를 근사할 수 있다)&lt;br /&gt;
** 함수 d(r)의 모양은 요소별로 정의할 수 있는 solimp 벡터 파라미터로 정의할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== solimp: real(5), &amp;quot;0.9 0.95 0.001 0.5 2&amp;quot; ===&lt;br /&gt;
다섯 개의 숫자는 (dmin, dmax, width, midpoint, power)이다. 이것은 함수 d(r)의 파라미터를 결정한다. (최소 d, 최대 d, 너비, 중간점, 차수)&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0 이전에서는 3개였으며, 거기에 함수의 형태를 결정하는 한 개의 추가 전역 옵션이 있었다.&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0에서는 이전 버전의 호환성을 유지하며 응답 함수를 확장했다.&lt;br /&gt;
&lt;br /&gt;
이전 버전에서 앞의 3개만 설정 가능했고, 기본값은 똑같다.&lt;br /&gt;
&lt;br /&gt;
뒤의 2개의 기본값은 이전 버전과 똑같은 함수의 모양 (시그모이드)를 생성한다.&lt;br /&gt;
&lt;br /&gt;
* 새롭게 정의된 뒤의 2개는 함수의 이동(shift)나 조여짐(skew)을 조정할 수 있다.&lt;br /&gt;
** 아래 그림은 사실은 두 반사된 시그모이드(???)를 보여주고 있으며, 이는 응답 함수 d(r)이 r의 절대값에 의존하기 때문이다.&lt;br /&gt;
** 이 유연성은 원격 접촉 힘에 대한 더 나은 조절을 하기 위해 추가되었으며, 또한 다른 제약을 위해서도 사용될 수 있다.&lt;br /&gt;
* (함수를 생성하기 위한 다항 스플라인의) 차수는 1과 같거나 커야한다.&lt;br /&gt;
* (반사 지점을 결정하는) 중간점은 0과 1 사이여야 하고, 단위는 너비이다.&lt;br /&gt;
** 참고로 차수가 1이면, 함수는 중간점과 관계 없는 선형이 된다.&lt;br /&gt;
&lt;br /&gt;
[[파일:Mj_impedance.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
이 그림은 가로 축의 r의 제약 위반에 대한 세로 축의 응답 d(r)를 보인다.&lt;br /&gt;
&lt;br /&gt;
* equality 제약에 대해서는, r은 제약 위반과 같다 (양수 또는 음수 가능).&lt;br /&gt;
* 마찰 손실 또는 타원뿔의 마찰 차원에 대해서는, r은 항상 0이다.&lt;br /&gt;
* 제한(limit), 타원뿔의 법선 방향, 사각뿔의 모든 법선 방향에 대해서는 r은 (제약 또는 접촉) 거리에서 제약이 활성화 되는 margin을 뺀 값이다; 접촉에 대해서 이 margin은 실제로 margin-gap이다.&lt;br /&gt;
** 따라서 제한과 접촉 제약은 r이 음수일 때 활성화된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음은 단단함 k와 댐핑 b에 대해 설명한다.&lt;br /&gt;
&lt;br /&gt;
여기에서의 아이디어는 위의 질량-스프링-댐퍼 시스템에서의 시상수와 댐핑 비율에 대한 파라미터의 재조정이다.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;시상수&amp;quot;에 의해 우리는 자연 주파수 / 댐핑 비율 의 평균을 구한다 (???)&lt;br /&gt;
&lt;br /&gt;
1차 다이나믹스를 가진 유수가 0인 제약이나 질량-스프링-댐퍼 분석은 적용하지 않는다 (???)&lt;br /&gt;
&lt;br /&gt;
그런 경우에는 시상수는 등속의 지수 감쇠에 대한 rate 이며 (???) 댐핑 비율은 무시된다.&lt;br /&gt;
&lt;br /&gt;
이 형식에서, MuJoCo 2.0은 단단함과 댐핑을 더 직접적으로 정의할 수 있는 2차 형식을 제공한다. (???)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== solref: real(2), &amp;quot;0.02 1&amp;quot; ===&lt;br /&gt;
이 속성은 숫자의 부호에 의해 두 가지의 형식으로 결정된다.&lt;br /&gt;
&lt;br /&gt;
* 두 숫자가 둘 다 양수이면 (timeconst, dampratio) = (시상수, 댐핑 비율)로 결정된다.&lt;br /&gt;
** 모든 MuJoCo에서 가능하다.&lt;br /&gt;
** 이 경우 우리는 적절한 스케일링 후 k, b를 계산하기 위해 질량-스프링-댐퍼 모델을 쓴다.&lt;br /&gt;
** 참고로 활성화된 (effective) 단단함 d(r)*k와 댐핑 d(r)*b는 거리 r에 대한 함수인 응답 d(r)에 의해 스케일 된다.&lt;br /&gt;
** 따라서 우리는 d에 대한 스케일링을 완전히 되돌리기 전까지는 지정된 질량-스프링-댐퍼 속성을 항상 만족할 수는 없다. (???)&lt;br /&gt;
** 하지만 스케일링을 완전히 되돌리는 것은 원하지 않을 것인데, 왜냐하면 그것은 상호작용 속성을 파괴할 것이고, 특히 제한 d=0이 더 이상 제약을 비활성화 하지 않는다.&lt;br /&gt;
** 대신에 우리는 단단함과 댐핑을 스케일하여, 댐핑 비율을 상수로 유지하고, d(r)이 작아짐에 따라 시상수를 증가시킨다.&lt;br /&gt;
** 스케일링 수식은&lt;br /&gt;
*** b = 2 / (dmax * timeconst)&lt;br /&gt;
*** 단단함 = 2 / (최대 d * 시상수)&lt;br /&gt;
*** k = d(r) / (dmax * dmax * timeconst * timeconst * dampratio * dampratio)&lt;br /&gt;
*** 댐핑 = d의 함수 / (최대 d의 제곱 * 시상수의 제곱 * 댐핑 비율의 제곱)&lt;br /&gt;
** 시상수 파라미터는 시뮬레이션 타임 스텝보다 최소 2배 이상 커야 한다.&lt;br /&gt;
*** 아니면 시스템은 산술 integrator에 대해 너무 단단할 것이고 (특히 오일러 integration) 불안정할 것이다.&lt;br /&gt;
*** 이건 내부적으로 지켜지며, refsafe를 false로 하면 무시할 수 있다.&lt;br /&gt;
** 댐핑 비율 파라미터는 보통 1로 설정한다. (치명적 댐핑???)&lt;br /&gt;
** 작은 값은 under-댐핑 또는 통통 튀는 제약이 될 것이고, 큰 값은 over-댐핑되는 제약이 될 것이다.&lt;br /&gt;
* 그 외는 (-stiffness, -damping) = (-단단함, -댐핑)으로 결정된다.&lt;br /&gt;
** MuJoCo 2.0에서 도입되었다.&lt;br /&gt;
** 이 것은 원상 회복(???, restitution)에 대한 더욱 직접적인 조정을 가능하게 한다.&lt;br /&gt;
** 우리는 여전히 조금 스케일링을 적용하므로 같은 숫자들이 다른 응답들에 대해 사용될 수 있지만, 더 이상 스케일링이 r에 의존하지 않고 두 숫자는 더 이상 상호작용하지 않는다.&lt;br /&gt;
** 스케일링 수식은&lt;br /&gt;
*** b = damping / dmax&lt;br /&gt;
*** 단단함 = 댐핑 / 최대 d&lt;br /&gt;
*** k = stiffness / (dmax * dmax)&lt;br /&gt;
*** 댐핑 = 단단함 / (최대 d의 제곱)&lt;br /&gt;
&lt;br /&gt;
== 액추에이터 길이 범위 (Actuator length range) ==&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0에서, mjModel.actuator_lengthrange 필드는 액추에이터의 구동 가능한 길이의 범위를 담고 있다 (혹은 더 정확하게, 액추에이터의 전달 가능 범위).&lt;br /&gt;
&lt;br /&gt;
이것은 밑에서 설명할 근육 액추에이터 시뮬레이션에 필요하다. 여기서는 actuator_lengthrange의 의미 및 설정법에 촛점을 맞춘다.&lt;br /&gt;
&lt;br /&gt;
정확한 물리적 혹은 기하학적 양인 mjModel의 다른 필드와는 다르게, actuator_lengthrange는 추정값이다.&lt;br /&gt;
&lt;br /&gt;
이 값은 직관적으로 생각하면 모델의 모든 &amp;quot;구동 가능한&amp;quot; 조합들에 대해서의 액추에이터의 전달력이 도달할 수 있는 길이를 의미한다.&lt;br /&gt;
&lt;br /&gt;
하지만 MuJoCo의 제약은 soft 방식이므로, 원칙상 어떤 조합도 구동 가능하다고 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이와 동시에 우리는 근육 모델링을 위해 잘 정의된 범위도 필요하다.&lt;br /&gt;
&lt;br /&gt;
이 범위를 정하기 위한 방법은 세 가지가 있다:&lt;br /&gt;
&lt;br /&gt;
* 모든 액추에이터에 새로운 속성값인 lengthrange 값을 명시적으로 제공한다.&lt;br /&gt;
* 액추에이터가 붙어 있는 joint나 tendon의 제한값으로부터 복사 해 온다.&lt;br /&gt;
* 아래에서 설명하는 대로, 자동으로 계산한다. 이 계산에는 많은 옵션들이 있고, XML option 노드의 lengthrange에서 설정 가능하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
액추에이터 길이 범위의 자동 계산은 컴파일 시간에 완료되고, 결과는 컴파일 된 모델의 mjModel.actuator_lengthrange에 저장된다.&lt;br /&gt;
&lt;br /&gt;
이 후 모델이 저장되면 (XML이나 MJB로), 다음 번 로딩에서 재계산이 필요 없다. 대규모 근골격 모델을 로드 할 때 컴파일러에서의 계산이 느려질 수 있기 때문에, 이 처리는 중요하다.&lt;br /&gt;
&lt;br /&gt;
이 계산만을 위해 컴파일러의 멀티스레딩 구현을 하였다(각각의 액추에이터에 대해 여러 스레드에서 병렬 처리). 이는 MuJoCo 라이브러리를 리눅스나 macOS에서 링크할 때 '-pthread' 플래그가 필요하게 된 이유이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
자동 계산은 수정된 물리 시뮬레이션에 의존한다.&lt;br /&gt;
&lt;br /&gt;
* 각각의 액추에이터에 대해서 우리는 힘(최소 길이를 계산할 때 음의 힘, 최대 길이를 계산할 때 양의 힘)을 액추에이터의 전달 가능 범위에 대해 적용하고,&lt;br /&gt;
* 시뮬레이션의 불안정성을 피하기 위해 댐핑된 환경 하에서 시뮬레이션을 진행하며,&lt;br /&gt;
* 안정될 때까지 충분한 시간을 주고, 결과를 기록한다.&lt;br /&gt;
&lt;br /&gt;
이는 모멘텀 하에서의 경사 하강법과 비슷하다. 실제로 우리는 명시적 경사(그라디언트) 기반 최적화 기법으로 실험도 해 보았지만, (주어진 여러 soft 제약 하에서) 무엇을 최적화 해야 하는지 명확하지 않다는 문제가 있었다.&lt;br /&gt;
&lt;br /&gt;
시뮬레이션을 사용하여, 우리는 본질적으로 물리 환경이 우리에게 무엇을 최적화해야 하는지 말하도록 한다.&lt;br /&gt;
&lt;br /&gt;
염두에 두어야 할 것은, 이것은 여전히 최적화 프로세스이며, 아마도 계산된 파라미터를 재조정 할 필요도 있을 것이다.&lt;br /&gt;
&lt;br /&gt;
우리는 대부분의 모델에서 동작할 보수적인 기본값을 제공하지만, 동작하지 않을 경우, 미세 조정을 위해 lengthrange 속성값을 이용하면 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 기능을 사용 할 때 모델의 기하학(geometry)를 염두에 두는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
여기에서의 암묵적 가정은 구동 가능한 액추에이터의 길이는 제한되어 있다는 것이다.&lt;br /&gt;
&lt;br /&gt;
게다가 우리는 접촉을 제한 요소로서 고려하지 않는다 (사실 우리는 이 시뮬레이션에서 접촉을 비롯해 정적(passive) 힘, 중력, 마찰 손실, 액추에이터 힘을 내부적으로 비활성화시킨다).&lt;br /&gt;
&lt;br /&gt;
그 이유는 접촉이 있는 모델은 얽힐 수 있고 많은 지역 최적해를 만들 수 있기 때문이다.&lt;br /&gt;
&lt;br /&gt;
따라서 액추에이터는 모델에 정의되어 있는 (이 시뮬레이션에서 활성화 되어 있는)관절 혹은 tendon의 제한, 또는 기하학(geometry)에 의해 제한되어야 한다.&lt;br /&gt;
&lt;br /&gt;
후자(기하학)를 설명하기 위해, 한 쪽은 world에, 다른 한 쪽은 world에 붙어 있는 힌지 관절 주변으로 회전하는 물체에 매달려 있는 tendon을 생각해보자.&lt;br /&gt;
&lt;br /&gt;
* 이 경우 tendon의 최소 및 최대 길이는 잘 정의된다.&lt;br /&gt;
** 공간에서 부착 점의 궤도가 그리는 원의 크기에 의존된다.&lt;br /&gt;
** 사용자에 의해 정의된 관절이나 tendon에 길이 제한이 없음에도 불구하고 말이다.&lt;br /&gt;
&lt;br /&gt;
그러나 만약 액추에이터가 관절 혹은 관절과 equal한 tendon 그 자체에 부착되어 있다면, 제한이 없어지게 된다.&lt;br /&gt;
&lt;br /&gt;
이런 경우는 컴파일러가 에러를 내지만, 에러의 이유가 길이가 수렴하지 않아서인지 아니면 액추에이터 길이가 무제한인지 말해줄 수는 없다.&lt;br /&gt;
&lt;br /&gt;
이 내용들은 너무 복잡하게 들리는데, 우리가 가능한 매우 특이한 경우를 설명하고 있기 때문이다.&lt;br /&gt;
&lt;br /&gt;
실제로(현실적으로)는 길이 범위는 거의 모든 경우에 spatial tendon에 붙은 근육 액추에이터에서 사용될 것이며, 또한 아마도 모델의 관절 제한이 있을 것이기 때문에, 효과적으로 근육 액추에이터의 길이를 잘 제한시킬 것이다.&lt;br /&gt;
&lt;br /&gt;
만약 어떤 모델에서 수렴 에러가 발생한다면, 아마 그 이유는 모델에 관절 제한을 넣는 것을 깜빡 했었을 것이다.&lt;br /&gt;
&lt;br /&gt;
== 근육 액추에이터 (Muscle Actuators) ==&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0에서, 우리는 생물학적 근육을 모델링하기 위한 도구를 제공한다. 최소한의 노력으로 근육을 추가하고 싶은 사용자는 액추에이터 섹션에 한 줄의 XML으로 구현할 수 있다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;actuator&amp;gt;&lt;br /&gt;
    &amp;lt;muscle name=&amp;quot;mymuscle&amp;quot; tendon=&amp;quot;mytendon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/actuator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
생물학적 근육은 서로 매우 달라 보이지만, 신기하게도 어떤 스케일링을 적용하면 전부 비슷한 형태로 움직인다. 우리의 기본 세팅은 그 스케일링을 적용하므로, 사용자는 파라미터 조정 없이도 쓸만한 근육 모델을 획득할 수 있다.&lt;br /&gt;
&lt;br /&gt;
당연히 더 상세한 모델은 이 섹션에서 설명할 파라미터들의 조정이 필요하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
근육 모델이 꽤 정교하지만, 여전히 MuJoCo 액추에이터의 한 타입으로 존재하며 다른 모든 액추에이터와 같은 컨벤션을 따른다.&lt;br /&gt;
&lt;br /&gt;
근육은 general을 사용하여 정의할 수 있지만, 단축어 muscle이 더욱 편리하다.&lt;br /&gt;
&lt;br /&gt;
다른 모든 액추에이터와 같이, 힘 생성 메커니즘과 전달 등은 독립적으로 정의된다. 그렇긴 하지만, 근육은 tendon 또는 관절에 부착되었을 때에만 (생물학)물리학적 의미를 갖는다.&lt;br /&gt;
&lt;br /&gt;
여기서는 tendon 에 부착되었다고 가정한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
먼저 우리는 길이와 길이 스케일링에 대해 설명한다.&lt;br /&gt;
&lt;br /&gt;
전달체 (예: MuJoCo tendon)의 구동 가능한 길이의 범위가 중요한 역할을 한다; 상단의 길이 범위 섹션을 참조하라.&lt;br /&gt;
&lt;br /&gt;
* 생체역학에서, 근육과 tendon은 일렬로 연결되어 근육-tendon 액추에이터를 구성한다.&lt;br /&gt;
* MuJoCo에서는 이와 다르다&lt;br /&gt;
** 공간적(spatial) 속성 (특히 길이와 속도)를 가진 것이 '''tendon'''이고&lt;br /&gt;
** tendon을 당기는 추상적 힘 생성 메커니즘을 의미하는 것이 '''근육'''이다.&lt;br /&gt;
&lt;br /&gt;
따라서 MuJoCo에서의 tendon 길이는, 생체역학에서의 근육+tendon 길이와 같다.&lt;br /&gt;
&lt;br /&gt;
* 여기서는 생물학적 tendon이 상수 길이 LT로 딱딱하게 고정되어 있다고 가정하고, 생물학적 근육 길이 LM은 시간에 따라 변한다고 취급한다.&lt;br /&gt;
* 따라서 MuJoCo의 tendon 길이는, 생물학적 tendon과 근육 길이의 합이다:&lt;br /&gt;
** actuator_length = LT + LM&lt;br /&gt;
** 액추에이터 길이 = 생물학적 tendon 길이(LT) + 생물학적 근육 길이(LM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
또 다른 중요한 상수는 근육의 휴식기 최적 길이(L0)이다.&lt;br /&gt;
&lt;br /&gt;
* 이는 근육이 속도가 0일 때, 동적 힘(active force)을 최대로 생성할 때의 근육 길이 LM이다.&lt;br /&gt;
&lt;br /&gt;
우리는 사용자에게 L0과 LT를 직접 묻지 않는다.&lt;br /&gt;
&lt;br /&gt;
* 왜냐하면 공간적 복잡성한 tendon의 경로 및 감쌈(wrapping) 조건 하에서 이 값들을 알아내는 것이 어렵기 때문이다.&lt;br /&gt;
* 대신 우리는 아래와 같이 L0과 LT를 계산한다.&lt;br /&gt;
* LT+LM(actuator_length)의 가용 범위는 계산은 위의 길이 범위 계산에서 언급했다.&lt;br /&gt;
* 여기에다가, 우리는 사용자에게 (여전히 모르는) 상수 L0으로 '''스케일 된''' 근육 길이 LM 의 가용 범위를 지정하도록 묻는다.&lt;br /&gt;
** 이것은 range 속성으로 정해지며, 기본 (스케일 된) 범위 값은 (0.75, 1.05) 이다.&lt;br /&gt;
* 이제 우리는 실제 및 스케일된 길이의 범위를 이용해서 두 상수 L0과 LT를 계산할 수 있다:&lt;br /&gt;
** (actuator_lengthrange[0] - LT) / L0 = range[0]&lt;br /&gt;
** (actuator_lengthrange[1] - LT) / L0 = range[1]&lt;br /&gt;
** (역주) 따라서 계산해 보면&lt;br /&gt;
** L0 = (actuator_lengthrange[1] - actuator_lengthrange[0]) / (range[1] - range[0])&lt;br /&gt;
** LT = ((actuator_lengthrange[0] * range[1]) - (actuator_lengthrange[1] * range[0])) / (range[1] - range[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
실행 시간에, 우리는 스케일 된 근육 길이와 속도를 다음과 같이 계산한다:&lt;br /&gt;
&lt;br /&gt;
* L = (actuator_length - LT) / L0&lt;br /&gt;
** L = LM / L0&lt;br /&gt;
* V = actuator_velocity / L0&lt;br /&gt;
&lt;br /&gt;
스케일 된 양의 장점은 그 표현 상태에서는 모든 근육이 비슷하게 움직인다.&lt;br /&gt;
&lt;br /&gt;
많은 실험 논문들에서 측정한 힘-길이-속도(Force-Length-Velocity, FLV) 함수에 의해 행동이 결정된다. 우리는 이 함수를 다음과 같이 근사한다:&lt;br /&gt;
&lt;br /&gt;
[[파일:Mujoco_Musclemodel.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
함수는 다음과 같이 구성된다.&lt;br /&gt;
&lt;br /&gt;
* FLV(L, V, act) = FL(L)*FV(V)*act + FP(L)&lt;br /&gt;
** FLV = (동적힘)길이 함수 * (동적힘)속도 함수 * 활성화도 + (정적힘)길이 함수&lt;br /&gt;
* MuJoCo 액추에이터의 일반적인 형태와 비교해 보면, FL*FV를 액추에이터 이득(gain)으로, FP를 액추에이터 편향(bias)로 볼 수 있다.&lt;br /&gt;
* FL은 길이에 대한 동적 힘이다.&lt;br /&gt;
* FV는 속도에 대한 동적 힘이다.&lt;br /&gt;
* 이들은 전체 동적 힘을 계산하기 위해 곱해진다(참고로 액추에이션 활성화도인 act에 의해 스케일링된다).&lt;br /&gt;
* FP는 활성화도와 관계 없이 항상 존재하는 정적 힘이다.&lt;br /&gt;
* FLV 함수의 출력은 스케일 된 근육의 힘이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
우리는 스케일 된 근육의 힘에 근육에 관한 상수 F0를 곱해 실제 힘을 얻는다:&lt;br /&gt;
&lt;br /&gt;
* actuator_force = -1 * FLV(L, V, act) * F0&lt;br /&gt;
* 음수 부호가 붙는 이유는 양의 활성화도는 근육의 당기는 힘을 생성하기 때문이다. (역주: 양수이면 물체를 밀어내고, 음수이면 물체를 당겨온다)&lt;br /&gt;
* 상수 F0는 속도가 0일 때, 동적 힘의 최대 값이다.&lt;br /&gt;
** 이는 근육의 두께와 상관이 있다. (예: 생리학적 단면적=PCSA)&lt;br /&gt;
** 값을 알고 있다면, muscle 요소의 force 속성으로 지정할 수 있다.&lt;br /&gt;
** 모른다면, 기본값인 -1로 지정해서, 밑에서 설명할 수식으로 계산하게 한다.&lt;br /&gt;
*** 이 경우, 우리는 큰 근육일 수록 더 큰 무게를 움직이는 관절에 대해 작용한다는 사실에 따른다. force 속성을 다음과 같이 계산한다:&lt;br /&gt;
*** F0 = scale / actuator_acc0&lt;br /&gt;
*** actuator_acc0 값은 모델 컴파일러에 의해 사전 계산된다.&lt;br /&gt;
**** 이는 액추에이터 전달에 대해 단위힘을 적용했을 때 발생하는 관절의 가속도의 norm이다.&lt;br /&gt;
**** 직관적으로 scale의 의미는, 근육의 실제 강도는 전체 모델의 기하학적 및 관성적 속성에 의존하기는 하지만 근육이 &amp;quot;평균적&amp;quot;으로 얼마나 강한지를 결정하는 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
우리는 지금까지 각각의 근육의 속성을 정의하는 3가지 상수를 마주했다: LT, L0, F0.&lt;br /&gt;
&lt;br /&gt;
게다가, FLV 함수 자체 또한 여러 파라미터를 갖고 있다: lmin, lmax, vmax, fpmax, fvmax.&lt;br /&gt;
&lt;br /&gt;
* 이 5가지 값들은 모든 근육에 대해 동일할 것이라 예상된다.&lt;br /&gt;
* 하지만 여러 다른 실험 논문들에서 다른 형태의 FLV 함수 형태를 제안하므로, 사용자가 그 논문에 익숙하다면 거기에 맞게 파라미터를 조정하고 싶을 것이다.&lt;br /&gt;
* 우리는 상단의 그림을 생성하고 우리가 어떻게 FLV 함수를 계산하는지 설명하는 MATLAB 함수 [http://www.mujoco.org/book/source/FLV.m FLV.m] 를 제공한다.&lt;br /&gt;
&lt;br /&gt;
더욱 정확한 FLV 함수를 설계하는 미션에 착수하기 전에, FLV 함수의 형태보다는 근육의 (스케일된) 가용 범위 (역주: range 속성 (lmin, lmax, lengthrange가 아님))가 더 큰 영향을 미친다는 사실을 생각하는게 좋을 것이고, 많은 경우에 이 파라미터들은 알려져 있지 않다.&lt;br /&gt;
&lt;br /&gt;
아래가 이를 묘사하는 그림이다.&lt;br /&gt;
&lt;br /&gt;
[[파일:Mj_musclerange.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
정규화된 FL 곡선에 각 근육의 가용 범위를 겹쳐 놓은 이 그림은 생체역학적 논문에서 흔한 형태이다 (수직 변위는 무시).&lt;br /&gt;
&lt;br /&gt;
우리의 기본 범위는 검정색으로 그려져 있다. 파란색 곡선은 두 팔 근육에 대한 실험 데이터이다.&lt;br /&gt;
&lt;br /&gt;
작은 범위, 큰 범위, FL 곡선의 상승 부분에의 범위, 하강 부분에의 범위, 혹은 둘 다에의 범위 등에 걸쳐 있는 근육들을 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
이제 50개의 근육을 갖고 있는 모델이 있다고 가정해보자. 정말 누군가가 너가 갖고 있는 그 모델의 모든 근육에 대한 작용 범위에 대해 그 근육이 뻗어 있는 관절들까지 생각해서 정성스럽게 실험하고 측정했을 것이라고 믿을 수 있나?&lt;br /&gt;
&lt;br /&gt;
믿을 수 없다면, 그냥 생체 시스템처럼 근골격 모델은 동일한 일반적 행동을 보인다고 생각하는 게 나을 것이다 - 어떤 연구 커뮤니티들은 큰 관심을 갖고 있는 세부 사항까지 포함해서.&lt;br /&gt;
&lt;br /&gt;
모델을 만든 사람이 상수(변하지 않는 수) 혹은 알려져 있다고 생각한 대부분의 근육 속성들에 대해서, 어떤 조건 하에서는 그 값들이 변하기도 한다는 것을 보이는 실험 논문들이 존재한다.&lt;br /&gt;
&lt;br /&gt;
이것은 사람들이 정확한 모델을 만드는 용기를 잃게 하려는 게 아니라, 사람들이 그러한 모델에 대해 강한 신념을 가지지 못하게 하려는 것이다.&lt;br /&gt;
&lt;br /&gt;
생물학계에서의 모델링은 물리학계 또는 공학계에서의 모델링과 매우 다르다... 이것이 로보틱스 하는 사람들이 정확한 로봇 모델을 만드는 것이 어렵다고 불평할 때 우리가 (속으로) 비꼬는 이유이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다시 우리 근육 모델의 근육 활성화도에 대한 얘기로 돌아오자. 이것은 입력이 제어 신호인 1차 비선형 필터의 상태이다. 필터 다이나믹스는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* d act / dt = (ctrl - act) / tau(ctrl, act)&lt;br /&gt;
* d 활성화도 / dt = (제어신호 - 활성화도) / tau(제어신호, 활성화도)&lt;br /&gt;
&lt;br /&gt;
내부적으로 제어 신호는 액추에이터의 제어 범위가 지정되어 있지 않더라도 [0, 1]으로 클램프 된다.&lt;br /&gt;
&lt;br /&gt;
여기에는 timeconst 속성으로 정의되는 두 개의 시상수가 있는데, timeconst = (tau_act, tau_deact)이고 기본 값은 (0.01, 0.04)이다. 실제 적용되는 시상수 tau는 다음과 같이 실행 시간에 결정된다.&lt;br /&gt;
&lt;br /&gt;
* if ctrl &amp;gt; act&lt;br /&gt;
** tau(ctrl, act) = tau_act * (0.5 + 1.5*act)&lt;br /&gt;
* else&lt;br /&gt;
** tau(ctrl, act) = tau_deact / (0.5 + 1.5*act)&lt;br /&gt;
&lt;br /&gt;
이제 우리는 muscle 요소에서 사용자가 그들의 익숙한 생체역학적 논문에 따르기 위해서 및 특정 모델에서의 더 정확한 측정값을 사용하여 조정하기 원할 것 같은 속성들을 정리한다.&lt;br /&gt;
&lt;br /&gt;
* Defaults&lt;br /&gt;
** 모든 곳에서 기본 값을 사용한다. 해야할 일은 이 장의 처음에서 보인 것처럼 tendon에 근육을 붙이는 것 뿐이다. 이것만으로도 꽤나 적절한 모델을 만들 수 있다.&lt;br /&gt;
* scale&lt;br /&gt;
** 각 근육의 강도는 모르지만 모든 근육을 강하거나 약하게 하고 싶을 때, scale을 조정하면 된다. 이것은 각각의 근육에 다르게 조정할 수 있지만, default 요소로 한 번에 모든 근육을 바꾸는 것이 더 적절할 것이다.&lt;br /&gt;
* force&lt;br /&gt;
** 만약 각 근육의 최대 동적 힘 F0을 알고 있다면, 여기에 입력하면 된다. 많은 실험 논문들이 이 데이터를 갖고 있다.&lt;br /&gt;
* range&lt;br /&gt;
** 근육의 동작 범위는 스케일된 길이이고 어떤 논문들에는 이 값도 적혀 있다. 그 (수많은 관절에 대해 작용하는 특정 근육에 대한) 측정 값들을 얼마나 믿을 수 있는지는 둘째치고, 어쨌든 적혀 있다. 참고로 range는 각 근육마다 대체적으로 다르다.&lt;br /&gt;
* timeconst&lt;br /&gt;
** 근육은 천천히 경련하는 섬유와 빠르게 경련하는 섬유의 조합이다(slow/fast-twitch fibers). 표준 적인 근육은 섞여 있지만, 어떤 근육들은 각 섬유 타입에 대한 비율이 다르기도 하여, 근육이 더 빠르게/느리게 움직이게 한다. 이것은 시상수를 조정하여 모델링할 수 있다. FLV 함수의 vmax 파라미터도 같이 적절하게 조정해야 할 것이다.&lt;br /&gt;
* lmin, lmax, vmax, fpmax, fvmax&lt;br /&gt;
** 이 파라미터들은 FLV 함수의 모양을 조정한다. 고급 사용자는 이 값을 바꿔가며 실험할 수 있다; MATLAB 함수 [http://www.mujoco.org/book/source/FLV.m FLV.m]을 참조하라. scale 세팅과 비슷하게, 모든 근육들에 대해 FLV 파라미터를 바꾸고 싶다면, default 요소에서 바꾸면 된다.&lt;br /&gt;
* Custom model&lt;br /&gt;
** 우리의 근육 모델의 파라미터를 바꾸는 대신, general 액추에이터의 gaintype, biastype, dyntype을 &amp;quot;user&amp;quot;로 바꾸고 실행 시간에 콜백을 제공함으로서 사용자는 다른 모델을 구현할 수 있다. 아니면, 이 타입 중에 일부는 &amp;quot;muscle&amp;quot;로 남겨 두어 우리 모델을 쓰고, 다른 요소만 교체할 수 있다. 참고로 tendon 기하학적 계산은 여전히 표준 MuJoCo 파이프라인에 의해 관리되어 사용자의 근육 모델에 actuator_length, actuator_velocity, actuator_lengthrange를 입력으로서 제공한다. 사용자 콜백은 부드러운 tendon의 모델링 등 우리가 무시하기로 한 기타 상세한 사항을 시뮬레이트하는데 쓰일 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== OpenSim과의 관계성 ===&lt;br /&gt;
&lt;br /&gt;
생체역학계의 연구자들이 사용하는 표준 소프트웨어는 OpenSim이다. 우리는 우리의 근육 모델을 훨씬 더 빠르고 안정적인 시뮬레이션을 하기 위해 조금 단순화하였지만, 그래도 가능한 OpenSim 모델과 비슷하도록 설계했다. MuJoCo 사용자가 OpenSim 모델을 변환하는 것을 돕기 위해, 우리는 비슷한 점과 차이점을 정리했다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
활성화 역학 모델은 기본 시상수값을 포함하여 OpenSim과 동일하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FLV 함수는 완전히 같지는 않지만, MuJoCo와 OpenSim은 같은 실험 데이터를 근사하므로, 매우 비슷하다. OpenSim 모델 및 관련된 실험 데이터의 요약에 대한 설명은 Millard et al, &amp;quot;Flexing computational muscle: modeling and simulation of musculotendon dynamics&amp;quot;, J Biomech Eng. 2013 Feb;135(2) 를 참조하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSim은 부드러운 tendon을 모델링 할 수 있지만 우리는 단단한 tendon을 가정했다. &lt;br /&gt;
&lt;br /&gt;
그 이유는 부드러운 tendon의 모델링은 빠른 평형 가정(fast-equilibrium assumptions)이 필요하며 이는 여러 트윅이 필요하고 따라서 시뮬레이션을 불안정하게 만든다.&lt;br /&gt;
&lt;br /&gt;
실제로 tendon은 꽤나 딱딱하며, 그 효과는 FL 곡선을 적절하게 잡아 늘림으로서 근사할 수 있다 (Zajac 89). 이는 MuJoCo의 근육 동작 범위(range)를 짧게 하는 것과 같다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
회전 각도 (예: 근육과 힘의 작용선 상의 각도)는 MuJoCo에서 모델링되지 않고 0으로 가정한다.&lt;br /&gt;
&lt;br /&gt;
이는 근육의 힘을 적절히 스케일 다운 하고 동작 범위를 조정함으로서 근사할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tendon 래핑은 MuJoCo에서 더욱 제약된다. 우리는 구와 무한 원기둥을 래핑 물체로 허용하고, tendon 경로 안의 고정된 site에 의해 두 물체가 분리되는 것을 요구한다.&lt;br /&gt;
&lt;br /&gt;
이는 tendon 경로 순차적 계산의 필요성을 피하기 위해서이다.&lt;br /&gt;
&lt;br /&gt;
또한 MuJoCo 2.0에서 우리는 구 또는 원기둥 내부에 위치해야 하는 &amp;quot;side sites&amp;quot;를 허용한다. 이는 tendon 경로가 특정 영역을 지나게 하기 위한 OpenSim의 토러스 래핑 물체를 대체할 수 있다.&lt;br /&gt;
&lt;br /&gt;
전체적으로, tendon 래핑은 OpenSim 모델에서 MuJoCo 모델으로 컨버팅 하기 가장 어려운 부분이며, 약간의 수작업이 필요하다.&lt;br /&gt;
&lt;br /&gt;
밝은 면으로는, 널리 쓰이는 고품질의 OpenSim 모델은 몇 개 없으며, 그것들이 컨버팅 되면 끝이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래에 MuJoCo 2.0에서 가능한 4가지 종류의 tendon 래핑을 묘사해 놓았다.&lt;br /&gt;
&lt;br /&gt;
참고로 래핑된 tendon의 곡선 부분은 직선으로 렌더링되지만, 기하학적 파이프라인은 실제 곡선에 맞게 동작하며, 그들의 길이와 모멘트를 해석적으로 계산한다.&lt;br /&gt;
&lt;br /&gt;
[[파일:Mj_tendonwraps.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
= XML 문서 (XML Reference) =&lt;br /&gt;
&lt;br /&gt;
=== actuator/muscle ===&lt;br /&gt;
이 요소는 근육 액추에이터 섹션에서 설명한 대로 근육 액추에이터를 모델링하기 위해 사용된다. &lt;br /&gt;
&lt;br /&gt;
* name: string, optional&lt;br /&gt;
** 요소 이름. 이름 요소 섹션 참고.&lt;br /&gt;
* class : string, optional&lt;br /&gt;
** 기본 클래스. 기본 설정 섹션 참고.&lt;br /&gt;
* group : int, &amp;quot;0&amp;quot;&lt;br /&gt;
** 액추에이터가 속할 정수 그룹. 이 요소는 커스텀 태그로 사용될 수 있다. 또한 visualizer에서 그룹별 액추에이터 렌더링 활성화/비활성화에도 쓰인다.&lt;br /&gt;
* ctrllimited : [false, true], &amp;quot;false&amp;quot;&lt;br /&gt;
** true: 이 액추에이터로의 제어 입력은 실행 시간에 ctrlrange 대로 클램핑된다.&lt;br /&gt;
** false: 클램핑 비활성화&lt;br /&gt;
** 참고로 option flag의 clampctrl 속성으로 제어 입력 클램핑을 전역 비활성화 할 수 있다.&lt;br /&gt;
* forcelimited : [false, true], &amp;quot;false&amp;quot;&lt;br /&gt;
* true: 이 액추에이터의 힘 출력은 실행 시간에 forcerange 대로 클램핑된다.&lt;br /&gt;
** false: 클램핑 비활성화&lt;br /&gt;
* ctrlrange : real(2), &amp;quot;0 0&amp;quot;&lt;br /&gt;
** 제어 입력의 클램핑 범위. 컴파일러는 첫 번째 값이 두 번째 값보다 작을 것이라 예상한다.&lt;br /&gt;
* forcerange : real(2), &amp;quot;0 0&amp;quot;&lt;br /&gt;
** 힘 출력의 클램핑 범위. 컴파일러는 첫 번째 값이 두 번째 값보다 작을 것이라 예상한다.&lt;br /&gt;
* lengthrange : real(2), &amp;quot;0 0&amp;quot;&lt;br /&gt;
** 액추에이터의 전달 길이의 실현 가능한 범위. Length Range 섹션 참고. (역주: 밑의 range와는 다르다. 여긴 정말 물리적으로 가능한 길이의 범위)&lt;br /&gt;
* gear : real(6), &amp;quot;1 0 0 0 0 0&amp;quot;&lt;br /&gt;
** 이 속성은 모든 전달 타입에 대해 액추에이터의 길이(따라서 모멘트의 팔, 속도 그리고 힘)을 스케일링 한다. 이는 힘 생성 메커니즘에서의 gain과는 다른데, gain은 힘 출력만을 스케일링하고, 길이, 모멘트의 팔, 속도에는 영향을 미치지 않기 때문이다. 스칼라 전달을 가진 액추에이터는, 벡터의 첫 번째 값만 사용된다. 나머지 값들은 3D 힘 및 토크 축을 지정하는데 쓰기 위해서 관절, 부모에서의 관절(jointinparent), site 전달 속성에는 필요하다.&lt;br /&gt;
* tendon : string, optional&lt;br /&gt;
** 지정되었다면, 주어진 tendon에 액추에이터가 작용한다. 액추에이터 길이는 tendon 길이 * 기어비 이다. Spatial 및 fixed tendond 둘 다에 사용할 수 있다.&lt;br /&gt;
* user : real(nuser_actuator), &amp;quot;0 ... 0&amp;quot;&lt;br /&gt;
** 사용자 파라미터 섹션 참고.&lt;br /&gt;
* timeconst : real(2), &amp;quot;0.01 0.04&amp;quot;&lt;br /&gt;
** 활성/비활성 다이나믹스를 위한 시상수이다.&lt;br /&gt;
* range : real(2), &amp;quot;0.75 1.05&amp;quot;&lt;br /&gt;
** L0 단위로 정의된 근육의 동작 범위. (역주: 위의 lengthrange와는 다르다. 설명상 근육의 동작 가능한 범위라고 나와 있기는 하지만, 거의 L0 및 LT의 계산을 위해 쓰이는 파라미터이다.)&lt;br /&gt;
* force : real, &amp;quot;-1&amp;quot;&lt;br /&gt;
** 휴식기 최대 동적 힘. 이 값이 음수이면, 최대 힘은 아래의 scale 속성에 의해 자동으로 결정된다.&lt;br /&gt;
* scale : real, &amp;quot;200&amp;quot;&lt;br /&gt;
** 만약 force 속성이 음수이면, 근육의 최대 동적 힘은 scale / mjModel.actuator_acc 으로 결정된다. mjModel.actuator_acc는 qpos0의 액추에이터 전달에 대해 단위 힘을 적용했을 때 발생하는 관절 공간의 가속도의 norm이다.&lt;br /&gt;
** 다시 말해, 스케일링 하면 근육의 최대 힘이 커지고 더 많은 무게를 당기게 한다.&lt;br /&gt;
* lmin : real, &amp;quot;0.5&amp;quot;&lt;br /&gt;
** L0으로 정규화된 FLV 곡선에서 최저 위치 범위.&lt;br /&gt;
* lmax : real, &amp;quot;1.6&amp;quot;&lt;br /&gt;
** L0으로 정규화된 FLV 곡선에서 최대 위치 범위.&lt;br /&gt;
* vmax : real, &amp;quot;1.5&amp;quot;&lt;br /&gt;
** L0/s으로 정규화된 근육의 힘이 0이 될 때의 수축 속도.&lt;br /&gt;
* fpmax : real, &amp;quot;1.3&amp;quot;&lt;br /&gt;
** lmax일때 생성되는 정적 힘. 휴식기 최대 힘과 관련이 있다.&lt;br /&gt;
* fvmax : real, &amp;quot;1.2&amp;quot;&lt;br /&gt;
** 포화 수축 속도일때 생성되는 동적 힘. 휴식기 최대 힘과 관련이 있다.&lt;br /&gt;
&lt;br /&gt;
== 그래서 range, lengthrange 등은 뭐가 다른거냐고? ==&lt;br /&gt;
&lt;br /&gt;
=== tendon ===&lt;br /&gt;
&lt;br /&gt;
* range: tendon의 물리적인 길이 제한. 이 길이 이상으로는 '''절대로''' 늘어날 수 없다.&lt;br /&gt;
&lt;br /&gt;
=== muscle ===&lt;br /&gt;
&lt;br /&gt;
* lengthrange: muscle의 가동 범위. tendon의 range와는 다르게, 이 근육이 '''물리 시뮬레이션의 제약을 바탕으로 최대로 늘어날 수 있는 길이'''를 줘야 한다. (팔에 달린 근육은, 팔의 관절 각도 이상으로 늘어날 수 없다.)&lt;br /&gt;
&lt;br /&gt;
* range: L0 단위로 정의된 근육의 동작 범위. '''근육 힘 특성인 L0과 LT의 계산을 위해 쓰인다.'''&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=208</id>
		<title>시놀로지 도커 설정</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=208"/>
		<updated>2021-10-14T16:14:54Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 외부 노출 서버 (시놀로지 VMM) ==&lt;br /&gt;
&lt;br /&gt;
* alpine-virt-3.11.3&lt;br /&gt;
&lt;br /&gt;
=== 역할 ===&lt;br /&gt;
&lt;br /&gt;
* 현재 IPv6 Cloudflare에 보고(갱신)&lt;br /&gt;
* 웹 프록시&lt;br /&gt;
&lt;br /&gt;
=== 마운트 설정 ===&lt;br /&gt;
&lt;br /&gt;
* alpine에 nfsmount 설치&lt;br /&gt;
** apk add nfsmount&lt;br /&gt;
* /etc/fstab에 다음 내용 추가&lt;br /&gt;
** 맨 뒤의 _netdev와 0 0을 꼭 추가해야 한다 (안하면 네트워크 연결 전에 마운트 시도해서 부팅 안 됨)&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
내부서버IP:/volume1/시놀로지폴더 /마운트경로 nfs nfsvers=3,rsize=524288,wsize=524288,ro,auto,nolock,_netdev 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare 연동 IP 등록 ===&lt;br /&gt;
&lt;br /&gt;
* 일본 특성상 IPv4 포트가 매우 제한적으로 열려 있고, 10000번대 밑으로는 아예 열리지도 않음&lt;br /&gt;
* IPv6는 이런 제한이 없음. 공유기가 각각의 머신에 뿌려주는 IP는 DHCP라기보다는 일본 인터넷에 직접 연결된 공인 IP.&lt;br /&gt;
** IPv6는 설계시부터 모든 기기가 고유의 공인 IP를 갖는 형태로 설계됨. 다만 그 특성상 보안에 취약하므로, 영구 IPv6 주소와 별개로 임시 IPv6가 부여되어, 수시로 주소가 바뀜.&lt;br /&gt;
** 주소 바뀜을 체크하여, Cloudflare DNS에 등록해 주는 역할 (v6 레코드인 AAAA를 업데이트 함)&lt;br /&gt;
** 다음 파일을 alpine 서버의 /etc/init.d에 저장. (파일 이름 cloudflare-alpine.service)&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
# $apk add python3&lt;br /&gt;
# $apk add py3-requests&lt;br /&gt;
# Copy this file into /etc/init.d/&lt;br /&gt;
# Test by $rc-service cloudflare-alpine.service start&lt;br /&gt;
# $rc-update add cloudflare-alpine.service&lt;br /&gt;
# $rc-service cloudflare-alpine.service restart&lt;br /&gt;
# $rc-update -u&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;Update Cloudflare DNS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
command=&amp;quot;/usr/bin/python3 /root/cloudflare-alpine.py&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;/var/run/cloudflare/cloudflare.pid&amp;quot;&lt;br /&gt;
command_background=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
        need net&lt;br /&gt;
        need nfsmount&lt;br /&gt;
        need sshd&lt;br /&gt;
        after iptables&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        ebegin &amp;quot;Starting cloudflare&amp;quot;&lt;br /&gt;
        mkdir -p /var/run/cloudflare || return 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;실제 업데이트를 수행하는 Python 파일을 위의 서비스 스크립트에 지정된 위치로 잘 저장&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_KEY = 'XXX'&lt;br /&gt;
CLOUDFLARE_ZONE_ID = 'XXX'&lt;br /&gt;
CLOUDFLARE_DNS_TOKEN = 'XXX'&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_HEADER = {&lt;br /&gt;
    'Authorization': 'Bearer {}'.format(CLOUDFLARE_DNS_TOKEN),&lt;br /&gt;
    'Content-Type': 'application/json'&lt;br /&gt;
}&lt;br /&gt;
DNS_GET_URL = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(CLOUDFLARE_ZONE_ID)&lt;br /&gt;
&lt;br /&gt;
device = 'eth0'&lt;br /&gt;
addr_file = '/tmp/cloudflare.addr6'&lt;br /&gt;
&lt;br /&gt;
def check():&lt;br /&gt;
    addr = ''&lt;br /&gt;
    try:&lt;br /&gt;
        with open(addr_file, 'r') as f:&lt;br /&gt;
            addr = f.read()&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    get_addr_cmd = &amp;quot;ip -6 addr list scope global $device | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v ' fd' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'deprecated' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'mngtmpaddr' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;head -n 2 | &amp;quot; \&lt;br /&gt;
                   &amp;quot;tail -n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    new_addr = os.popen(get_addr_cmd).read()&lt;br /&gt;
    new_addr = new_addr.split()[1]&lt;br /&gt;
    new_addr = new_addr.split('/')[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if addr == new_addr:&lt;br /&gt;
        print('same ip {}'.format(new_addr))&lt;br /&gt;
    else:&lt;br /&gt;
        r = requests.get(DNS_GET_URL, headers=CLOUDFLARE_HEADER)&lt;br /&gt;
        j = json.loads(r.text)&lt;br /&gt;
&lt;br /&gt;
        for item in j['result']:&lt;br /&gt;
            dns_put_url = DNS_GET_URL + '/' + item['id']&lt;br /&gt;
            new_data = dict(&lt;br /&gt;
                type=item['type'],&lt;br /&gt;
                name=item['name'],&lt;br /&gt;
                content=new_addr,&lt;br /&gt;
            )&lt;br /&gt;
            if item['type'] == 'AAAA':&lt;br /&gt;
                new_data['proxied'] = True&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
            elif item['type'] == 'TXT':&lt;br /&gt;
                new_data['content'] = 'v=spf1 {} ~all'.format(new_addr)&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
&lt;br /&gt;
        with open(addr_file, 'w') as f:&lt;br /&gt;
            f.write(new_addr)&lt;br /&gt;
            f.close()&lt;br /&gt;
        print('updated ip {}'.format(new_addr))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    check()&lt;br /&gt;
    sleep(60)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 그 후 서비스 등록&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
rc-update add cloudflare-alpine.service&lt;br /&gt;
rc-service cloudflare-alpine.service restart&lt;br /&gt;
rc-update -u&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 프록시 ===&lt;br /&gt;
&lt;br /&gt;
* Cloudflare로부터 오는 HTTPS 요청을 처리하여, 내부 서버에 전달&lt;br /&gt;
* 처음 도입 목적은 Cloudflare의 IPv6 over IPv4 기능을 이용하기 위함&lt;br /&gt;
* 생각해보니 외부/내부를 분리하여 보안성도 높아지고, 도커를 이용한 로드밸런서 구현 및 포트 번호 추상화가 가능해져 채택&lt;br /&gt;
* /etc/nginx/conf.d는 시놀로지에 config를 등록해 놓고 폴더째로 마운트&lt;br /&gt;
* wiki-proxy.conf 예시&lt;br /&gt;
** proxy_set_header를 설정해야 내부 서버에서 보이는 접속 요청 IP가 실제 사용자의 IP로 제대로 뜬다&lt;br /&gt;
** 내부 서버사이의 통신은 http로 하여 속도 향상 (방화벽 설정은 따로)&lt;br /&gt;
** TODO: upstream 요청 처리가 60초 이상 걸려도 취소 안 하게 설정하기? wiki의 restbase나 mathoid가 고장나는 이유가 이것 때문인 듯&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    listen   [::]:80;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
        &lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$server_name$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
	listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate pem파일;&lt;br /&gt;
    ssl_certificate_key key파일;&lt;br /&gt;
        &lt;br /&gt;
	server_name wiki.dong-min.kim;&lt;br /&gt;
    server_tokens off;&lt;br /&gt;
   &lt;br /&gt;
	location / {&lt;br /&gt;
        proxy_set_header  Host $host;&lt;br /&gt;
        proxy_set_header  X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header  X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header  Client-IP $remote_addr;&lt;br /&gt;
		proxy_pass http://내부 서버 주소:포트;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 웹 데몬 ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* HTTP 요청을 받아서&lt;br /&gt;
** 직접 처리(static)하거나&lt;br /&gt;
** PHP 인터프리터로 보내거나&lt;br /&gt;
** 다른 웹 데몬(Node.js, Python, ...)으로 다시 proxy한다&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/nginx&lt;br /&gt;
* 1.17.8-alpine&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** htpasswd -&amp;gt; (비공개)/htpasswd&lt;br /&gt;
** passwd -&amp;gt; /etc/passwd&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
** nginx/conf.d/ -&amp;gt; /etc/nginx/conf.d/&lt;br /&gt;
** nginx/nginx.conf -&amp;gt; /etc/nginx/nginx.conf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 ==&lt;br /&gt;
&lt;br /&gt;
=== PHP (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* PHP 데몬&lt;br /&gt;
* FPM(FastCGI Process Manager) 사용하여 동적 워커 생성&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 공식 레포지토리의 7.3.31-fpm-alpine3.14 기반&lt;br /&gt;
* 추가로 PHP 확장 기능을 설치하기 위해 Dockerfile 작성&lt;br /&gt;
** gd, mysqli, intl, @composer&lt;br /&gt;
* 이용한 라이브러리&lt;br /&gt;
** https://github.com/mlocati/docker-php-extension-installer&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9000&lt;br /&gt;
** 참고로 www.conf에서 다른 포트로 설정해도 php-fpm.d/zz-docker.conf에서 무조건 기본값으로 바꿈&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** php.ini -&amp;gt; /usr/local/etc/php/php.ini&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf.default&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
**php-패스wd -&amp;gt; /이티시/패스wd&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
==== php.ini 설정 ====&lt;br /&gt;
&lt;br /&gt;
* max_execution_time = 30&lt;br /&gt;
* max_input_time = 60&lt;br /&gt;
* memory_limit = 512M&lt;br /&gt;
* post_max_size = 10240M&lt;br /&gt;
* upload_max_filesize = 10240M&lt;br /&gt;
* default_socket_timeout = 30&lt;br /&gt;
* extension gd2, mysqli 활성화&lt;br /&gt;
&lt;br /&gt;
==== www.conf 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 여기 설정은 주로 미디어위키의 VisualEditor 확장 기능 + Math 수식 입력기를 사용할 때 Restbase 서버에 동시에 많은 요청을 보내는 것을 처리하기 위해 필요함&lt;br /&gt;
&lt;br /&gt;
* pm.max_children = 16&lt;br /&gt;
* pm.start_servers = 16&lt;br /&gt;
* pm.min_spare_servers = 16&lt;br /&gt;
* pm.max_spare_servers = 16&lt;br /&gt;
* pm.process_idle_timeout = 30s&lt;br /&gt;
&lt;br /&gt;
== 데이터베이스 ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 워드프레스, 미디어위키에 사용하기 위한 범용 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/mysql&lt;br /&gt;
* 5.7.29&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정 시작 번호-2):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** MySQL 실제 DB 파일 폴더 -&amp;gt; /var/lib/mysql/&lt;br /&gt;
** mysql.cnf -&amp;gt; /etc/mysql/conf.d/mysql.cnf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Cassandra (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API 백엔드 Restbase에서 사용하기 위한 고성능 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/cassandra/&lt;br /&gt;
* 3.11.6&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** Cassandra 실제 DB 파일 폴더 -&amp;gt; /var/lib/cassandra/&lt;br /&gt;
** Cassandra 설정 폴더 -&amp;gt; /etc/cassandra/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CASSANDRA_BROADCAST_ADDRESS = (호스트 주소 - 집 안의 NAS IP)&lt;br /&gt;
&lt;br /&gt;
==== cassandra-env.sh 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* MAX_HEAP_SIZE=&amp;quot;128M&amp;quot;&lt;br /&gt;
* HEAP_NEWSIZE=&amp;quot;20M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== cassandra.yaml 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* key_cache_size_in_mb: 0&lt;br /&gt;
* concurrent_reads: 2&lt;br /&gt;
* concurrent_writes: 2&lt;br /&gt;
* rpc_server_type: hsha&lt;br /&gt;
* rpc_min_threads: 1&lt;br /&gt;
* rpc_max_threads: 1&lt;br /&gt;
* concurrent_compactors: 1&lt;br /&gt;
* compaction_throughput_mb_per_sec: 0&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - Nginx 종속 ==&lt;br /&gt;
&lt;br /&gt;
=== 워드프레스 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 포트폴리오&lt;br /&gt;
* https://dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== wp-컨피그.php ====&lt;br /&gt;
&lt;br /&gt;
* FTPS 설정 (SFTP가 아니다)&lt;br /&gt;
* 프록시된 요청을 처리하기 위한 추가 설정&lt;br /&gt;
** $_SERVER['HTTPS']='on'; 구절만 있으면 된다&lt;br /&gt;
** 나머지는 프록시 서버 측의 설정이 잘못된 상태일 때 필요했었다&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FTP_HOST', '내부 서버 주소:내부 포트 번호');&lt;br /&gt;
define('FTP_USER', 'wp-ftps');&lt;br /&gt;
define('FTP_PASS', '');&lt;br /&gt;
define('FTP_SSL', true);&lt;br /&gt;
define('FTP_BASE', '(비공개)/wordpress/');&lt;br /&gt;
define('FTP_CONTENT_DIR', '(비공개)/wp-content/');&lt;br /&gt;
define('FTP_PLUGIN_DIR ', '(비공개)/wp-content/plugins/');&lt;br /&gt;
&lt;br /&gt;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')&lt;br /&gt;
    $_SERVER['HTTPS']='on';&lt;br /&gt;
    // define('RELOCATE', true); &lt;br /&gt;
    // define('WP_HOME', 'https://dong-min.kim');&lt;br /&gt;
    // define('WP_SITEURL', 'https://dong-min.kim');&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {&lt;br /&gt;
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 위키&lt;br /&gt;
* https://wiki.dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== 확장 기능 ====&lt;br /&gt;
&lt;br /&gt;
* VisualEditor, Math, SyntaxHighlight&lt;br /&gt;
** VisualEditor와 Math를 연동할 때, 수식 편집기에서 동적 업데이트 횟수에 비례해서 서버가 느려지는 현상 발생&lt;br /&gt;
** Math 확장 기능에서 제공하는 MWLatexNode.js가 수식이 업데이트 될 때마다 과거 기록을 지우지 않고 전부 갖고 있는 버그가 원인&lt;br /&gt;
** 그 기록들도 매 번 의미없는 업데이트를 하느라 서버가 느려짐&lt;br /&gt;
** 임시 해결 방법&lt;br /&gt;
*** Math 확장 기능의 modules/ve-math/ve.ce.MWLatexNode.js 파일의 맨 아래 쪽에 다음 항목을 추가하여, 강제 업데이트를 방지&lt;br /&gt;
*** 이거 해도 새로 고침은 하지만, 적어도 Mathoid 서버에 새로 요청 하지는 않는다 (캐시 사용)&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @inheritdoc ve.ce.GeneratedContentNode&lt;br /&gt;
 */&lt;br /&gt;
ve.ce.MWLatexNode.prototype.onGeneratedContentNodeUpdate = function ( staged ) {&lt;br /&gt;
	// 꼼수... this.root가 있을 때만 업데이트함&lt;br /&gt;
	// this.root가 있는 노드는 실제 글 속의 math 노드 (다이얼로그 속은 root 없음)&lt;br /&gt;
	if (this.root)&lt;br /&gt;
		this.update( undefined, staged );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Nginx config =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   ?????;&lt;br /&gt;
    listen   [::]:?????;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/wiki.access.log main;&lt;br /&gt;
    error_log /var/log/nginx/wiki.error.log;&lt;br /&gt;
&lt;br /&gt;
	charset utf-8;&lt;br /&gt;
	root ?????;&lt;br /&gt;
	index index.html index.htm index.php;&lt;br /&gt;
&lt;br /&gt;
	client_max_body_size 10240M;&lt;br /&gt;
	&lt;br /&gt;
    # Avoid 504 HTTP Timeout Errors&lt;br /&gt;
    proxy_connect_timeout       605;&lt;br /&gt;
    proxy_send_timeout          605;&lt;br /&gt;
    proxy_read_timeout          605;&lt;br /&gt;
    send_timeout                605;&lt;br /&gt;
    keepalive_timeout           605;&lt;br /&gt;
	fastcgi_read_timeout		605;&lt;br /&gt;
    &lt;br /&gt;
	location ~ ^/w/(index|load|thumb|opensearch_desc|api|rest|img_auth)\.php$ {&lt;br /&gt;
		include fastcgi.conf;&lt;br /&gt;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
		fastcgi_pass ?????:?????;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Images&lt;br /&gt;
	location /w/images {&lt;br /&gt;
		# Separate location for images/ so .php execution won't apply&lt;br /&gt;
		try_files $uri 404;		&lt;br /&gt;
	}&lt;br /&gt;
	location /w/images/deleted {&lt;br /&gt;
		# Deny access to deleted images folder&lt;br /&gt;
		deny all;&lt;br /&gt;
	}&lt;br /&gt;
	# MediaWiki assets (usually images)&lt;br /&gt;
	location ~ ^/w/resources/(assets|lib|src) {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
	# Assets, scripts and styles from skins and extensions&lt;br /&gt;
	location ~ ^/w/(skins|extensions)/.+\.(css|js|gif|jpg|jpeg|png|svg)$ {&lt;br /&gt;
		try_files $uri 404;&lt;br /&gt;
		add_header Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
		expires 7d;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# License and credits files&lt;br /&gt;
	location ~ ^/w/(COPYING|CREDITS)$ {&lt;br /&gt;
		default_type text/plain;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	## Uncomment the following code if you wish to use the installer/updater&lt;br /&gt;
	## installer/updater&lt;br /&gt;
	# location /w/mw-config/ {&lt;br /&gt;
	# 	# Do this inside of a location so it can be negated&lt;br /&gt;
	# 	location ~ \.php$ {&lt;br /&gt;
    #       include fastcgi.conf;&lt;br /&gt;
	# 		fastcgi_param SCRIPT_FILENAME $document_root/w/mw-config/$fastcgi_script_name;&lt;br /&gt;
	# 		fastcgi_pass ?????:????; # or whatever port your PHP-FPM listens on&lt;br /&gt;
	# 	}&lt;br /&gt;
	# }&lt;br /&gt;
	&lt;br /&gt;
	# Handling for Mediawiki REST API, see [[mw:API:REST_API]]&lt;br /&gt;
	location /w/rest.php/ {&lt;br /&gt;
		try_files $uri $uri/ /w/rest.php?$query_string;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Handling for the article path (pretty URLs)&lt;br /&gt;
	location /view/ {&lt;br /&gt;
		rewrite ^/view/(?&amp;lt;pagename&amp;gt;.*)$ /w/index.php;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Allow robots.txt in case you have one&lt;br /&gt;
	location = /robots.txt {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location = /favicon.ico {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	location / {&lt;br /&gt;
		rewrite ^/(.*)$ /view/$1 redirect;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocalSettings.php ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// ... (생략)&lt;br /&gt;
&lt;br /&gt;
$wgArticlePath = &amp;quot;/view/$1&amp;quot;;&lt;br /&gt;
$wgUsePathInfo = true;&lt;br /&gt;
$wgScriptExtension = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgMathValidModes[] = 'mathml';&lt;br /&gt;
$wgDefaultUserOptions['math'] = 'mathml';&lt;br /&gt;
$wgMathFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
$wgMathMathMLUrl = 'https://wiki-mathoid.dong-min.kim';&lt;br /&gt;
&lt;br /&gt;
# START VisualEditor Setting&lt;br /&gt;
$wgGroupPermissions['user']['writeapi'] = true;&lt;br /&gt;
wfLoadExtension( 'Parsoid', 'vendor/wikimedia/parsoid/extension.json' );&lt;br /&gt;
# END VisualEditor Setting&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Restbase (도커) ===&lt;br /&gt;
&lt;br /&gt;
* 이 Restbase를 비롯하여 아래의 Parsoid, Mathoid는 미디어위키에서 Visual Editor + Math 확장 기능을 사용하기 위해 설치함&lt;br /&gt;
* 원래 미디어위키에서 무료로 제공하는 기본 Restbase서버와 Mathoid 서버를 이용해도 되지만, 속도가 정말 '''&amp;lt;big&amp;gt;끔찍&amp;lt;/big&amp;gt;하게''' 느려서 직접 구축&lt;br /&gt;
* 제대로 된 문서가 없어서 구축 삽질 엄청 했다... 코드 안에 mediawiki url 하드코딩이 너무 많아 뭐가 문제인지 발견하기가 힘들었다&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API를 처리하기 위한 REST 처리 서버&lt;br /&gt;
* REST로 받은 요청을 내부 독립 서버 (Parsoid, Mathoid 등)에 전달 및 반환 결과 캐싱&lt;br /&gt;
* 기본 DB 세팅인 SQLite는 동시에 많은 요청이 들어오면 db파일이 죽는 경우가 있어서, Cassandra 세팅으로 바꿈&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-restbase&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):7231&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Parsoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Visual Editor 등에서 html &amp;lt;-&amp;gt; wikitext 간 변환 등을 위해 문서 실시간 파싱 등을 처리&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-parsoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):8000&lt;br /&gt;
** (비공개):8001&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Mathoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Math 확장 기능에서 사용&lt;br /&gt;
* LaTeX 문법을 svg, png 등으로 변환&lt;br /&gt;
* Node.js 10&lt;br /&gt;
* pm2로 서비스화 시킴&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-mathoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):10042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Deluge (토렌트) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 토렌트 서버&lt;br /&gt;
* 컨테이너를 완전히 OpenVPN으로 감싸서, VPN 등록이 되지 않은 상태에서는 네트워크 접속을 원천 차단&lt;br /&gt;
* *.ovpn 파일은 config 폴더에 넣으면 됨&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/binhex/arch-delugevpn&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (기본값)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config/ -&amp;gt; /config&lt;br /&gt;
** (자료 저장 폴더) -&amp;gt; /data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** NAME_SERVERS = 1.1.1.1&lt;br /&gt;
** LAN_NETWORK = 호스트의 아이피 말고 호스트의 서브넷 (xxx.xxx.xxx.xxx/xx)&lt;br /&gt;
** ENABLE_PRIVOXY = yes&lt;br /&gt;
** PGID = 100&lt;br /&gt;
** PUID = 1026&lt;br /&gt;
** VPN_PROV = custom&lt;br /&gt;
** VPN_ENABLED = yes&lt;br /&gt;
** HOME = /config/home&lt;br /&gt;
&lt;br /&gt;
=== Gitlab ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 사설 Git 서버&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-ce/&lt;br /&gt;
* 12.8.8&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
&lt;br /&gt;
==== gitlab.rb 설정 ====&lt;br /&gt;
&lt;br /&gt;
* external_url 'https://git.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['gitlab_ssh_host'] = 'kasumi.synology.me'&lt;br /&gt;
* gitlab_rails['time_zone'] = 'Asia/Seoul'&lt;br /&gt;
* gitlab_rails['gitlab_default_theme'] = 10  # dark(default) = 2, red = 9, light red = 10&lt;br /&gt;
* gitlab_rails['trusted_proxies'] = ['시놀로지IP', '프록시IP']&lt;br /&gt;
* gitlab_rails['gitlab_shell_ssh_port'] = 64100&lt;br /&gt;
* registry_external_url 'https://registry.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['registry_enabled'] = true&lt;br /&gt;
* unicorn['worker_processes'] = 2&lt;br /&gt;
* sidekiq['concurrency'] = 3  # default 25&lt;br /&gt;
* nginx['gzip_enabled'] = false&lt;br /&gt;
* nginx['listen_port'] = 80&lt;br /&gt;
* nginx['listen_https'] = false&lt;br /&gt;
* registry_nginx['enable'] = true&lt;br /&gt;
* registry_nginx['gzip_enabled'] = false&lt;br /&gt;
* registry_nginx['listen_port'] = 5005&lt;br /&gt;
* registry_nginx['listen_https'] = false&lt;br /&gt;
&lt;br /&gt;
=== Gitlab Runner ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* Gitlab의 CI/CD 실행용 Runner&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-runner/&lt;br /&gt;
* 12.8.0&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 파일 설정&lt;br /&gt;
** docker.sock -&amp;gt; /var/run/docker.sock&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab runner 설정 폴더 -&amp;gt; /etc/gitlab-runner&lt;br /&gt;
* 주의점&lt;br /&gt;
** 시놀로지 docker를 쓰려면 시놀로지의 docker.sock이 필요하다.&lt;br /&gt;
*** 먼저 시놀로지 측에서 sudo ln -s /var/run/docker.sock /volume1/docker/docker.sock 으로 심볼릭 링크 생성&lt;br /&gt;
*** Gitlab Runner 컨테이너 생성할 때 위 파일 링크가 안 됨&lt;br /&gt;
*** 먼저 아무 파일이나 링크해서 일단 컨테이너 생성&lt;br /&gt;
*** 컨테이너 설정 백업해서, 그 파일 안에서 링크 수정&lt;br /&gt;
*** 수정한 컨테이너 설정을 다시 로드&lt;br /&gt;
** 컨테이너 실행 후 gitlab-runner register 명령어로 gitlab 등록&lt;br /&gt;
&lt;br /&gt;
=== kb_apart (광규 외주) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 광규 외주 프로그램 - 아파트 시세 확인&lt;br /&gt;
&lt;br /&gt;
* gliderlabs/alpine:3.3 기반 (glibc 설치용)&lt;br /&gt;
* Miniconda3 설치&lt;br /&gt;
* Python 3.7.5 + Flask&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-kb-apart-src&lt;br /&gt;
* 도커 레포지토리 없음 (비공개 코드)&lt;br /&gt;
** tar 파일로 직접 업로드&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):5000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** 법정동.txt -&amp;gt; /var/lib/kb_apart/utils/법정동.txt&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CONDA_ENV_NAME = kb_apart&lt;br /&gt;
&lt;br /&gt;
=== Internet Speed Logger (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 일정 주기마다 Speedtest 사이트로 속도 측정해서 그래프로 표시&lt;br /&gt;
* 자꾸 집 인터넷 QoS 걸리는 것 같아서 설치함&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/vkentta/internet-speed-logger&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):3000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** internet speed logger 설정 폴더 -&amp;gt; /usr/src/app/data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CHECK_PERIOD_MINUTES = 30&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - 독립형 ==&lt;br /&gt;
&lt;br /&gt;
=== busybox (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 게스트 관점에서 바라보는 파일 권한 확인, 간단한 명령어 (curl이나 ping 등) 실행용&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/busybox&lt;br /&gt;
* 1.31.1-glibc&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (없음)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== openvpn (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* OpenVPN Client 를 수행해서, 그 결과를 SOCKS5 프록시 서버로 통신 가능&lt;br /&gt;
* OpenVPN to SOCKS5/HTTP Proxy Docker Image&lt;br /&gt;
* 시놀로지 도커에서 자꾸 IPV6 설정 실패하니, ovpn 파일 안의&lt;br /&gt;
** ovpn 파일 안에 proto udp를 proto udp4로&lt;br /&gt;
** setenv UV_IPV6 yes 주석처리&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://registry.hub.docker.com/r/curve25519xsalsa20poly1305/openvpn/&lt;br /&gt;
* latest&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):1080 tcp&lt;br /&gt;
** (비공개):1080 udp&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** (openvpn 설정폴더)/vpn -&amp;gt; /vpn&lt;br /&gt;
** /dev/net/tun -&amp;gt; /dev/net/tun (필요없을수도?)&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** OPENVPN_CONFIG = /vpn/설정파일.ovpn&lt;br /&gt;
&lt;br /&gt;
== 권한 관련 팁 ==&lt;br /&gt;
Nginx, PHP의 404 Not found 오류는 권한 문제일 때가 많다. 도커에서 실행중이라고 했을 때 살펴볼 것은&lt;br /&gt;
&lt;br /&gt;
* 컨테이너 내에서 Nginx나 PHP를 실행하고 있는 uid는 무엇인가?&lt;br /&gt;
** 해당 uid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* uid가 속해 있는 그룹 확인 (gid)&lt;br /&gt;
** 해당 gid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* 권한이 있는데도 접근이 안 되는 경우&lt;br /&gt;
** 루트 디렉터리에서부터 시작해서, 해당 파일이 있는 디렉터리까지의 경로까지 중에서 현재 uid 또는 gid로 '''실행 권한'''을 얻을 수 있는지 확인할 것.&lt;br /&gt;
** 읽기, 쓰기 권한이 아니라 실행 권한이다.&lt;br /&gt;
* 겉으로 보기에는 같은 www-data이더라도 컨테이너에 따라 id는 다를 수 있다.&lt;br /&gt;
* 시놀로지의 경우 NFS 서버로 마운트한 클라이언트에서 본 권한과도 다를 수 있기 때문에 주의&lt;br /&gt;
* LDAP 설정해서 동기화 하려 했으나 귀찮아서 일단 보류&lt;br /&gt;
&lt;br /&gt;
== 집 Docker Swarm 삽질 ==&lt;br /&gt;
&lt;br /&gt;
=== GUI 프로그램 ===&lt;br /&gt;
&lt;br /&gt;
==== Portainer (9000) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** '''터미널 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** gitlab 레지스트리 목록 보기 불가&lt;br /&gt;
** 이미지에서 마우스로 컨테이너 실행 불가&lt;br /&gt;
&lt;br /&gt;
==== Swarmpit (888) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** gitlab 레지스트리 목록 보기 가능&lt;br /&gt;
** '''이미지에서 마우스로 컨테이너 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** 터미널 실행 불가&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=207</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=207"/>
		<updated>2021-09-30T11:40:24Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* ffmpeg에서 사진 모음을 영상으로 만들기&lt;br /&gt;
** ffmpeg -r 10 -pattern_type glob -i 'bvp_x_y_*.png' -vf fps=60,scale=1280:-2 -pix_fmt yuv420p result.mp4&lt;br /&gt;
** r은 초당 몇 개를 보여줄 것인가&lt;br /&gt;
** pattern_type glob -i 는 입력 파일 패턴&lt;br /&gt;
** fps는 fps&lt;br /&gt;
** scale은 1280으로 만들고, 다음이 -1이면 세로 자동 결정, -2면 세로를 짝수로 만들어 줌&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기/압축풀기&lt;br /&gt;
** 압축: tar -zcvf data.tar.gz ./data&lt;br /&gt;
** 풀기: tar -xvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** 압축: tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
** 풀기: tar --use-compress-prog=pbzip2 -xvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=206</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=206"/>
		<updated>2021-08-03T06:54:51Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기/압축풀기&lt;br /&gt;
** 압축: tar -zcvf data.tar.gz ./data&lt;br /&gt;
** 풀기: tar -xvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** 압축: tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
** 풀기: tar --use-compress-prog=pbzip2 -xvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=205</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=205"/>
		<updated>2021-08-03T05:59:30Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 압축하기&lt;br /&gt;
** tar -zcvf data.tar.gz ./data&lt;br /&gt;
* 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)&lt;br /&gt;
** apt install pbzip2&lt;br /&gt;
** tar --use-compress-prog=pbzip2 -cvf  data.tar.bz2 ./data&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=204</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=204"/>
		<updated>2021-07-22T07:53:46Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&lt;br /&gt;
* 그냥 돌리던거 screen에서 돌리기&lt;br /&gt;
** 먼저 screen 띄운다&lt;br /&gt;
** echo 0 &amp;gt; /proc/sys/kernel/yama/ptrace_scope&lt;br /&gt;
** reptyr (대상 프로그램 pid)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=203</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=203"/>
		<updated>2021-07-19T14:38:03Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
*** 이거 하는 순간 gnome-session-failed 나올 것임..&lt;br /&gt;
*** gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=202</id>
		<title>시놀로지 도커 설정</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=202"/>
		<updated>2021-04-08T05:06:26Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 외부 노출 서버 (시놀로지 VMM) ==&lt;br /&gt;
&lt;br /&gt;
* alpine-virt-3.11.3&lt;br /&gt;
&lt;br /&gt;
=== 역할 ===&lt;br /&gt;
&lt;br /&gt;
* 현재 IPv6 Cloudflare에 보고(갱신)&lt;br /&gt;
* 웹 프록시&lt;br /&gt;
&lt;br /&gt;
=== 마운트 설정 ===&lt;br /&gt;
&lt;br /&gt;
* alpine에 nfsmount 설치&lt;br /&gt;
** apk add nfsmount&lt;br /&gt;
* /etc/fstab에 다음 내용 추가&lt;br /&gt;
** 맨 뒤의 _netdev와 0 0을 꼭 추가해야 한다 (안하면 네트워크 연결 전에 마운트 시도해서 부팅 안 됨)&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
내부서버IP:/volume1/시놀로지폴더 /마운트경로 nfs nfsvers=3,rsize=524288,wsize=524288,ro,auto,nolock,_netdev 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare 연동 IP 등록 ===&lt;br /&gt;
&lt;br /&gt;
* 일본 특성상 IPv4 포트가 매우 제한적으로 열려 있고, 10000번대 밑으로는 아예 열리지도 않음&lt;br /&gt;
* IPv6는 이런 제한이 없음. 공유기가 각각의 머신에 뿌려주는 IP는 DHCP라기보다는 일본 인터넷에 직접 연결된 공인 IP.&lt;br /&gt;
** IPv6는 설계시부터 모든 기기가 고유의 공인 IP를 갖는 형태로 설계됨. 다만 그 특성상 보안에 취약하므로, 영구 IPv6 주소와 별개로 임시 IPv6가 부여되어, 수시로 주소가 바뀜.&lt;br /&gt;
** 주소 바뀜을 체크하여, Cloudflare DNS에 등록해 주는 역할 (v6 레코드인 AAAA를 업데이트 함)&lt;br /&gt;
** 다음 파일을 alpine 서버의 /etc/init.d에 저장. (파일 이름 cloudflare-alpine.service)&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
# $apk add python3&lt;br /&gt;
# $apk add py3-requests&lt;br /&gt;
# Copy this file into /etc/init.d/&lt;br /&gt;
# Test by $rc-service cloudflare-alpine.service start&lt;br /&gt;
# $rc-update add cloudflare-alpine.service&lt;br /&gt;
# $rc-service cloudflare-alpine.service restart&lt;br /&gt;
# $rc-update -u&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;Update Cloudflare DNS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
command=&amp;quot;/usr/bin/python3 /root/cloudflare-alpine.py&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;/var/run/cloudflare/cloudflare.pid&amp;quot;&lt;br /&gt;
command_background=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
        need net&lt;br /&gt;
        need nfsmount&lt;br /&gt;
        need sshd&lt;br /&gt;
        after iptables&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        ebegin &amp;quot;Starting cloudflare&amp;quot;&lt;br /&gt;
        mkdir -p /var/run/cloudflare || return 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;실제 업데이트를 수행하는 Python 파일을 위의 서비스 스크립트에 지정된 위치로 잘 저장&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_KEY = 'XXX'&lt;br /&gt;
CLOUDFLARE_ZONE_ID = 'XXX'&lt;br /&gt;
CLOUDFLARE_DNS_TOKEN = 'XXX'&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_HEADER = {&lt;br /&gt;
    'Authorization': 'Bearer {}'.format(CLOUDFLARE_DNS_TOKEN),&lt;br /&gt;
    'Content-Type': 'application/json'&lt;br /&gt;
}&lt;br /&gt;
DNS_GET_URL = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(CLOUDFLARE_ZONE_ID)&lt;br /&gt;
&lt;br /&gt;
device = 'eth0'&lt;br /&gt;
addr_file = '/tmp/cloudflare.addr6'&lt;br /&gt;
&lt;br /&gt;
def check():&lt;br /&gt;
    addr = ''&lt;br /&gt;
    try:&lt;br /&gt;
        with open(addr_file, 'r') as f:&lt;br /&gt;
            addr = f.read()&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    get_addr_cmd = &amp;quot;ip -6 addr list scope global $device | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v ' fd' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'deprecated' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'mngtmpaddr' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;head -n 2 | &amp;quot; \&lt;br /&gt;
                   &amp;quot;tail -n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    new_addr = os.popen(get_addr_cmd).read()&lt;br /&gt;
    new_addr = new_addr.split()[1]&lt;br /&gt;
    new_addr = new_addr.split('/')[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if addr == new_addr:&lt;br /&gt;
        print('same ip {}'.format(new_addr))&lt;br /&gt;
    else:&lt;br /&gt;
        r = requests.get(DNS_GET_URL, headers=CLOUDFLARE_HEADER)&lt;br /&gt;
        j = json.loads(r.text)&lt;br /&gt;
&lt;br /&gt;
        for item in j['result']:&lt;br /&gt;
            dns_put_url = DNS_GET_URL + '/' + item['id']&lt;br /&gt;
            new_data = dict(&lt;br /&gt;
                type=item['type'],&lt;br /&gt;
                name=item['name'],&lt;br /&gt;
                content=new_addr,&lt;br /&gt;
            )&lt;br /&gt;
            if item['type'] == 'AAAA':&lt;br /&gt;
                new_data['proxied'] = True&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
            elif item['type'] == 'TXT':&lt;br /&gt;
                new_data['content'] = 'v=spf1 {} ~all'.format(new_addr)&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
&lt;br /&gt;
        with open(addr_file, 'w') as f:&lt;br /&gt;
            f.write(new_addr)&lt;br /&gt;
            f.close()&lt;br /&gt;
        print('updated ip {}'.format(new_addr))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    check()&lt;br /&gt;
    sleep(60)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 그 후 서비스 등록&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
rc-update add cloudflare-alpine.service&lt;br /&gt;
rc-service cloudflare-alpine.service restart&lt;br /&gt;
rc-update -u&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 프록시 ===&lt;br /&gt;
&lt;br /&gt;
* Cloudflare로부터 오는 HTTPS 요청을 처리하여, 내부 서버에 전달&lt;br /&gt;
* 처음 도입 목적은 Cloudflare의 IPv6 over IPv4 기능을 이용하기 위함&lt;br /&gt;
* 생각해보니 외부/내부를 분리하여 보안성도 높아지고, 도커를 이용한 로드밸런서 구현 및 포트 번호 추상화가 가능해져 채택&lt;br /&gt;
* /etc/nginx/conf.d는 시놀로지에 config를 등록해 놓고 폴더째로 마운트&lt;br /&gt;
* wiki-proxy.conf 예시&lt;br /&gt;
** proxy_set_header를 설정해야 내부 서버에서 보이는 접속 요청 IP가 실제 사용자의 IP로 제대로 뜬다&lt;br /&gt;
** 내부 서버사이의 통신은 http로 하여 속도 향상 (방화벽 설정은 따로)&lt;br /&gt;
** TODO: upstream 요청 처리가 60초 이상 걸려도 취소 안 하게 설정하기? wiki의 restbase나 mathoid가 고장나는 이유가 이것 때문인 듯&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    listen   [::]:80;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
        &lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$server_name$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
	listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate pem파일;&lt;br /&gt;
    ssl_certificate_key key파일;&lt;br /&gt;
        &lt;br /&gt;
	server_name wiki.dong-min.kim;&lt;br /&gt;
    server_tokens off;&lt;br /&gt;
   &lt;br /&gt;
	location / {&lt;br /&gt;
        proxy_set_header  Host $host;&lt;br /&gt;
        proxy_set_header  X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header  X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header  Client-IP $remote_addr;&lt;br /&gt;
		proxy_pass http://내부 서버 주소:포트;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 웹 데몬 ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* HTTP 요청을 받아서&lt;br /&gt;
** 직접 처리(static)하거나&lt;br /&gt;
** PHP 인터프리터로 보내거나&lt;br /&gt;
** 다른 웹 데몬(Node.js, Python, ...)으로 다시 proxy한다&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/nginx&lt;br /&gt;
* 1.17.8-alpine&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** htpasswd -&amp;gt; (비공개)/htpasswd&lt;br /&gt;
** passwd -&amp;gt; /etc/passwd&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
** nginx/conf.d/ -&amp;gt; /etc/nginx/conf.d/&lt;br /&gt;
** nginx/nginx.conf -&amp;gt; /etc/nginx/nginx.conf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 ==&lt;br /&gt;
&lt;br /&gt;
=== PHP (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* PHP 데몬&lt;br /&gt;
* FPM(FastCGI Process Manager) 사용하여 동적 워커 생성&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 공식 레포지토리의 7.2.9-fpm-alpine 기반&lt;br /&gt;
* 추가로 PHP 확장 기능을 설치하기 위해 Dockerfile 작성&lt;br /&gt;
** gd, mysqli&lt;br /&gt;
* 이용한 라이브러리&lt;br /&gt;
** https://github.com/mlocati/docker-php-extension-installer&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9000&lt;br /&gt;
** 참고로 www.conf에서 다른 포트로 설정해도 php-fpm.d/zz-docker.conf에서 무조건 기본값으로 바꿈&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** php.ini -&amp;gt; /usr/local/etc/php/php.ini&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf.default&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
==== php.ini 설정 ====&lt;br /&gt;
&lt;br /&gt;
* max_execution_time = 30&lt;br /&gt;
* max_input_time = 60&lt;br /&gt;
* memory_limit = 512M&lt;br /&gt;
* post_max_size = 10240M&lt;br /&gt;
* upload_max_filesize = 10240M&lt;br /&gt;
* default_socket_timeout = 30&lt;br /&gt;
* extension gd2, mysqli 활성화&lt;br /&gt;
&lt;br /&gt;
==== www.conf 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 여기 설정은 주로 미디어위키의 VisualEditor 확장 기능 + Math 수식 입력기를 사용할 때 Restbase 서버에 동시에 많은 요청을 보내는 것을 처리하기 위해 필요함&lt;br /&gt;
&lt;br /&gt;
* pm.max_children = 16&lt;br /&gt;
* pm.start_servers = 16&lt;br /&gt;
* pm.min_spare_servers = 16&lt;br /&gt;
* pm.max_spare_servers = 16&lt;br /&gt;
* pm.process_idle_timeout = 30s&lt;br /&gt;
&lt;br /&gt;
== 데이터베이스 ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 워드프레스, 미디어위키에 사용하기 위한 범용 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/mysql&lt;br /&gt;
* 5.7.29&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정 시작 번호-2):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** MySQL 실제 DB 파일 폴더 -&amp;gt; /var/lib/mysql/&lt;br /&gt;
** mysql.cnf -&amp;gt; /etc/mysql/conf.d/mysql.cnf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Cassandra (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API 백엔드 Restbase에서 사용하기 위한 고성능 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/cassandra/&lt;br /&gt;
* 3.11.6&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** Cassandra 실제 DB 파일 폴더 -&amp;gt; /var/lib/cassandra/&lt;br /&gt;
** Cassandra 설정 폴더 -&amp;gt; /etc/cassandra/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CASSANDRA_BROADCAST_ADDRESS = (호스트 주소 - 집 안의 NAS IP)&lt;br /&gt;
&lt;br /&gt;
==== cassandra-env.sh 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* MAX_HEAP_SIZE=&amp;quot;128M&amp;quot;&lt;br /&gt;
* HEAP_NEWSIZE=&amp;quot;20M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== cassandra.yaml 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* key_cache_size_in_mb: 0&lt;br /&gt;
* concurrent_reads: 2&lt;br /&gt;
* concurrent_writes: 2&lt;br /&gt;
* rpc_server_type: hsha&lt;br /&gt;
* rpc_min_threads: 1&lt;br /&gt;
* rpc_max_threads: 1&lt;br /&gt;
* concurrent_compactors: 1&lt;br /&gt;
* compaction_throughput_mb_per_sec: 0&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - Nginx 종속 ==&lt;br /&gt;
&lt;br /&gt;
=== 워드프레스 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 포트폴리오&lt;br /&gt;
* https://dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== wp-컨피그.php ====&lt;br /&gt;
&lt;br /&gt;
* FTPS 설정 (SFTP가 아니다)&lt;br /&gt;
* 프록시된 요청을 처리하기 위한 추가 설정&lt;br /&gt;
** $_SERVER['HTTPS']='on'; 구절만 있으면 된다&lt;br /&gt;
** 나머지는 프록시 서버 측의 설정이 잘못된 상태일 때 필요했었다&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FTP_HOST', '내부 서버 주소:내부 포트 번호');&lt;br /&gt;
define('FTP_USER', 'wp-ftps');&lt;br /&gt;
define('FTP_PASS', '');&lt;br /&gt;
define('FTP_SSL', true);&lt;br /&gt;
define('FTP_BASE', '(비공개)/wordpress/');&lt;br /&gt;
define('FTP_CONTENT_DIR', '(비공개)/wp-content/');&lt;br /&gt;
define('FTP_PLUGIN_DIR ', '(비공개)/wp-content/plugins/');&lt;br /&gt;
&lt;br /&gt;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')&lt;br /&gt;
    $_SERVER['HTTPS']='on';&lt;br /&gt;
    // define('RELOCATE', true); &lt;br /&gt;
    // define('WP_HOME', 'https://dong-min.kim');&lt;br /&gt;
    // define('WP_SITEURL', 'https://dong-min.kim');&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {&lt;br /&gt;
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 위키&lt;br /&gt;
* https://wiki.dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== 확장 기능 ====&lt;br /&gt;
&lt;br /&gt;
* VisualEditor, Math, SyntaxHighlight&lt;br /&gt;
** VisualEditor와 Math를 연동할 때, 수식 편집기에서 동적 업데이트 횟수에 비례해서 서버가 느려지는 현상 발생&lt;br /&gt;
** Math 확장 기능에서 제공하는 MWLatexNode.js가 수식이 업데이트 될 때마다 과거 기록을 지우지 않고 전부 갖고 있는 버그가 원인&lt;br /&gt;
** 그 기록들도 매 번 의미없는 업데이트를 하느라 서버가 느려짐&lt;br /&gt;
** 임시 해결 방법&lt;br /&gt;
*** Math 확장 기능의 modules/ve-math/ve.ce.MWLatexNode.js 파일의 맨 아래 쪽에 다음 항목을 추가하여, 강제 업데이트를 방지&lt;br /&gt;
*** 이거 해도 새로 고침은 하지만, 적어도 Mathoid 서버에 새로 요청 하지는 않는다 (캐시 사용)&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @inheritdoc ve.ce.GeneratedContentNode&lt;br /&gt;
 */&lt;br /&gt;
ve.ce.MWLatexNode.prototype.onGeneratedContentNodeUpdate = function ( staged ) {&lt;br /&gt;
	// 꼼수... this.root가 있을 때만 업데이트함&lt;br /&gt;
	// this.root가 있는 노드는 실제 글 속의 math 노드 (다이얼로그 속은 root 없음)&lt;br /&gt;
	if (this.root)&lt;br /&gt;
		this.update( undefined, staged );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== LocalSettings.php ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// ... (생략)&lt;br /&gt;
&lt;br /&gt;
$wgArticlePath = &amp;quot;/view/$1&amp;quot;;&lt;br /&gt;
$wgUsePathInfo = true;&lt;br /&gt;
$wgScriptExtension = &amp;quot;.php&amp;quot;;&lt;br /&gt;
# $wgUploadPath = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgMathValidModes[] = 'mathml';&lt;br /&gt;
$wgDefaultUserOptions['math'] = 'mathml';&lt;br /&gt;
$wgMathFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
$wgMathMathMLUrl = 'https://wiki-mathoid.dong-min.kim';&lt;br /&gt;
&lt;br /&gt;
$wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
$wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
$wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
    'url' =&amp;gt; 'http://wiki-parsoid.dong-min.kim',&lt;br /&gt;
    'domain' =&amp;gt; 'wiki.dong-min.kim',&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$wgVisualEditorRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/v1/page/html/';&lt;br /&gt;
$wgVisualEditorFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Restbase (도커) ===&lt;br /&gt;
&lt;br /&gt;
* 이 Restbase를 비롯하여 아래의 Parsoid, Mathoid는 미디어위키에서 Visual Editor + Math 확장 기능을 사용하기 위해 설치함&lt;br /&gt;
* 원래 미디어위키에서 무료로 제공하는 기본 Restbase서버와 Mathoid 서버를 이용해도 되지만, 속도가 정말 '''&amp;lt;big&amp;gt;끔찍&amp;lt;/big&amp;gt;하게''' 느려서 직접 구축&lt;br /&gt;
* 제대로 된 문서가 없어서 구축 삽질 엄청 했다... 코드 안에 mediawiki url 하드코딩이 너무 많아 뭐가 문제인지 발견하기가 힘들었다&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API를 처리하기 위한 REST 처리 서버&lt;br /&gt;
* REST로 받은 요청을 내부 독립 서버 (Parsoid, Mathoid 등)에 전달 및 반환 결과 캐싱&lt;br /&gt;
* 기본 DB 세팅인 SQLite는 동시에 많은 요청이 들어오면 db파일이 죽는 경우가 있어서, Cassandra 세팅으로 바꿈&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-restbase&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):7231&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Parsoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Visual Editor 등에서 html &amp;lt;-&amp;gt; wikitext 간 변환 등을 위해 문서 실시간 파싱 등을 처리&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-parsoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):8000&lt;br /&gt;
** (비공개):8001&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Mathoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Math 확장 기능에서 사용&lt;br /&gt;
* LaTeX 문법을 svg, png 등으로 변환&lt;br /&gt;
* Node.js 10&lt;br /&gt;
* pm2로 서비스화 시킴&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-mathoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):10042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Deluge (토렌트) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 토렌트 서버&lt;br /&gt;
* 컨테이너를 완전히 OpenVPN으로 감싸서, VPN 등록이 되지 않은 상태에서는 네트워크 접속을 원천 차단&lt;br /&gt;
* *.ovpn 파일은 config 폴더에 넣으면 됨&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/binhex/arch-delugevpn&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (기본값)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config/ -&amp;gt; /config&lt;br /&gt;
** (자료 저장 폴더) -&amp;gt; /data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** NAME_SERVERS = 1.1.1.1&lt;br /&gt;
** LAN_NETWORK = 호스트의 아이피 말고 호스트의 서브넷 (xxx.xxx.xxx.xxx/xx)&lt;br /&gt;
** ENABLE_PRIVOXY = yes&lt;br /&gt;
** PGID = 100&lt;br /&gt;
** PUID = 1026&lt;br /&gt;
** VPN_PROV = custom&lt;br /&gt;
** VPN_ENABLED = yes&lt;br /&gt;
** HOME = /config/home&lt;br /&gt;
&lt;br /&gt;
=== Gitlab ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 사설 Git 서버&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-ce/&lt;br /&gt;
* 12.8.8&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
&lt;br /&gt;
==== gitlab.rb 설정 ====&lt;br /&gt;
&lt;br /&gt;
* external_url 'https://git.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['gitlab_ssh_host'] = 'kasumi.synology.me'&lt;br /&gt;
* gitlab_rails['time_zone'] = 'Asia/Seoul'&lt;br /&gt;
* gitlab_rails['gitlab_default_theme'] = 10  # dark(default) = 2, red = 9, light red = 10&lt;br /&gt;
* gitlab_rails['trusted_proxies'] = ['시놀로지IP', '프록시IP']&lt;br /&gt;
* gitlab_rails['gitlab_shell_ssh_port'] = 64100&lt;br /&gt;
* registry_external_url 'https://registry.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['registry_enabled'] = true&lt;br /&gt;
* unicorn['worker_processes'] = 2&lt;br /&gt;
* sidekiq['concurrency'] = 3  # default 25&lt;br /&gt;
* nginx['gzip_enabled'] = false&lt;br /&gt;
* nginx['listen_port'] = 80&lt;br /&gt;
* nginx['listen_https'] = false&lt;br /&gt;
* registry_nginx['enable'] = true&lt;br /&gt;
* registry_nginx['gzip_enabled'] = false&lt;br /&gt;
* registry_nginx['listen_port'] = 5005&lt;br /&gt;
* registry_nginx['listen_https'] = false&lt;br /&gt;
&lt;br /&gt;
=== Gitlab Runner ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* Gitlab의 CI/CD 실행용 Runner&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-runner/&lt;br /&gt;
* 12.8.0&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 파일 설정&lt;br /&gt;
** docker.sock -&amp;gt; /var/run/docker.sock&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab runner 설정 폴더 -&amp;gt; /etc/gitlab-runner&lt;br /&gt;
* 주의점&lt;br /&gt;
** 시놀로지 docker를 쓰려면 시놀로지의 docker.sock이 필요하다.&lt;br /&gt;
*** 먼저 시놀로지 측에서 sudo ln -s /var/run/docker.sock /volume1/docker/docker.sock 으로 심볼릭 링크 생성&lt;br /&gt;
*** Gitlab Runner 컨테이너 생성할 때 위 파일 링크가 안 됨&lt;br /&gt;
*** 먼저 아무 파일이나 링크해서 일단 컨테이너 생성&lt;br /&gt;
*** 컨테이너 설정 백업해서, 그 파일 안에서 링크 수정&lt;br /&gt;
*** 수정한 컨테이너 설정을 다시 로드&lt;br /&gt;
** 컨테이너 실행 후 gitlab-runner register 명령어로 gitlab 등록&lt;br /&gt;
&lt;br /&gt;
=== kb_apart (광규 외주) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 광규 외주 프로그램 - 아파트 시세 확인&lt;br /&gt;
&lt;br /&gt;
* gliderlabs/alpine:3.3 기반 (glibc 설치용)&lt;br /&gt;
* Miniconda3 설치&lt;br /&gt;
* Python 3.7.5 + Flask&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-kb-apart-src&lt;br /&gt;
* 도커 레포지토리 없음 (비공개 코드)&lt;br /&gt;
** tar 파일로 직접 업로드&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):5000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** 법정동.txt -&amp;gt; /var/lib/kb_apart/utils/법정동.txt&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CONDA_ENV_NAME = kb_apart&lt;br /&gt;
&lt;br /&gt;
=== Internet Speed Logger (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 일정 주기마다 Speedtest 사이트로 속도 측정해서 그래프로 표시&lt;br /&gt;
* 자꾸 집 인터넷 QoS 걸리는 것 같아서 설치함&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/vkentta/internet-speed-logger&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):3000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** internet speed logger 설정 폴더 -&amp;gt; /usr/src/app/data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CHECK_PERIOD_MINUTES = 30&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - 독립형 ==&lt;br /&gt;
&lt;br /&gt;
=== busybox (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 게스트 관점에서 바라보는 파일 권한 확인, 간단한 명령어 (curl이나 ping 등) 실행용&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/busybox&lt;br /&gt;
* 1.31.1-glibc&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (없음)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== openvpn (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* OpenVPN Client 를 수행해서, 그 결과를 SOCKS5 프록시 서버로 통신 가능&lt;br /&gt;
* OpenVPN to SOCKS5/HTTP Proxy Docker Image&lt;br /&gt;
* 시놀로지 도커에서 자꾸 IPV6 설정 실패하니, ovpn 파일 안의&lt;br /&gt;
** ovpn 파일 안에 proto udp를 proto udp4로&lt;br /&gt;
** setenv UV_IPV6 yes 주석처리&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://registry.hub.docker.com/r/curve25519xsalsa20poly1305/openvpn/&lt;br /&gt;
* latest&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):1080 tcp&lt;br /&gt;
** (비공개):1080 udp&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** (openvpn 설정폴더)/vpn -&amp;gt; /vpn&lt;br /&gt;
** /dev/net/tun -&amp;gt; /dev/net/tun (필요없을수도?)&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** OPENVPN_CONFIG = /vpn/설정파일.ovpn&lt;br /&gt;
&lt;br /&gt;
== 권한 관련 팁 ==&lt;br /&gt;
Nginx, PHP의 404 Not found 오류는 권한 문제일 때가 많다. 도커에서 실행중이라고 했을 때 살펴볼 것은&lt;br /&gt;
&lt;br /&gt;
* 컨테이너 내에서 Nginx나 PHP를 실행하고 있는 uid는 무엇인가?&lt;br /&gt;
** 해당 uid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* uid가 속해 있는 그룹 확인 (gid)&lt;br /&gt;
** 해당 gid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* 권한이 있는데도 접근이 안 되는 경우&lt;br /&gt;
** 루트 디렉터리에서부터 시작해서, 해당 파일이 있는 디렉터리까지의 경로까지 중에서 현재 uid 또는 gid로 '''실행 권한'''을 얻을 수 있는지 확인할 것.&lt;br /&gt;
** 읽기, 쓰기 권한이 아니라 실행 권한이다.&lt;br /&gt;
* 겉으로 보기에는 같은 www-data이더라도 컨테이너에 따라 id는 다를 수 있다.&lt;br /&gt;
* 시놀로지의 경우 NFS 서버로 마운트한 클라이언트에서 본 권한과도 다를 수 있기 때문에 주의&lt;br /&gt;
* LDAP 설정해서 동기화 하려 했으나 귀찮아서 일단 보류&lt;br /&gt;
&lt;br /&gt;
== 집 Docker Swarm 삽질 ==&lt;br /&gt;
&lt;br /&gt;
=== GUI 프로그램 ===&lt;br /&gt;
&lt;br /&gt;
==== Portainer (9000) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** '''터미널 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** gitlab 레지스트리 목록 보기 불가&lt;br /&gt;
** 이미지에서 마우스로 컨테이너 실행 불가&lt;br /&gt;
&lt;br /&gt;
==== Swarmpit (888) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** gitlab 레지스트리 목록 보기 가능&lt;br /&gt;
** '''이미지에서 마우스로 컨테이너 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** 터미널 실행 불가&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=201</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=201"/>
		<updated>2021-01-30T09:12:03Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
* Ubuntu 20.04에서 경고창 뜨는 속도 느린 거 고치기 (안 고쳐지는듯?)&lt;br /&gt;
** vi ~/.config/pulse/default.pa 만들어서 넣자&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.include /etc/pulse/default.pa&lt;br /&gt;
unload-module module-suspend-on-idle&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작 표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
* 제목 표시줄 마우스 휠 버튼 눌렀을 때 최소화 없애기&lt;br /&gt;
** dcond-editor에서&lt;br /&gt;
** org.gnome.desktop.wm.preferences action-middle-click-titlebar 'none'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=200</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=200"/>
		<updated>2021-01-23T11:40:37Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* OS 관련 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
* Ubuntu 20.04에서 경고창 뜨는 속도 느린 거 고치기&lt;br /&gt;
** vi ~/.config/pulse/default.pa 만들어서 넣자&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.include /etc/pulse/default.pa&lt;br /&gt;
unload-module module-suspend-on-idle&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=Mujoco_%EB%B2%88%EC%97%AD&amp;diff=199</id>
		<title>Mujoco 번역</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=Mujoco_%EB%B2%88%EC%97%AD&amp;diff=199"/>
		<updated>2021-01-15T10:00:09Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;참고: 아래의 모든 내용은 mujoco.org/book 을 비공식적으로 번역한 것이며, 오역이 있을 수 있습니다. 문제시 삭제하겠습니다.&lt;br /&gt;
DISCLAIMER: This is an unofficial translation of mujoco.org/book and may be mistranslated. Will be removed if any problem.&lt;br /&gt;
&lt;br /&gt;
= 계산 (Computation) =&lt;br /&gt;
&lt;br /&gt;
= 모델링 (Modeling) =&lt;br /&gt;
&lt;br /&gt;
== Solver 파라미터 (Solver parameters) ==&lt;br /&gt;
Computation 챕터의 Solver 파라미터 섹션에서 MuJoCo의 제약의 행동을 결정하는 수치 d, b, k의 수학적 알고리즘적 의미를 설명했다. 여기서 우리는 그것을 어떻게 설정하는지 설명한다.&lt;br /&gt;
&lt;br /&gt;
설정은 '제약'을 갖고 있는 모든 MJCF 요소의 solref와 solimp attribute에 의해 간접적으로 완료된다.&lt;br /&gt;
&lt;br /&gt;
이 파라미터들은 각 제약 또는 각 기본 클래스에 대해 조정되거나, 혹은 미설정 상태로 남겨둘 수 있다 - 그러면 MuJoCo는 아래에 나와 있는 내부 기본 값을 사용한다.&lt;br /&gt;
&lt;br /&gt;
참고로 option에서 오버라이드 메커니즘도 가능하다; 런타임에 모든 접촉과 관련된 solver 파라미터를 바꾸는데 사용될 수 있어, 파라미터 세팅이나 수치 최적화에서의 연속적인 방법을 동적으로 실험할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
여기서 우리는 한 개의 스칼라 제약에 초점을 둔다.&lt;br /&gt;
&lt;br /&gt;
Computation 챕터에서와 조금 다른 표기법을 사용하여,&lt;br /&gt;
&lt;br /&gt;
* a1을 가속도,&lt;br /&gt;
* v를 속도,&lt;br /&gt;
* r을 위치 또는 유수 (마찰 차원에서 0으로 정의된다),&lt;br /&gt;
* b와 k는 각각 스프링에서의 참조 가속도 aref = -b*v - k*r을 나타내기 위한 단단함, 댐핑을 나타낸다.&lt;br /&gt;
* d는 상수 응답(임피던스),&lt;br /&gt;
* a0은 제약 힘이 없을 때의 가속도라고 한다. (원래 가속도)&lt;br /&gt;
&lt;br /&gt;
앞서 분석에서 우리는 제약 공간에서의 다이나믹스가 대략 &lt;br /&gt;
&lt;br /&gt;
* a1 + d * (b v + k r) = (1 - d) * a0&lt;br /&gt;
* 가속도 + 상수 * (단단함 * 속도 + 댐핑 * 위치) = (1 - 상수) * 원래 가속도&lt;br /&gt;
&lt;br /&gt;
으로 나타냄을 밝혔다.&lt;br /&gt;
&lt;br /&gt;
다시, 유저가 조정할 수 있는 파라미터는 d, b, k(상수, 단단함, 댐핑) 이다. 나머지 양들은 시스템의 상태이며 각 시간 스텝에서 자동으로 계산된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
먼저 우리는 응답 상수 d에 대해 설명한다.&lt;br /&gt;
&lt;br /&gt;
* d는 반드시 0~1 사이여야 한다; 내부적으로 MuJoCo는 0.0001 ~ 0.9999로 자른다.&lt;br /&gt;
* 이것이 solver가 a0과 aref 사이를 상호작용 할 수 있게 해준다.&lt;br /&gt;
* 작은 d값은 부드럽고 약한 제약이고, 큰 d값은 강하고 딱딱한 제약이다.&lt;br /&gt;
* 유저는 d를 상수로 설정하거나, 아니면 위치 의존적인 함수 d(r)로 설정할 수 있다.&lt;br /&gt;
** 위치 의존적 응답은 물체 주변의 부드러운 접촉 레이어로 사용하거나, 혹은 큰 위반일수록 강해지는 equality 제약을 정의할 수 있다. (따라서 예제에서의 backlash를 근사할 수 있다)&lt;br /&gt;
** 함수 d(r)의 모양은 요소별로 정의할 수 있는 solimp 벡터 파라미터로 정의할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== solimp: real(5), &amp;quot;0.9 0.95 0.001 0.5 2&amp;quot; ===&lt;br /&gt;
다섯 개의 숫자는 (dmin, dmax, width, midpoint, power)이다. 이것은 함수 d(r)의 파라미터를 결정한다. (최소 d, 최대 d, 너비, 중간점, 차수)&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0 이전에서는 3개였으며, 거기에 함수의 형태를 결정하는 한 개의 추가 전역 옵션이 있었다.&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0에서는 이전 버전의 호환성을 유지하며 응답 함수를 확장했다.&lt;br /&gt;
&lt;br /&gt;
이전 버전에서 앞의 3개만 설정 가능했고, 기본값은 똑같다.&lt;br /&gt;
&lt;br /&gt;
뒤의 2개의 기본값은 이전 버전과 똑같은 함수의 모양 (시그모이드)를 생성한다.&lt;br /&gt;
&lt;br /&gt;
* 새롭게 정의된 뒤의 2개는 함수의 이동(shift)나 조여짐(skew)을 조정할 수 있다.&lt;br /&gt;
** 아래 그림은 사실은 두 반사된 시그모이드(???)를 보여주고 있으며, 이는 응답 함수 d(r)이 r의 절대값에 의존하기 때문이다.&lt;br /&gt;
** 이 유연성은 원격 접촉 힘에 대한 더 나은 조절을 하기 위해 추가되었으며, 또한 다른 제약을 위해서도 사용될 수 있다.&lt;br /&gt;
* (함수를 생성하기 위한 다항 스플라인의) 차수는 1과 같거나 커야한다.&lt;br /&gt;
* (반사 지점을 결정하는) 중간점은 0과 1 사이여야 하고, 단위는 너비이다.&lt;br /&gt;
** 참고로 차수가 1이면, 함수는 중간점과 관계 없는 선형이 된다.&lt;br /&gt;
&lt;br /&gt;
[[파일:Mj_impedance.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
이 그림은 가로 축의 r의 제약 위반에 대한 세로 축의 응답 d(r)를 보인다.&lt;br /&gt;
&lt;br /&gt;
* equality 제약에 대해서는, r은 제약 위반과 같다 (양수 또는 음수 가능).&lt;br /&gt;
* 마찰 손실 또는 타원뿔의 마찰 차원에 대해서는, r은 항상 0이다.&lt;br /&gt;
* 제한(limit), 타원뿔의 법선 방향, 사각뿔의 모든 법선 방향에 대해서는 r은 (제약 또는 접촉) 거리에서 제약이 활성화 되는 margin을 뺀 값이다; 접촉에 대해서 이 margin은 실제로 margin-gap이다.&lt;br /&gt;
** 따라서 제한과 접촉 제약은 r이 음수일 때 활성화된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음은 단단함 k와 댐핑 b에 대해 설명한다.&lt;br /&gt;
&lt;br /&gt;
여기에서의 아이디어는 위의 질량-스프링-댐퍼 시스템에서의 시상수와 댐핑 비율에 대한 파라미터의 재조정이다.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;시상수&amp;quot;에 의해 우리는 자연 주파수 / 댐핑 비율 의 평균을 구한다 (???)&lt;br /&gt;
&lt;br /&gt;
1차 다이나믹스를 가진 유수가 0인 제약이나 질량-스프링-댐퍼 분석은 적용하지 않는다 (???)&lt;br /&gt;
&lt;br /&gt;
그런 경우에는 시상수는 등속의 지수 감쇠에 대한 rate 이며 (???) 댐핑 비율은 무시된다.&lt;br /&gt;
&lt;br /&gt;
이 형식에서, MuJoCo 2.0은 단단함과 댐핑을 더 직접적으로 정의할 수 있는 2차 형식을 제공한다. (???)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== solref: real(2), &amp;quot;0.02 1&amp;quot; ===&lt;br /&gt;
이 속성은 숫자의 부호에 의해 두 가지의 형식으로 결정된다.&lt;br /&gt;
&lt;br /&gt;
* 두 숫자가 둘 다 양수이면 (timeconst, dampratio) = (시상수, 댐핑 비율)로 결정된다.&lt;br /&gt;
** 모든 MuJoCo에서 가능하다.&lt;br /&gt;
** 이 경우 우리는 적절한 스케일링 후 k, b를 계산하기 위해 질량-스프링-댐퍼 모델을 쓴다.&lt;br /&gt;
** 참고로 활성화된 (effective) 단단함 d(r)*k와 댐핑 d(r)*b는 거리 r에 대한 함수인 응답 d(r)에 의해 스케일 된다.&lt;br /&gt;
** 따라서 우리는 d에 대한 스케일링을 완전히 되돌리기 전까지는 지정된 질량-스프링-댐퍼 속성을 항상 만족할 수는 없다. (???)&lt;br /&gt;
** 하지만 스케일링을 완전히 되돌리는 것은 원하지 않을 것인데, 왜냐하면 그것은 상호작용 속성을 파괴할 것이고, 특히 제한 d=0이 더 이상 제약을 비활성화 하지 않는다.&lt;br /&gt;
** 대신에 우리는 단단함과 댐핑을 스케일하여, 댐핑 비율을 상수로 유지하고, d(r)이 작아짐에 따라 시상수를 증가시킨다.&lt;br /&gt;
** 스케일링 수식은&lt;br /&gt;
*** b = 2 / (dmax * timeconst)&lt;br /&gt;
*** 단단함 = 2 / (최대 d * 시상수)&lt;br /&gt;
*** k = d(r) / (dmax * dmax * timeconst * timeconst * dampratio * dampratio)&lt;br /&gt;
*** 댐핑 = d의 함수 / (최대 d의 제곱 * 시상수의 제곱 * 댐핑 비율의 제곱)&lt;br /&gt;
** 시상수 파라미터는 시뮬레이션 타임 스텝보다 최소 2배 이상 커야 한다.&lt;br /&gt;
*** 아니면 시스템은 산술 integrator에 대해 너무 단단할 것이고 (특히 오일러 integration) 불안정할 것이다.&lt;br /&gt;
*** 이건 내부적으로 지켜지며, refsafe를 false로 하면 무시할 수 있다.&lt;br /&gt;
** 댐핑 비율 파라미터는 보통 1로 설정한다. (치명적 댐핑???)&lt;br /&gt;
** 작은 값은 under-댐핑 또는 통통 튀는 제약이 될 것이고, 큰 값은 over-댐핑되는 제약이 될 것이다.&lt;br /&gt;
* 그 외는 (-stiffness, -damping) = (-단단함, -댐핑)으로 결정된다.&lt;br /&gt;
** MuJoCo 2.0에서 도입되었다.&lt;br /&gt;
** 이 것은 원상 회복(???, restitution)에 대한 더욱 직접적인 조정을 가능하게 한다.&lt;br /&gt;
** 우리는 여전히 조금 스케일링을 적용하므로 같은 숫자들이 다른 응답들에 대해 사용될 수 있지만, 더 이상 스케일링이 r에 의존하지 않고 두 숫자는 더 이상 상호작용하지 않는다.&lt;br /&gt;
** 스케일링 수식은&lt;br /&gt;
*** b = damping / dmax&lt;br /&gt;
*** 단단함 = 댐핑 / 최대 d&lt;br /&gt;
*** k = stiffness / (dmax * dmax)&lt;br /&gt;
*** 댐핑 = 단단함 / (최대 d의 제곱)&lt;br /&gt;
&lt;br /&gt;
== 액추에이터 길이 범위 (Actuator length range) ==&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0에서, mjModel.actuator_lengthrange 필드는 액추에이터의 구동 가능한 길이의 범위를 담고 있다 (혹은 더 정확하게, 액추에이터의 전달 가능 범위).&lt;br /&gt;
&lt;br /&gt;
이것은 밑에서 설명할 근육 액추에이터 시뮬레이션에 필요하다. 여기서는 actuator_lengthrange의 의미 및 설정법에 촛점을 맞춘다.&lt;br /&gt;
&lt;br /&gt;
정확한 물리적 혹은 기하학적 양인 mjModel의 다른 필드와는 다르게, actuator_lengthrange는 추정값이다.&lt;br /&gt;
&lt;br /&gt;
이 값은 직관적으로 생각하면 모델의 모든 &amp;quot;구동 가능한&amp;quot; 조합들에 대해서의 액추에이터의 전달력이 도달할 수 있는 길이를 의미한다.&lt;br /&gt;
&lt;br /&gt;
하지만 MuJoCo의 제약은 soft 방식이므로, 원칙상 어떤 조합도 구동 가능하다고 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이와 동시에 우리는 근육 모델링을 위해 잘 정의된 범위도 필요하다.&lt;br /&gt;
&lt;br /&gt;
이 범위를 정하기 위한 방법은 세 가지가 있다:&lt;br /&gt;
&lt;br /&gt;
* 모든 액추에이터에 새로운 속성값인 lengthrange 값을 명시적으로 제공한다.&lt;br /&gt;
* 액추에이터가 붙어 있는 joint나 tendon의 제한값으로부터 복사 해 온다.&lt;br /&gt;
* 아래에서 설명하는 대로, 자동으로 계산한다. 이 계산에는 많은 옵션들이 있고, XML option 노드의 lengthrange에서 설정 가능하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
액추에이터 길이 범위의 자동 계산은 컴파일 시간에 완료되고, 결과는 컴파일 된 모델의 mjModel.actuator_lengthrange에 저장된다.&lt;br /&gt;
&lt;br /&gt;
이 후 모델이 저장되면 (XML이나 MJB로), 다음 번 로딩에서 재계산이 필요 없다. 대규모 근골격 모델을 로드 할 때 컴파일러에서의 계산이 느려질 수 있기 때문에, 이 처리는 중요하다.&lt;br /&gt;
&lt;br /&gt;
이 계산만을 위해 컴파일러의 멀티스레딩 구현을 하였다(각각의 액추에이터에 대해 여러 스레드에서 병렬 처리). 이는 MuJoCo 라이브러리를 리눅스나 macOS에서 링크할 때 '-pthread' 플래그가 필요하게 된 이유이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
자동 계산은 수정된 물리 시뮬레이션에 의존한다.&lt;br /&gt;
&lt;br /&gt;
* 각각의 액추에이터에 대해서 우리는 힘(최소 길이를 계산할 때 음의 힘, 최대 길이를 계산할 때 양의 힘)을 액추에이터의 전달 가능 범위에 대해 적용하고,&lt;br /&gt;
* 시뮬레이션의 불안정성을 피하기 위해 댐핑된 환경 하에서 시뮬레이션을 진행하며,&lt;br /&gt;
* 안정될 때까지 충분한 시간을 주고, 결과를 기록한다.&lt;br /&gt;
&lt;br /&gt;
이는 모멘텀 하에서의 경사 하강법과 비슷하다. 실제로 우리는 명시적 경사(그라디언트) 기반 최적화 기법으로 실험도 해 보았지만, (주어진 여러 soft 제약 하에서) 무엇을 최적화 해야 하는지 명확하지 않다는 문제가 있었다.&lt;br /&gt;
&lt;br /&gt;
시뮬레이션을 사용하여, 우리는 본질적으로 물리 환경이 우리에게 무엇을 최적화해야 하는지 말하도록 한다.&lt;br /&gt;
&lt;br /&gt;
염두에 두어야 할 것은, 이것은 여전히 최적화 프로세스이며, 아마도 계산된 파라미터를 재조정 할 필요도 있을 것이다.&lt;br /&gt;
&lt;br /&gt;
우리는 대부분의 모델에서 동작할 보수적인 기본값을 제공하지만, 동작하지 않을 경우, 미세 조정을 위해 lengthrange 속성값을 이용하면 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 기능을 사용 할 때 모델의 기하학(geometry)를 염두에 두는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
여기에서의 암묵적 가정은 구동 가능한 액추에이터의 길이는 제한되어 있다는 것이다.&lt;br /&gt;
&lt;br /&gt;
게다가 우리는 접촉을 제한 요소로서 고려하지 않는다 (사실 우리는 이 시뮬레이션에서 접촉을 비롯해 정적(passive) 힘, 중력, 마찰 손실, 액추에이터 힘을 내부적으로 비활성화시킨다).&lt;br /&gt;
&lt;br /&gt;
그 이유는 접촉이 있는 모델은 얽힐 수 있고 많은 지역 최적해를 만들 수 있기 때문이다.&lt;br /&gt;
&lt;br /&gt;
따라서 액추에이터는 모델에 정의되어 있는 (이 시뮬레이션에서 활성화 되어 있는)관절 혹은 tendon의 제한, 또는 기하학(geometry)에 의해 제한되어야 한다.&lt;br /&gt;
&lt;br /&gt;
후자(기하학)를 설명하기 위해, 한 쪽은 world에, 다른 한 쪽은 world에 붙어 있는 힌지 관절 주변으로 회전하는 물체에 매달려 있는 tendon을 생각해보자.&lt;br /&gt;
&lt;br /&gt;
* 이 경우 tendon의 최소 및 최대 길이는 잘 정의된다.&lt;br /&gt;
** 공간에서 부착 점의 궤도가 그리는 원의 크기에 의존된다.&lt;br /&gt;
** 사용자에 의해 정의된 관절이나 tendon에 길이 제한이 없음에도 불구하고 말이다.&lt;br /&gt;
&lt;br /&gt;
그러나 만약 액추에이터가 관절 혹은 관절과 equal한 tendon 그 자체에 부착되어 있다면, 제한이 없어지게 된다.&lt;br /&gt;
&lt;br /&gt;
이런 경우는 컴파일러가 에러를 내지만, 에러의 이유가 길이가 수렴하지 않아서인지 아니면 액추에이터 길이가 무제한인지 말해줄 수는 없다.&lt;br /&gt;
&lt;br /&gt;
이 내용들은 너무 복잡하게 들리는데, 우리가 가능한 매우 특이한 경우를 설명하고 있기 때문이다.&lt;br /&gt;
&lt;br /&gt;
실제로(현실적으로)는 길이 범위는 거의 모든 경우에 spatial tendon에 붙은 근육 액추에이터에서 사용될 것이며, 또한 아마도 모델의 관절 제한이 있을 것이기 때문에, 효과적으로 근육 액추에이터의 길이를 잘 제한시킬 것이다.&lt;br /&gt;
&lt;br /&gt;
만약 어떤 모델에서 수렴 에러가 발생한다면, 아마 그 이유는 모델에 관절 제한을 넣는 것을 깜빡 했었을 것이다.&lt;br /&gt;
&lt;br /&gt;
== 근육 액추에이터 (Muscle Actuators) ==&lt;br /&gt;
&lt;br /&gt;
MuJoCo 2.0에서, 우리는 생물학적 근육을 모델링하기 위한 도구를 제공한다. 최소한의 노력으로 근육을 추가하고 싶은 사용자는 액추에이터 섹션에 한 줄의 XML으로 구현할 수 있다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;actuator&amp;gt;&lt;br /&gt;
    &amp;lt;muscle name=&amp;quot;mymuscle&amp;quot; tendon=&amp;quot;mytendon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/actuator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
생물학적 근육은 서로 매우 달라 보이지만, 신기하게도 어떤 스케일링을 적용하면 전부 비슷한 형태로 움직인다. 우리의 기본 세팅은 그 스케일링을 적용하므로, 사용자는 파라미터 조정 없이도 쓸만한 근육 모델을 획득할 수 있다.&lt;br /&gt;
&lt;br /&gt;
당연히 더 상세한 모델은 이 섹션에서 설명할 파라미터들의 조정이 필요하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
근육 모델이 꽤 정교하지만, 여전히 MuJoCo 액추에이터의 한 타입으로 존재하며 다른 모든 액추에이터와 같은 컨벤션을 따른다.&lt;br /&gt;
&lt;br /&gt;
근육은 general을 사용하여 정의할 수 있지만, 단축어 muscle이 더욱 편리하다.&lt;br /&gt;
&lt;br /&gt;
다른 모든 액추에이터와 같이, 힘 생성 메커니즘과 전달 등은 독립적으로 정의된다. 그렇긴 하지만, 근육은 tendon 또는 관절에 부착되었을 때에만 (생물학)물리학적 의미를 갖는다.&lt;br /&gt;
&lt;br /&gt;
여기서는 tendon 에 부착되었다고 가정한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
먼저 우리는 길이와 길이 스케일링에 대해 설명한다.&lt;br /&gt;
&lt;br /&gt;
전달체 (예: MuJoCo tendon)의 구동 가능한 길이의 범위가 중요한 역할을 한다; 상단의 길이 범위 섹션을 참조하라.&lt;br /&gt;
&lt;br /&gt;
* 생체역학에서, 근육과 tendon은 일렬로 연결되어 근육-tendon 액추에이터를 구성한다.&lt;br /&gt;
* MuJoCo에서는 이와 다르다&lt;br /&gt;
** 공간적(spatial) 속성 (특히 길이와 속도)를 가진 것이 '''tendon'''이고&lt;br /&gt;
** tendon을 당기는 추상적 힘 생성 메커니즘을 의미하는 것이 '''근육'''이다.&lt;br /&gt;
&lt;br /&gt;
따라서 MuJoCo에서의 tendon 길이는, 생체역학에서의 근육+tendon 길이와 같다.&lt;br /&gt;
&lt;br /&gt;
* 여기서는 생물학적 tendon이 상수 길이 LT로 딱딱하게 고정되어 있다고 가정하고, 생물학적 근육 길이 LM은 시간에 따라 변한다고 취급한다.&lt;br /&gt;
* 따라서 MuJoCo의 tendon 길이는, 생물학적 tendon과 근육 길이의 합이다:&lt;br /&gt;
** actuator_length = LT + LM&lt;br /&gt;
** 액추에이터 길이 = 생물학적 tendon 길이(LT) + 생물학적 근육 길이(LM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
또 다른 중요한 상수는 근육의 휴식기 최적 길이(L0)이다.&lt;br /&gt;
&lt;br /&gt;
* 이는 근육이 속도가 0일 때, 동적 힘(active force)을 최대로 생성할 때의 근육 길이 LM이다.&lt;br /&gt;
&lt;br /&gt;
우리는 사용자에게 L0과 LT를 직접 묻지 않는다.&lt;br /&gt;
&lt;br /&gt;
* 왜냐하면 공간적 복잡성한 tendon의 경로 및 감쌈(wrapping) 조건 하에서 이 값들을 알아내는 것이 어렵기 때문이다.&lt;br /&gt;
* 대신 우리는 아래와 같이 L0과 LT를 계산한다.&lt;br /&gt;
* LT+LM(actuator_length)의 가용 범위는 계산은 위의 길이 범위 계산에서 언급했다.&lt;br /&gt;
* 여기에다가, 우리는 사용자에게 (여전히 모르는) 상수 L0으로 '''스케일 된''' 근육 길이 LM 의 가용 범위를 지정하도록 묻는다.&lt;br /&gt;
** 이것은 range 속성으로 정해지며, 기본 (스케일 된) 범위 값은 (0.75, 1.05) 이다.&lt;br /&gt;
* 이제 우리는 실제 및 스케일된 길이의 범위를 이용해서 두 상수 L0과 LT를 계산할 수 있다:&lt;br /&gt;
** (actuator_lengthrange[0] - LT) / L0 = range[0]&lt;br /&gt;
** (actuator_lengthrange[1] - LT) / L0 = range[1]&lt;br /&gt;
** (역주) 따라서 계산해 보면&lt;br /&gt;
** L0 = (actuator_lengthrange[1] - actuator_lengthrange[0]) / (range[1] - range[0])&lt;br /&gt;
** LT = ((actuator_lengthrange[0] * range[1]) - (actuator_lengthrange[1] * range[0])) / (range[1] - range[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
실행 시간에, 우리는 스케일 된 근육 길이와 속도를 다음과 같이 계산한다:&lt;br /&gt;
&lt;br /&gt;
* L = (actuator_length - LT) / L0&lt;br /&gt;
** L = LM / L0&lt;br /&gt;
* V = actuator_velocity / L0&lt;br /&gt;
&lt;br /&gt;
스케일 된 양의 장점은 그 표현 상태에서는 모든 근육이 비슷하게 움직인다.&lt;br /&gt;
&lt;br /&gt;
많은 실험 논문들에서 측정한 힘-길이-속도(Force-Length-Velocity, FLV) 함수에 의해 행동이 결정된다. 우리는 이 함수를 다음과 같이 근사한다:&lt;br /&gt;
&lt;br /&gt;
[[파일:Mujoco_Musclemodel.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
함수는 다음과 같이 구성된다.&lt;br /&gt;
&lt;br /&gt;
* FLV(L, V, act) = FL(L)*FV(V)*act + FP(L)&lt;br /&gt;
** FLV = (동적힘)길이 함수 * (동적힘)속도 함수 * 활성화도 + (정적힘)길이 함수&lt;br /&gt;
* MuJoCo 액추에이터의 일반적인 형태와 비교해 보면, FL*FV를 액추에이터 이득(gain)으로, FP를 액추에이터 편향(bias)로 볼 수 있다.&lt;br /&gt;
* FL은 길이에 대한 동적 힘이다.&lt;br /&gt;
* FV는 속도에 대한 동적 힘이다.&lt;br /&gt;
* 이들은 전체 동적 힘을 계산하기 위해 곱해진다(참고로 액추에이션 활성화도인 act에 의해 스케일링된다).&lt;br /&gt;
* FP는 활성화도와 관계 없이 항상 존재하는 정적 힘이다.&lt;br /&gt;
* FLV 함수의 출력은 스케일 된 근육의 힘이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
우리는 스케일 된 근육의 힘에 근육에 관한 상수 F0를 곱해 실제 힘을 얻는다:&lt;br /&gt;
&lt;br /&gt;
* actuator_force = -1 * FLV(L, V, act) * F0&lt;br /&gt;
* 음수 부호가 붙는 이유는 양의 활성화도는 근육의 당기는 힘을 생성하기 때문이다. (역주: 양수이면 물체를 밀어내고, 음수이면 물체를 당겨온다)&lt;br /&gt;
* 상수 F0는 속도가 0일 때, 동적 힘의 최대 값이다.&lt;br /&gt;
** 이는 근육의 두께와 상관이 있다. (예: 생리학적 단면적=PCSA)&lt;br /&gt;
** 값을 알고 있다면, muscle 요소의 force 속성으로 지정할 수 있다.&lt;br /&gt;
** 모른다면, 기본값인 -1로 지정해서, 밑에서 설명할 수식으로 계산하게 한다.&lt;br /&gt;
*** 이 경우, 우리는 큰 근육일 수록 더 큰 무게를 움직이는 관절에 대해 작용한다는 사실에 따른다. force 속성을 다음과 같이 계산한다:&lt;br /&gt;
*** F0 = scale / actuator_acc0&lt;br /&gt;
*** actuator_acc0 값은 모델 컴파일러에 의해 사전 계산된다.&lt;br /&gt;
**** 이는 액추에이터 전달에 대해 단위힘을 적용했을 때 발생하는 관절의 가속도의 norm이다.&lt;br /&gt;
**** 직관적으로 scale의 의미는, 근육의 실제 강도는 전체 모델의 기하학적 및 관성적 속성에 의존하기는 하지만 근육이 &amp;quot;평균적&amp;quot;으로 얼마나 강한지를 결정하는 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
우리는 지금까지 각각의 근육의 속성을 정의하는 3가지 상수를 마주했다: LT, L0, F0.&lt;br /&gt;
&lt;br /&gt;
게다가, FLV 함수 자체 또한 여러 파라미터를 갖고 있다: lmin, lmax, vmax, fpmax, fvmax.&lt;br /&gt;
&lt;br /&gt;
* 이 5가지 값들은 모든 근육에 대해 동일할 것이라 예상된다.&lt;br /&gt;
* 하지만 여러 다른 실험 논문들에서 다른 형태의 FLV 함수 형태를 제안하므로, 사용자가 그 논문에 익숙하다면 거기에 맞게 파라미터를 조정하고 싶을 것이다.&lt;br /&gt;
* 우리는 상단의 그림을 생성하고 우리가 어떻게 FLV 함수를 계산하는지 설명하는 MATLAB 함수 [http://www.mujoco.org/book/source/FLV.m FLV.m] 를 제공한다.&lt;br /&gt;
&lt;br /&gt;
더욱 정확한 FLV 함수를 설계하는 미션에 착수하기 전에, FLV 함수의 형태보다는 근육의 (스케일된) 가용 범위 (역주: range 속성 (lmin, lmax, lengthrange가 아님))가 더 큰 영향을 미친다는 사실을 생각하는게 좋을 것이고, 많은 경우에 이 파라미터들은 알려져 있지 않다.&lt;br /&gt;
&lt;br /&gt;
아래가 이를 묘사하는 그림이다.&lt;br /&gt;
&lt;br /&gt;
[[파일:Mj_musclerange.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
정규화된 FL 곡선에 각 근육의 가용 범위를 겹쳐 놓은 이 그림은 생체역학적 논문에서 흔한 형태이다 (수직 변위는 무시).&lt;br /&gt;
&lt;br /&gt;
우리의 기본 범위는 검정색으로 그려져 있다. 파란색 곡선은 두 팔 근육에 대한 실험 데이터이다.&lt;br /&gt;
&lt;br /&gt;
작은 범위, 큰 범위, FL 곡선의 상승 부분에의 범위, 하강 부분에의 범위, 혹은 둘 다에의 범위 등에 걸쳐 있는 근육들을 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
이제 50개의 근육을 갖고 있는 모델이 있다고 가정해보자. 정말 누군가가 너가 갖고 있는 그 모델의 모든 근육에 대한 작용 범위에 대해 그 근육이 뻗어 있는 관절들까지 생각해서 정성스럽게 실험하고 측정했을 것이라고 믿을 수 있나?&lt;br /&gt;
&lt;br /&gt;
믿을 수 없다면, 그냥 생체 시스템처럼 근골격 모델은 동일한 일반적 행동을 보인다고 생각하는 게 나을 것이다 - 어떤 연구 커뮤니티들은 큰 관심을 갖고 있는 세부 사항까지 포함해서.&lt;br /&gt;
&lt;br /&gt;
모델을 만든 사람이 상수(변하지 않는 수) 혹은 알려져 있다고 생각한 대부분의 근육 속성들에 대해서, 어떤 조건 하에서는 그 값들이 변하기도 한다는 것을 보이는 실험 논문들이 존재한다.&lt;br /&gt;
&lt;br /&gt;
이것은 사람들이 정확한 모델을 만드는 용기를 잃게 하려는 게 아니라, 사람들이 그러한 모델에 대해 강한 신념을 가지지 못하게 하려는 것이다.&lt;br /&gt;
&lt;br /&gt;
생물학계에서의 모델링은 물리학계 또는 공학계에서의 모델링과 매우 다르다... 이것이 로보틱스 하는 사람들이 정확한 로봇 모델을 만드는 것이 어렵다고 불평할 때 우리가 (속으로) 비꼬는 이유이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다시 우리 근육 모델의 근육 활성화도에 대한 얘기로 돌아오자. 이것은 입력이 제어 신호인 1차 비선형 필터의 상태이다. 필터 다이나믹스는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* d act / dt = (ctrl - act) / tau(ctrl, act)&lt;br /&gt;
* d 활성화도 / dt = (제어신호 - 활성화도) / tau(제어신호, 활성화도)&lt;br /&gt;
&lt;br /&gt;
내부적으로 제어 신호는 액추에이터의 제어 범위가 지정되어 있지 않더라도 [0, 1]으로 클램프 된다.&lt;br /&gt;
&lt;br /&gt;
여기에는 timeconst 속성으로 정의되는 두 개의 시상수가 있는데, timeconst = (tau_act, tau_deact)이고 기본 값은 (0.01, 0.04)이다. 실제 적용되는 시상수 tau는 다음과 같이 실행 시간에 결정된다.&lt;br /&gt;
&lt;br /&gt;
* if ctrl &amp;gt; act&lt;br /&gt;
** tau(ctrl, act) = tau_act * (0.5 + 1.5*act)&lt;br /&gt;
* else&lt;br /&gt;
** tau(ctrl, act) = tau_deact / (0.5 + 1.5*act)&lt;br /&gt;
&lt;br /&gt;
이제 우리는 muscle 요소에서 사용자가 그들의 익숙한 생체역학적 논문에 따르기 위해서 및 특정 모델에서의 더 정확한 측정값을 사용하여 조정하기 원할 것 같은 속성들을 정리한다.&lt;br /&gt;
&lt;br /&gt;
* Defaults&lt;br /&gt;
** 모든 곳에서 기본 값을 사용한다. 해야할 일은 이 장의 처음에서 보인 것처럼 tendon에 근육을 붙이는 것 뿐이다. 이것만으로도 꽤나 적절한 모델을 만들 수 있다.&lt;br /&gt;
* scale&lt;br /&gt;
** 각 근육의 강도는 모르지만 모든 근육을 강하거나 약하게 하고 싶을 때, scale을 조정하면 된다. 이것은 각각의 근육에 다르게 조정할 수 있지만, default 요소로 한 번에 모든 근육을 바꾸는 것이 더 적절할 것이다.&lt;br /&gt;
* force&lt;br /&gt;
** 만약 각 근육의 최대 동적 힘 F0을 알고 있다면, 여기에 입력하면 된다. 많은 실험 논문들이 이 데이터를 갖고 있다.&lt;br /&gt;
* range&lt;br /&gt;
** 근육의 동작 범위는 스케일된 길이이고 어떤 논문들에는 이 값도 적혀 있다. 그 (수많은 관절에 대해 작용하는 특정 근육에 대한) 측정 값들을 얼마나 믿을 수 있는지는 둘째치고, 어쨌든 적혀 있다. 참고로 range는 각 근육마다 대체적으로 다르다.&lt;br /&gt;
* timeconst&lt;br /&gt;
** 근육은 천천히 경련하는 섬유와 빠르게 경련하는 섬유의 조합이다(slow/fast-twitch fibers). 표준 적인 근육은 섞여 있지만, 어떤 근육들은 각 섬유 타입에 대한 비율이 다르기도 하여, 근육이 더 빠르게/느리게 움직이게 한다. 이것은 시상수를 조정하여 모델링할 수 있다. FLV 함수의 vmax 파라미터도 같이 적절하게 조정해야 할 것이다.&lt;br /&gt;
* lmin, lmax, vmax, fpmax, fvmax&lt;br /&gt;
** 이 파라미터들은 FLV 함수의 모양을 조정한다. 고급 사용자는 이 값을 바꿔가며 실험할 수 있다; MATLAB 함수 [http://www.mujoco.org/book/source/FLV.m FLV.m]을 참조하라. scale 세팅과 비슷하게, 모든 근육들에 대해 FLV 파라미터를 바꾸고 싶다면, default 요소에서 바꾸면 된다.&lt;br /&gt;
* Custom model&lt;br /&gt;
** 우리의 근육 모델의 파라미터를 바꾸는 대신, general 액추에이터의 gaintype, biastype, dyntype을 &amp;quot;user&amp;quot;로 바꾸고 실행 시간에 콜백을 제공함으로서 사용자는 다른 모델을 구현할 수 있다. 아니면, 이 타입 중에 일부는 &amp;quot;muscle&amp;quot;로 남겨 두어 우리 모델을 쓰고, 다른 요소만 교체할 수 있다. 참고로 tendon 기하학적 계산은 여전히 표준 MuJoCo 파이프라인에 의해 관리되어 사용자의 근육 모델에 actuator_length, actuator_velocity, actuator_lengthrange를 입력으로서 제공한다. 사용자 콜백은 부드러운 tendon의 모델링 등 우리가 무시하기로 한 기타 상세한 사항을 시뮬레이트하는데 쓰일 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== OpenSim과의 관계성 ===&lt;br /&gt;
&lt;br /&gt;
생체역학계의 연구자들이 사용하는 표준 소프트웨어는 OpenSim이다. 우리는 우리의 근육 모델을 훨씬 더 빠르고 안정적인 시뮬레이션을 하기 위해 조금 단순화하였지만, 그래도 가능한 OpenSim 모델과 비슷하도록 설계했다. MuJoCo 사용자가 OpenSim 모델을 변환하는 것을 돕기 위해, 우리는 비슷한 점과 차이점을 정리했다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
활성화 역학 모델은 기본 시상수값을 포함하여 OpenSim과 동일하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FLV 함수는 완전히 같지는 않지만, MuJoCo와 OpenSim은 같은 실험 데이터를 근사하므로, 매우 비슷하다. OpenSim 모델 및 관련된 실험 데이터의 요약에 대한 설명은 Millard et al, &amp;quot;Flexing computational muscle: modeling and simulation of musculotendon dynamics&amp;quot;, J Biomech Eng. 2013 Feb;135(2) 를 참조하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSim은 부드러운 tendon을 모델링 할 수 있지만 우리는 단단한 tendon을 가정했다. &lt;br /&gt;
&lt;br /&gt;
그 이유는 부드러운 tendon의 모델링은 빠른 평형 가정(fast-equilibrium assumptions)이 필요하며 이는 여러 트윅이 필요하고 따라서 시뮬레이션을 불안정하게 만든다.&lt;br /&gt;
&lt;br /&gt;
실제로 tendon은 꽤나 딱딱하며, 그 효과는 FL 곡선을 적절하게 잡아 늘림으로서 근사할 수 있다 (Zajac 89). 이는 MuJoCo의 근육 동작 범위(range)를 짧게 하는 것과 같다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
회전 각도 (예: 근육과 힘의 작용선 상의 각도)는 MuJoCo에서 모델링되지 않고 0으로 가정한다.&lt;br /&gt;
&lt;br /&gt;
이는 근육의 힘을 적절히 스케일 다운 하고 동작 범위를 조정함으로서 근사할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tendon 래핑은 MuJoCo에서 더욱 제약된다. 우리는 구와 무한 원기둥을 래핑 물체로 허용하고, tendon 경로 안의 고정된 site에 의해 두 물체가 분리되는 것을 요구한다.&lt;br /&gt;
&lt;br /&gt;
이는 tendon 경로 순차적 계산의 필요성을 피하기 위해서이다.&lt;br /&gt;
&lt;br /&gt;
또한 MuJoCo 2.0에서 우리는 구 또는 원기둥 내부에 위치해야 하는 &amp;quot;side sites&amp;quot;를 허용한다. 이는 tendon 경로가 특정 영역을 지나게 하기 위한 OpenSim의 토러스 래핑 물체를 대체할 수 있다.&lt;br /&gt;
&lt;br /&gt;
전체적으로, tendon 래핑은 OpenSim 모델에서 MuJoCo 모델으로 컨버팅 하기 가장 어려운 부분이며, 약간의 수작업이 필요하다.&lt;br /&gt;
&lt;br /&gt;
밝은 면으로는, 널리 쓰이는 고품질의 OpenSim 모델은 몇 개 없으며, 그것들이 컨버팅 되면 끝이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래에 MuJoCo 2.0에서 가능한 4가지 종류의 tendon 래핑을 묘사해 놓았다.&lt;br /&gt;
&lt;br /&gt;
참고로 래핑된 tendon의 곡선 부분은 직선으로 렌더링되지만, 기하학적 파이프라인은 실제 곡선에 맞게 동작하며, 그들의 길이와 모멘트를 해석적으로 계산한다.&lt;br /&gt;
&lt;br /&gt;
[[파일:Mj_tendonwraps.png|500x500픽셀]]&lt;br /&gt;
&lt;br /&gt;
= XML 문서 (XML Reference) =&lt;br /&gt;
&lt;br /&gt;
=== actuator/muscle ===&lt;br /&gt;
이 요소는 근육 액추에이터 섹션에서 설명한 대로 근육 액추에이터를 모델링하기 위해 사용된다. &lt;br /&gt;
&lt;br /&gt;
* name: string, optional&lt;br /&gt;
** 요소 이름. 이름 요소 섹션 참고.&lt;br /&gt;
* class : string, optional&lt;br /&gt;
** 기본 클래스. 기본 설정 섹션 참고.&lt;br /&gt;
* group : int, &amp;quot;0&amp;quot;&lt;br /&gt;
** 액추에이터가 속할 정수 그룹. 이 요소는 커스텀 태그로 사용될 수 있다. 또한 visualizer에서 그룹별 액추에이터 렌더링 활성화/비활성화에도 쓰인다.&lt;br /&gt;
* ctrllimited : [false, true], &amp;quot;false&amp;quot;&lt;br /&gt;
** true: 이 액추에이터로의 제어 입력은 실행 시간에 ctrlrange 대로 클램핑된다.&lt;br /&gt;
** false: 클램핑 비활성화&lt;br /&gt;
** 참고로 option flag의 clampctrl 속성으로 제어 입력 클램핑을 전역 비활성화 할 수 있다.&lt;br /&gt;
* forcelimited : [false, true], &amp;quot;false&amp;quot;&lt;br /&gt;
* true: 이 액추에이터의 힘 출력은 실행 시간에 forcerange 대로 클램핑된다.&lt;br /&gt;
** false: 클램핑 비활성화&lt;br /&gt;
* ctrlrange : real(2), &amp;quot;0 0&amp;quot;&lt;br /&gt;
** 제어 입력의 클램핑 범위. 컴파일러는 첫 번째 값이 두 번째 값보다 작을 것이라 예상한다.&lt;br /&gt;
* forcerange : real(2), &amp;quot;0 0&amp;quot;&lt;br /&gt;
** 힘 출력의 클램핑 범위. 컴파일러는 첫 번째 값이 두 번째 값보다 작을 것이라 예상한다.&lt;br /&gt;
* lengthrange : real(2), &amp;quot;0 0&amp;quot;&lt;br /&gt;
** 액추에이터의 전달 길이의 실현 가능한 범위. Length Range 섹션 참고. (역주: 밑의 range와는 다르다. 여긴 정말 물리적으로 가능한 길이의 범위)&lt;br /&gt;
* gear : real(6), &amp;quot;1 0 0 0 0 0&amp;quot;&lt;br /&gt;
** 이 속성은 모든 전달 타입에 대해 액추에이터의 길이(따라서 모멘트의 팔, 속도 그리고 힘)을 스케일링 한다. 이는 힘 생성 메커니즘에서의 gain과는 다른데, gain은 힘 출력만을 스케일링하고, 길이, 모멘트의 팔, 속도에는 영향을 미치지 않기 때문이다. 스칼라 전달을 가진 액추에이터는, 벡터의 첫 번째 값만 사용된다. 나머지 값들은 3D 힘 및 토크 축을 지정하는데 쓰기 위해서 관절, 부모에서의 관절(jointinparent), site 전달 속성에는 필요하다.&lt;br /&gt;
* tendon : string, optional&lt;br /&gt;
** 지정되었다면, 주어진 tendon에 액추에이터가 작용한다. 액추에이터 길이는 tendon 길이 * 기어비 이다. Spatial 및 fixed tendond 둘 다에 사용할 수 있다.&lt;br /&gt;
* user : real(nuser_actuator), &amp;quot;0 ... 0&amp;quot;&lt;br /&gt;
** 사용자 파라미터 섹션 참고.&lt;br /&gt;
* timeconst : real(2), &amp;quot;0.01 0.04&amp;quot;&lt;br /&gt;
** 활성/비활성 다이나믹스를 위한 시상수이다.&lt;br /&gt;
* range : real(2), &amp;quot;0.75 1.05&amp;quot;&lt;br /&gt;
** L0 단위로 정의된 근육의 동작 범위. (역주: 위의 lengthrange와는 다르다. 설명상 근육의 동작 가능한 범위라고 나와 있기는 하지만, 거의 L0 및 LT의 계산을 위해 쓰이는 파라미터이다.)&lt;br /&gt;
* force : real, &amp;quot;-1&amp;quot;&lt;br /&gt;
** 휴식기 최대 동적 힘. 이 값이 음수이면, 최대 힘은 아래의 scale 속성에 의해 자동으로 결정된다.&lt;br /&gt;
* scale : real, &amp;quot;200&amp;quot;&lt;br /&gt;
** 만약 force 속성이 음수이면, 근육의 최대 동적 힘은 scale / mjModel.actuator_acc 으로 결정된다. mjModel.actuator_acc는 qpos0의 액추에이터 전달에 대해 단위 힘을 적용했을 때 발생하는 관절 공간의 가속도의 norm이다.&lt;br /&gt;
** 다시 말해, 스케일링 하면 근육의 최대 힘이 커지고 더 많은 무게를 당기게 한다.&lt;br /&gt;
* lmin : real, &amp;quot;0.5&amp;quot;&lt;br /&gt;
** L0으로 정규화된 FLV 곡선에서 최저 위치 범위.&lt;br /&gt;
* lmax : real, &amp;quot;1.6&amp;quot;&lt;br /&gt;
** L0으로 정규화된 FLV 곡선에서 최대 위치 범위.&lt;br /&gt;
* vmax : real, &amp;quot;1.5&amp;quot;&lt;br /&gt;
** L0/s으로 정규화된 근육의 힘이 0이 될 때의 수축 속도.&lt;br /&gt;
* fpmax : real, &amp;quot;1.3&amp;quot;&lt;br /&gt;
** lmax일때 생성되는 정적 힘. 휴식기 최대 힘과 관련이 있다.&lt;br /&gt;
* fvmax : real, &amp;quot;1.2&amp;quot;&lt;br /&gt;
** 포화 수축 속도일때 생성되는 동적 힘. 휴식기 최대 힘과 관련이 있다.&lt;br /&gt;
&lt;br /&gt;
== 그래서 range, lengthrange 등은 뭐가 다른거냐고? ==&lt;br /&gt;
&lt;br /&gt;
=== tendon ===&lt;br /&gt;
&lt;br /&gt;
* range: tendon의 물리적인 길이 제한. 이 길이 이상으로는 '''절대로''' 늘어날 수 없다.&lt;br /&gt;
&lt;br /&gt;
=== muscle ===&lt;br /&gt;
&lt;br /&gt;
* lengthrange: muscle의 가동 범위. tendon의 range와는 다르게, 이 근육이 '''물리 시뮬레이션의 제약을 바탕으로 최대로 늘어날 수 있는 길이'''를 줘야 한다. (팔에 달린 근육은, 팔의 관절 각도 이상으로 늘어날 수 없다.)&lt;br /&gt;
&lt;br /&gt;
* range: L0 단위로 정의된 근육의 동작 범위. '''근육 힘 특성인 L0과 LT의 계산을 위해 쓰인다.'''&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8D%94%EB%9F%AC%EC%9A%B4_mujoco_%ED%99%98%EA%B2%BD_%EC%9E%A1%EA%B8%B0&amp;diff=198</id>
		<title>더러운 mujoco 환경 잡기</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8D%94%EB%9F%AC%EC%9A%B4_mujoco_%ED%99%98%EA%B2%BD_%EC%9E%A1%EA%B8%B0&amp;diff=198"/>
		<updated>2021-01-02T16:46:50Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 191226 Ubuntu 18.04 기준 ==&lt;br /&gt;
&lt;br /&gt;
=== mujoco_py 설치 전 설정할 것 ===&lt;br /&gt;
&lt;br /&gt;
==== 기본 설정 ====&lt;br /&gt;
&lt;br /&gt;
* ~/.bashrc에 다음 설정 후 재부팅 (혹은 source ~/.bashrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kdm/.mujoco/mujoco200/bin&lt;br /&gt;
export PATH=$PATH:/usr/local/cuda-10.0/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== gym에서 mujoco-py 렌더링하기 ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libglfw3-dev libglfw3 xvfb libglew-dev mesa-utils libosmesa6-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mujoco-py 렌더링 GPU에서 돌리기 ====&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 드라이버 설치 후 /usr/lib/nvidia-777 폴더 만들어주기&lt;br /&gt;
* 강제 재빌드는 MUJOCO_PY_FORCE_REBUILD=True&lt;br /&gt;
&lt;br /&gt;
=== mujoco_py 설치 후 설정할 것 ===&lt;br /&gt;
&lt;br /&gt;
==== gym 실행시 환경변수 설정 ====&lt;br /&gt;
&lt;br /&gt;
* GPU 렌더링 빌드인 경우(LinuxGPUExtensionBuilder)&lt;br /&gt;
** 만약 ubuntu server라서 headless인 경우에 따로 egl 드라이버를 넣어줘야 할 수 있음&lt;br /&gt;
*** 아래와 같이 설치 했을 경우에는&lt;br /&gt;
*** sudo apt-get install nvidia-headless-440-server nvidia-utils-440-server&lt;br /&gt;
*** 이게 필요&lt;br /&gt;
*** sudo apt-get install libnvidia-common-440-server libnvidia-gl-440-server&lt;br /&gt;
** LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/x86_64-linux-gnu/libGL.so&lt;br /&gt;
** 항상 GPU에서 렌더링 하고 싶으면 ~/.bashrc에 이거 설정&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
export LD_PRELOAD=&amp;quot;/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/x86_64-linux-gnu/libGL.so&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CPU 렌더링 빌드인 경우(LinuxCPUExtensionBuilder)&lt;br /&gt;
** 오히려 위에 환경변수 설정이 있으면 안 될 것임&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 기타 팁 ===&lt;br /&gt;
&lt;br /&gt;
* 강화학습 시 mujoco 렌더링은 env.render()로 렌더 창 띄워서 보는 것 보다는 그냥 rgb_array로 뽑아내서 visdom 등으로 보내는게 속 편함&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%95%BC%EB%A7%88%EB%8B%A4_2015_%EB%B0%95%EC%82%AC_%EB%85%BC%EB%AC%B8&amp;diff=197</id>
		<title>야마다 2015 박사 논문</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%95%BC%EB%A7%88%EB%8B%A4_2015_%EB%B0%95%EC%82%AC_%EB%85%BC%EB%AC%B8&amp;diff=197"/>
		<updated>2020-11-29T17:56:33Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 3.3 동역학 시뮬레이션을 위한 태아 물리 모델과 태내 환경 모델 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.3.1 개요 ===&lt;br /&gt;
여기서는, 작성한 태아의 근골격 신체 모델을 강체의 동역학 시뮬레이션에서 돌리기 위한, 태아 모델의 작성에 대해 설명한다. 먼저, 신체 모델을 21개의 신체 부위로 분할하고, 골격에 기초한 관절을 설정하고, 강체의 링크계로서 모델화를 행하였다. 여기에 수반하여, 단일 신체 부위 모델 내에 붙어 있는 근육에 대해서는, 강체 시뮬레이션이므로 제거했다 (역주: 관절과 연관되지 않은 근육은 제거했다). 다음으로 신체를 구동하고, 환경과의 상호작용의 결과를 피드백으로서 얻기 위한 운동기와 감각기의 각각에 대해서 모델화를 행한다. 구체적으로는, 운동기로서의 근육을, 감각기로서는 근육의 고유 감각인 근방추, 골지건 기관 및 촉각의 감각수용기에 대해서 모델화를 행했으므로, 각각에 대해서 설명을 행한다. 또한, 자궁막과 양수로부터 구성되는 태내 환경 모델에 대해서 설명한다. 작성한 32주에 해당하는 태아 모델을 원하는 태아의 나이의 모델로 변환하는 방법에 대해서도 설명한다. 마지막으로 ODE를 사용하여 태아 모델으로 강체 시뮬레이션을 행하기 위해 행한 개선점에 대해서 설명한다. 작성한 태아 모델에 의한 운동학 시뮬레이션의 외관을 Fig. 3.10에, 시뮬레이션의 스냅샷을 Fig. 3.11에 나타낸다.&lt;br /&gt;
&lt;br /&gt;
=== 3.3.2 태아의 강체 링크 모델과 근육 배치 ===&lt;br /&gt;
태아의 근골격 신체 모델에 기초한 태아의 신체 모델을 21개의 신체부위와, 그것을 연결하는 20개의 관절, 36자유도의 강체 링크 모델으로서 모델화했다 (Table 3.4 and Fig. 3.12). 신체의 분리는 골격에 기초하여 행하고, 피부를 거기에 응하여 분리하고, 관절은 골격에 대해서 설정된 것을 사용했다. 각 강체의 질량이나 관성 모멘트에 대해서는, 밀도가 일정하다 가정하고 계산하는 것으로 구했다. 관절 가동 영역에 대해서는, 태아에 대해서 조사한 것은 찾을 수 없었다. 따라서, 사지 또는 어깨에 대해서는 와타나베 등이 보고한 신생아의 것 [548]을, 몸통과 머리에 대해서는 어른의 것 [546]으로 대용했다. 이것들의 관절 가동 영역을 참고하여, 이 범위를 넘지 않도록 태아 모델의 관절 가동각 한계를 설정했다 (부록 C).&lt;br /&gt;
&lt;br /&gt;
근육에 대해서 설명한다. 각 신체 부위 모델에 대해서는 단일 또는 복수의 뼈가 할당되어 있어, 이것에 기초하여 근육은 고정되어 있는 뼈가 소속하는 신체 부위에 대해 시뮬레이션 속에서는 고정된다. 신체 부위의 분리에 수반하여 같은 신체 부위 내에 닫혀 있는 근육에 대해서는 제외했다. 그 결과로서 최대 494개의 근육이 강체 시뮬레이션 위에서 구동 가능하게 되었다 (Fig. 3.13). 이 근육 중에서는, 복수의 선분으로 모델화된 근육의 일부가 시뮬레이션 가능하게 된 것도 있다는 것에 주의한다. 일부를 포함한 근육을 정리하여 지운 경우 또는, 관절 가동각 한계까지 움직였을 때에 길이가 변화하지 않는 근육을 포함한 경우, 이 근육 개수로부터 제한 것이 된다.&lt;br /&gt;
&lt;br /&gt;
=== 3.3.3 근육 및 근육의 고유감각 모델 ===&lt;br /&gt;
&lt;br /&gt;
==== 근육 모델 ====&lt;br /&gt;
본 연구에서 사용하는 근육 모델은, Hill의 특성 방정식을 사용하여 모델화[193]된 He에 의한 근육 모델[181]을 베이스로 한다. 근육 모델은, 0부터 1의 연속 값인 무차원수의 운동 지령을 입력으로서 힘을 발생하는 것이 가능하다. 이 모델은, 자연 길이 0.036m의 근육을 베이스로 한 모델이기 때문에, 자연장이 다른 근육에 대해서도 사용하는 것이 가능하도록 확장해서 사용했다. 전신에 배치되어 있는 각 근육은, 자연 길이와 최대 수의 수축력을 파라미터로서 동일의 다이나믹스를 따른다.&lt;br /&gt;
&lt;br /&gt;
먼저, He에 의한 근육 모델의 설명을 행한다. 각 근육이 발생하는 힘은 능동 수축력 &amp;lt;math&amp;gt;F_{act}&amp;lt;/math&amp;gt;와 수동 수축력 &amp;lt;math&amp;gt;F_p&amp;lt;/math&amp;gt;의 힘의 합에 의해 부여된다. 근육의 능동 수축력 &amp;lt;math&amp;gt;F_{act}&amp;lt;/math&amp;gt;는 근육의 활성도 &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, 길이 &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt;, 속도 &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;에 의존한다. 이 모델은 이하의 식으로서 모델화된다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;F_{act} = F_{max} \; a \; f_l(l) \; f_v(v) \qquad (3.2) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다음으로 활성도 &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, 수의 수축력의 근육 길이 의존 성분 &amp;lt;math&amp;gt;f_l(l)&amp;lt;/math&amp;gt; 및 속도도 의존성분 &amp;lt;math&amp;gt;f_v(v)&amp;lt;/math&amp;gt;의 다이나믹스에 대해 각각 설명한다. &amp;lt;math&amp;gt;F_{max}&amp;lt;/math&amp;gt;는 근육의 등척성 최대 수축력으로, 실험 데이터에 기초하여 100N으로 되어 있다.&lt;br /&gt;
&lt;br /&gt;
근육의 활동도 다이나믹스는, 등척성 근육 수축에 의한 근력을 조사한 것에 의해 모델화되어 있다. 등척성 근육 수축에 의한 근력은, 신경근 접합부에 의한 &amp;lt;math&amp;gt;Ca^{2+}&amp;lt;/math&amp;gt;농도와 가교형성에 의존한다. 이 모델에 대해 활성도 다이너믹스 &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;는, 칼슘 방출과 재흡수를 반영한 Low-pass 필터에 의해 칼슘 다이나믹스 &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; (Eq. (3.3))과 토로포닌에 의한 칼슘 결합에 의한 가교 사이클을 표현한 비선형 필터 (Eq. (3.5))에 의해, 다음과 같이 모델화 되어 있다 [463, 47].&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{\mathrm{d}q}{\mathrm{d}t} = 18.8496 (m - q) \qquad (3.3) &amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;u = \frac{q^2}{k^2 + q^2} \qquad (3.4) &amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{\mathrm{d}a}{\mathrm{d}t} = b(u-a) \qquad (3.5) &amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;b = 22(1-0.51a)^2 \qquad (3.6) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;은 운동 뉴런으로부터의 신호로, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; 둘 다 단위는 [p/s]이다. 등척성 근육 수축과 운동 뉴런의 출력과의 사이에 시그모이드의 관계성이 있는 것이 모델 연구에 의해 보여지고 있다 [185, 135]. 이 지식에 기초하여 파라미터 &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;는, 운동 뉴런의 발화율이 30[p/s]에서 안정 상태의 등척성 근육 수축의 반절의 값을 출력하는 시그모이드가 되도록 &amp;lt;math&amp;gt;k = 30[p/s]&amp;lt;/math&amp;gt;로 정해져 있다. 상태 의존 파라미터인 &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;는, 근육의 히스테리시스와 큰 근력으로부터의 부드러운 이완을 반영한 파라미터이다. 근육 활동도 &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;는 0에서 1의 범위를 갖는 무차원 수이다.&lt;br /&gt;
&lt;br /&gt;
다음으로, 근육 길이 의존 성분과 속도도 의존성분의 다이나믹스에 대해 설명한다. 이 모델은, Zajac에 의한 근육의 일반화 모델 [537]을 He 등이 확장한 것이다 [182, 183]. 근육 길이 의존성분 &amp;lt;math&amp;gt;f_l(l)&amp;lt;/math&amp;gt;은 Otten에 의해, 최적 근육 길이 &amp;lt;math&amp;gt;L_{opt}&amp;lt;/math&amp;gt;에 의해 근육 길이 l의 상대 길이에 의존하는 형태로 다음과 같이 모델화 되어 있다 [363].&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;f_l(l) = \mathrm{exp} \biggl\{ - \biggl( \frac{|(l / L_{opt})^{2.8286} - 1|}{0.6182} \biggr)^{2.3680} \biggr\}\qquad (3.7) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L_{opt}&amp;lt;/math&amp;gt;는 Spector 등의 실험 데이터 [454]와 일치하도록, 0.05m의 값으로 설정되어 있다. 속도도 의존성분 &amp;lt;math&amp;gt;f_v(v)&amp;lt;/math&amp;gt;는, 0부터 1.8의 값을 갖고, 다이나믹스는 수축시와 신장시에 각각 다른 쌍곡선 함수에 의해 이하와 같이 모델화 되어 있다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;f_v(v) = \begin{cases} (1 + 7.3125v) / (1 + 4.0625v), &amp;amp; v \geq 0 \text{: Stretching} \\ (1 + v) / (1 - 2.25v) &amp;amp; v \leq 0 \text{: Contracting} \end{cases} \qquad (3.8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;는 최대 근육 수축 속도 &amp;lt;math&amp;gt;V_{max}&amp;lt;/math&amp;gt;에 의해 정규화된 속도이고, 여기서의 &amp;lt;math&amp;gt;V_{max} = 0.25 m/s&amp;lt;/math&amp;gt;로 되어 있다.&lt;br /&gt;
&lt;br /&gt;
다음으로 근육의 수동 수축력 &amp;lt;math&amp;gt;F_p&amp;lt;/math&amp;gt;의 다이나믹스에 대해 설명한다. 수동 힘의 다이나믹스는, 근육 길이와 그 속도에 의존하는 형태로 모델화 되어있다. 근육 길이에 의존하는 부분은, 자연 길이보다 길게 되면 지수함수로 수동 수축력은 증가하고, 어떤 길이를 넘으면 선형으로 모델화 되어있다. 근육의 속도에 의존하는 부분에 대해서는, 확률적 섭동을 사용해서 근육의 수동 수축력에 대한 점탄성의 관계성에 대해 서술한 Kirsch 들에 의한 연구 [248]에 기초해 모델화 되어 있고, 이하를 따른다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;F_p = f_p(l) + B_p(l)v \qquad (3.9)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;f_p(l) = \begin{cases} 0 &amp;amp; (l \leq 0.036) \\ 0.1663(\mathrm{exp}(208.2(l-0.036))-1) &amp;amp; (0.036 &amp;lt; l &amp;lt; 0.057) \\ 13.0076 + 2743(l-0.057) &amp;amp; (l \geq 0.057) \end{cases} \qquad (3.10)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;B_p(l) = \begin{cases} 0.34624 \ \mathrm{exp}(208.2(l-0.036)) &amp;amp; (l &amp;lt; 0.057) \\ 27.4 &amp;amp; (l \geq 0.057) \end{cases} \qquad (3.11)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
마지막으로, 자연 길이 및 최대 수의 수축력이 서로 다른 근육에 대해서도 사용하는 경우에 대해 설명한다. 자연 길이가 서로 다른 점에 대해서는, 대상이 되는 근육의 자연 길이 및 근육 길이를 각각 &amp;lt;math&amp;gt;l'&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;l_{0}'&amp;lt;/math&amp;gt;이라 하면, &amp;lt;math&amp;gt;l \leftarrow 0.036 l'/l_{0}'&amp;lt;/math&amp;gt;으로 치환하는 것으로 구했다. 등척성 최대 근육 수축력 &amp;lt;math&amp;gt;F_{max}&amp;lt;/math&amp;gt;에 대해서는, 대상의 그것을 &amp;lt;math&amp;gt;F_{max}'&amp;lt;/math&amp;gt;으로서 수동 힘과 능동 힘의 합력을 구한 뒤에 &amp;lt;math&amp;gt;F_{max}'/F_{max}&amp;lt;/math&amp;gt;을 곱하는 것으로 구했다.&lt;br /&gt;
&lt;br /&gt;
==== 근육의 고유 감각기 모델 ====&lt;br /&gt;
근육의 감각기로서는, 근육 길이와 근육 장력을 반영한 감각 피드백을 반환하는 근방추와 골지건 기관의 모델이 조합되어 들어있다. 이 두개에 대해서도, 정합성의 관점으로부터, 근육 모델과 같은 방식으로 He에 의한 모델을 채용했다 [181]. 이하, 각각의 모델에 대해서 설명한다.&lt;br /&gt;
&lt;br /&gt;
골지건 기관의 모델은, Houk and Simon에 의한 근력에 대한 응답을 모델화한 모델 [202]에 대해, Prochazka and Gorassini가 고양이의 로코모션을 예시로서 통상 운동 상황하에서의 응답을 설명 가능한 레벨으로 확충한 모델 [389]에 기초한다. 골지건 기관의 출력 &amp;lt;math&amp;gt;r_{Ib}&amp;lt;/math&amp;gt;는, 전달함수의 형태로 Band-pass 필터로서 이하의 식으로 구해진다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;r_{Ib}(s) = K_{\text{GTO}} \frac{(1+s/0.15)(1+s/1.5)(1+s/16)}{(1+s/0.2)(1+s/2)(1+s/37)} \qquad (3.12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 모델에서는 골지건 기관이 &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;운동 뉴런과의 결합은 직접 결합하는 것을 가정하여 모델화되어 있고, 전달 지연과 이득 &amp;lt;math&amp;gt;K_{\text{GTO}}&amp;lt;/math&amp;gt;는 상수로서 다루어지고 있다 [181]. 여기서는, 근육 장력이 &amp;lt;math&amp;gt;F_{max}&amp;lt;/math&amp;gt;가 될 때에, 출력이 &amp;lt;math&amp;gt;1 \text{nA}&amp;lt;/math&amp;gt;가 되도록 이득 &amp;lt;math&amp;gt;K_{\text{GTO}}&amp;lt;/math&amp;gt;는 &amp;lt;math&amp;gt;0.01 \text{nA/N}&amp;lt;/math&amp;gt;으로 설정되어 있다.&lt;br /&gt;
&lt;br /&gt;
다음으로, 근방추의 모델에 대해 설명한다 [178, 181]. 먼저 &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;의 근육 길이, &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;를 방추 속 근육 길이, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;를 근방추의 센서 영역 길이라고 하면, 해부학적 제약에 의해 이하의 관계성이 성립한다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x = y + z \qquad (3.13)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\dot{z} = \dot{x} - \dot{y} \qquad (3.14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
근방추 출력 &amp;lt;math&amp;gt;r_{Ia} \ \mathrm{p/s}&amp;lt;/math&amp;gt;는 이 &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;를 사용하여, 이하의 전달함수로 표현되는 다이나믹스를 통하는 것으로 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{r_{Ia}(s)}{l_{sp}(s)} = K_{\text{MS}}\frac{(1+s/7.23)(1+s/74.07)}{(1+s/12.46)(1+s/123.28)(1+s/250)} \qquad (3.15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서,  &amp;lt;math&amp;gt;K_{\text{MS}} = 3.2\times10.5^5 \mathrm{p/s/m}&amp;lt;/math&amp;gt;의 상수로서 취급되어 있다. 근 길이 &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;는 시뮬레이션에서 직접 얻는 것이 가능하므로, Eq. (3.14)에 의해 &amp;lt;math&amp;gt;\dot{y}&amp;lt;/math&amp;gt;가 얻어지면 수치적분에 의해 근방추의 센서 영역 길이 &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;가 얻어져서, Eq. (3.15)에 의해 근방추 출력을 얻는 것이 가능하다. 아래에서, &amp;lt;math&amp;gt;\dot{y}&amp;lt;/math&amp;gt;를 얻는 방법을 설명한다.&lt;br /&gt;
&lt;br /&gt;
방추 속 근육 길이 &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;의 미분 방정식은 다음과 같이 모델화 되어 있다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\dot{y} = f_{\text{vi}}^{-1}\Bigl(\frac{\frac{K}{E} \ z}{f(l)}\Bigr) \qquad (3.16)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;f(l) = \begin{cases} 0.0009197 \mathrm{exp}(400l), &amp;amp; (l &amp;lt; 0.0025) \\ l &amp;amp; (l \geq 0.0025) \end{cases} \qquad (3.17)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;l = x - z - c \qquad (3.18)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;는 근방추의 느슨함이 시작되는 길이이며, &amp;lt;math&amp;gt;c = 0.035 \mathrm{m}&amp;lt;/math&amp;gt;의 상수로서 취급되고 있다. 또한, &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;는 센서 영역의 강성(剛性), &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;는 수축 영역의 강성이다. 센서 영역의 방추 속 근육에 대한 강성 비율 &amp;lt;math&amp;gt;K/E&amp;lt;/math&amp;gt;는, 근방추에의 입력 신호 &amp;lt;math&amp;gt;i \ \mathrm{p/s}&amp;lt;/math&amp;gt;에 의존하고, 이하의 식에 의해 부여된다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{K}{E_0(i)} = \frac{99}{1+0.08i} \qquad (3.19)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
거기에, 근육 길이의 속도가 양수일 때의 힘과 속도의 관계 &amp;lt;math&amp;gt;f_{\text{vi}}(\dot{y})&amp;lt;/math&amp;gt;는 다음의 형식으로 일반화 가능하다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;f_{\text{vi}}(\dot{y}) = \begin{cases} &lt;br /&gt;
(1 + C_1 \dot{y}) / (1 + C_2 \dot{y}) &amp;amp; (\dot{y} &amp;gt; 0) \\ &lt;br /&gt;
(1 + C_3 \dot{y}) / (1 - C_4 \dot{y}) &amp;amp; (\dot{y} &amp;lt; 0)&lt;br /&gt;
\end{cases} \qquad (3.20)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;C_1 = 85.5 \mathrm{s/m}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_2 = 22.7 \mathrm{s/m}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_3 = 1 \mathrm{s/m}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_4 = 62.8 \mathrm{s/m}&amp;lt;/math&amp;gt;의 상수 값으로서 모델화 되어 있다. &amp;lt;math&amp;gt;f_{\text{vi}}(\dot{y})&amp;lt;/math&amp;gt;의 역함수를 구하는 것은 용이하므로, 이상의 식에 의해 &amp;lt;math&amp;gt;\dot{y}&amp;lt;/math&amp;gt;는 계산 가능하다.&lt;br /&gt;
&lt;br /&gt;
상기의 근방추 모델은, 근육 모델과 같은 방식으로 자연 길이 &amp;lt;math&amp;gt;0.036 \mathrm{m}&amp;lt;/math&amp;gt;의 특정의 근육에 대한 모델이기 때문에, 전신의 근육에 적용하기 위해서 확장할 필요가 있다. 각 근육에 대해 자연 길이 뿐만이 아니라 근육 길이의 변화하는 범위가 각각 다르기 따문에, 이 두 개의 값을 기초로 변환을 행하였다. 구체적으로는, 근육 길이 및 자연 길이를 &amp;lt;math&amp;gt;l'&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;l_0'&amp;lt;/math&amp;gt;, 근육의 자연 길이로부터의 최대 변위가 &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;일때, &amp;lt;math&amp;gt;l \leftarrow 0.036\bigl(\frac{N-1}{D}(l' - l_0') + 1\bigr)&amp;lt;/math&amp;gt;으로 치환하는 것으로 행하였다. 단 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;은 근방추의 활동도의 변화율을 결정하는 파라미터이다. 최대 변위 &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;에 대해서는, 각 관절에 대해 관절이 움직일 수 있는 한계(관절 가동각)의 상한 하한을 랜덤으로 정했을 때에 취하는 자세를 충분히 많이 뽑아, 그 때의 최대 변위를 기초로 결정했다.&lt;br /&gt;
&lt;br /&gt;
=== 3.3.4 태내 환경과 촉각 모델 ===&lt;br /&gt;
태내 환경은 자궁막과 양수로부터 모델화되어 있다. 태아 모델은, 자궁막에 의한 중심에의 구심력과, 양수에 의한 유체저항 및 부력을 받는다. 자궁막에 의한 구심력은 각 강체에 할당된 매 접촉점마다 정의된다. 접촉점 &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;의 법선 벡터를 &amp;lt;math&amp;gt;\boldsymbol{n} _i&amp;lt;/math&amp;gt;, 표면적을 &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;, 위치 벡터를 &amp;lt;math&amp;gt;\boldsymbol{p} _i&amp;lt;/math&amp;gt;라고 하면, 자궁막에 의한 구심력 &amp;lt;math&amp;gt;\boldsymbol{F} _{u,i}&amp;lt;/math&amp;gt;는 이하의 식에 의해 모델화된다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\boldsymbol{F} _{u,i} = - f_{u,i} A_i \boldsymbol{n} _i \qquad (3.21)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;f_{u,i} = \begin{cases} (K_u r_i + C_u \dot{r}_i) + \frac{(\boldsymbol{n} _i \cdot \boldsymbol{q} _ i) _+}{\lVert \boldsymbol{q} _i \rVert} &amp;amp; (r_i &amp;gt; 0) \\ 0 &amp;amp; (r_i \leq 0) \end{cases} \qquad (3.22)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;r_i = \lVert \boldsymbol{q} _i \rVert - R_u \qquad (3.23)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\boldsymbol{q} _i = \boldsymbol{p} _i - \boldsymbol{p} _u \qquad (3.24)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;f_{u,i}&amp;lt;/math&amp;gt;는 접촉점 &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;에서의 압력을 나타내고, &amp;lt;math&amp;gt;\boldsymbol{p}_u&amp;lt;/math&amp;gt;는 자궁막의 중심 위치 벡터, &amp;lt;math&amp;gt;R_u&amp;lt;/math&amp;gt;는 자궁막 저항이 발생하는 반경을 나타낸다. &amp;lt;math&amp;gt;K_u&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_u&amp;lt;/math&amp;gt;는 각각 탄성과 점성의 상수 파라미터이다. &amp;lt;math&amp;gt;(x)_+&amp;lt;/math&amp;gt;는, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;가 양수인 경우에 &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;를 반환하고, 음수인 경우 0을 반환한는 사상이다. 본 실험에서는, &amp;lt;math&amp;gt;R_u = 0.05 \ \mathrm{m}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;K_u = 1.0 \ \mathrm{Pa/m}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_u = 0.01 \ \mathrm{Pa \cdot s/m}&amp;lt;/math&amp;gt;으로 했다. 또한, 강체에 속한 접촉점에 분배된 표면적 &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;의 합계는, 그 강체의 표면적에 일치한다.&lt;br /&gt;
&lt;br /&gt;
유체 저항에 대해서도 같은 방식으로 매 접촉점에 계산이 행해진다. 각 접촉점의 유체저항 &amp;lt;math&amp;gt;F_{a,i}&amp;lt;/math&amp;gt;는 이하의 식으로 정의된다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\boldsymbol{F} _{a,i} = - f_{a,i} A_i \boldsymbol{n} _i \qquad (3.25)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;f_{a,i} = \frac{1}{2} \rho C_D (\boldsymbol{\nu} \cdot \boldsymbol{n} _ i) ^2 \qquad (3.26)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;f_{u,i}&amp;lt;/math&amp;gt;는 접촉점 &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;에서의 유체 저항에 의한 압력을 나타내고, &amp;lt;math&amp;gt;\boldsymbol{\nu}&amp;lt;/math&amp;gt;는 소속된 강체의 속도, &amp;lt;math&amp;gt;\rho&amp;lt;/math&amp;gt;는 양수의 밀도, &amp;lt;math&amp;gt;C_D&amp;lt;/math&amp;gt;는 항력 계수를 나타낸다. 본 연구에서는, &amp;lt;math&amp;gt;\rho = 1010 \mathrm{kg/m^3}&amp;lt;/math&amp;gt;[204], &amp;lt;math&amp;gt;C_D = 1.0 \ \mathrm{Pa \cdot m / kg \cdot s^2}&amp;lt;/math&amp;gt;으로 설정했다. 부력은 각 강체의 체적을 밀도 일정으로서 계산되어 있다.&lt;br /&gt;
&lt;br /&gt;
태아 시뮬레이션에서는, 촉각 자극의 감각 피드백을 모델화 하기 위해서, 전신에 800개의 촉각감각기 모델을 배치했다 (Table 3.5 and Fig. 3.14). 이 분포는 Weinstein에 의한, 사람의 각 신체 부위의 이점변별역 (역주: 두 점 변별 경계) [518]에 기초하여 결정되어 있다. 각 신체 부위에 대해서는, 그 분배 수를 랜덤하게 배치하는 것으로 촉각의 배치를 행했다. 촉각기의 모델으로서는, 사람의 촉각의 기계 수용체의 하나이며, 주로 물체의 접촉 검지에 기여하고 있다고 하는 메르켈 세포를 모델화했다. 본 연구에서 취급하는 것은 강체 시뮬레이션이므로, 피부의 진동이나 비틀림을 상정하고 있지 않기 때문에, 남은 세 개의 기계수용기의 모델화는 이번에는 생략했다. Freeman 등이 보인 사람의 감각 수용기가 고유의 주파수 응답 특성을 갖고 있다고 하는 지견 [133]에 기초하여, Shirado 등은 메르켈 세포를 컷오프 주파수 50Hz의 Low-pass 필터로서 모델화 하고 있다 [442]. 본 연구에서도, 이 모델을 메르켈 세포의 모델으로서 채용했다.&lt;br /&gt;
&lt;br /&gt;
감각 세포 모델의 입력 압력은, 태내 환경에서는 자궁막에 의한 압력, 유체 저항, 강체끼리의 접촉에 의한 압력 세 가지가 입력된다. 자궁막에 의한 압력, 유체 저항에 대해서는, 전신에 배치된 촉각점마다 계산된 &amp;lt;math&amp;gt;f_u&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;f_a&amp;lt;/math&amp;gt;가 사용된다. 접촉에 의한 압력에 대해서는, 물리 시뮬레이션에 의해 계산된 강체끼리의 접촉력을 접촉점마다 분배하는 형태로 계산한다. 접촉점 &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;가 속한 강체 &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;가, 강체 &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;와 충돌한 것에 의해 강체 &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;가 받은 힘을 &amp;lt;math&amp;gt;\boldsymbol{F} _{p,jk}&amp;lt;/math&amp;gt;로 하고, 접촉점 &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;와 강체 &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;와의 거리를 &amp;lt;math&amp;gt;l_{i,k}&amp;lt;/math&amp;gt;라고 하면, 접촉에 의한 압력 &amp;lt;math&amp;gt;f_{p,i}&amp;lt;/math&amp;gt;는, 이하의 식에 의해 계산된다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;f_{p,i} = \frac{1}{A_i} \frac{d_{i,k}}{\textstyle \sum_{n} \displaystyle d_{n,k}} \lVert \boldsymbol{F} _{p,jk} \rVert \qquad (3.27)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;d_{i,k} = A_{i}(L_c - l_{i,k})_+ \ (-\boldsymbol{F}_{p,jk} \cdot \boldsymbol{n}_i)_+ \qquad (3.28)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;L_c&amp;lt;/math&amp;gt;는 접촉력을 분배하는 최소의 거리를 나타내는 상수 파라미터이다. 본 연구에서는, &amp;lt;math&amp;gt;L_c = 5 \mathrm{mm}&amp;lt;/math&amp;gt;으로 했다.&lt;br /&gt;
&lt;br /&gt;
=== 3.3.5 태아의 나이에 기초한 태아 물리 모델 ===&lt;br /&gt;
작성한 태아 모델에 기초하여, 원하는 태아의 나이를 시뮬레이션 하기 위한 방법에 대해서 설명한다. 태아의 나이의 변화에 기초하여 변화시키는 파라미터는 체중과 근력 두 가지이다. 구체적으로는 이하의 두 개의 수순으로 행한다. 첫 번째로, Archie 등에 의한 각 태아의 나이에 대한 태아의 체중의 분포의 평균치 [14]를 사용하여 체중을 결정하고, 태아 모델을 스케일링한다. 두 번째로, Stickland에 의한 사람 태아의 봉공근 (역주: 넙다리빗근, Sartorius)의 단면적과 체중의 관계성에 대해서 데이터 [468]을 기초로 각 근육의 근단면적을 구해, 근단면적과 근력의 관계성 [213]으로부터 대상이 되는 태아의 나이에 대한 각 근육의 최대 수의 수축력을 결정한다. 이 모델화에서는 각 신체 부위의 비율은 일정하다고 한 것에 유의해 둔다. 작성한 태아 모델의 예시를 Fig. 3.15에 보인다.&lt;br /&gt;
&lt;br /&gt;
=== 3.3.6 태아 모델을 위한 동역학 계산과 충돌 계산 ===&lt;br /&gt;
태아 모델의 물리 시뮬레이션을 ODE 위에서 안정적으로 행하기 위해 위에서의 문제점과 강구한 대책에 대해서 설명한다. 생겨난 문제는 크기가 작은 것, 폴리곤 모델인 것 두 가지에 기인한 것이다.&lt;br /&gt;
&lt;br /&gt;
첫 번째로 크기가 작기 때문에 생겨난 문제와 대책에 대해서 설명한다. 이번의 모델화하고 권동을 확인한 태아 모델은, 가장 작을 때는 12주일 때 두둔 길이(역주: CRL, 머리에서 엉덩이까지의 길이)는 76.1mm이다. 이 12주 태아 모델의 두부는 질량 &amp;lt;math&amp;gt;5.1 \times 10^{-3} \mathrm{kg}&amp;lt;/math&amp;gt;, 두부의 관성 텐서가 관절 축에 대해서 약 &amp;lt;math&amp;gt;2 \times 10^{-7} \mathrm{kg m^2}&amp;lt;/math&amp;gt;이다. 이 정도의 order가 되면, ODE의 내부에서 행해지는 가동역 한계를 갖는 관절이나 충돌 계산의 불안정성이 현저하게 된다. 이것은 시뮬레이션의 시간 스텝을 작게 하는 것이 하나의 해결책이지만, 그것만으로는 충분하지 않다. 행한 대책은 두 개가 있어, 하나는 관절에의 점성 저항의 도입, 한 개는 단위계의 변경이다. 관절에의 점성 저항은 근사 후퇴 오일러법에 의해 모델화했다. 단위계의 변경은 길이와 시간의 단위계를 변경하는 것에 의해 행했다.&lt;br /&gt;
&lt;br /&gt;
두 번째로, 태아 모델이 삼각 메시에 의해 표현된 폴리곤 모델이기 때문에, 충돌 계산이 적절하게 수행되지 않는 문제점이 있었다. ODE에서는 충돌 계산은 Geometry의 클래스 전 조합에 대해 개별으로 정의되어 있지만, 폴리곤 끼리의 충돌 계산은 매우 불안정하다고 말하고 있어, 실제 태아 시뮬레이션에서도 충돌 계산이 적절하게 행하여지지 않고 통과해버렸다. 한편, 폴리곤과 '캡슐 또는 구' 와의 충돌 계산에 대해서는 안정적인 경향이 있어, 태아 시뮬레이션의 범위에서는 통과하는 문제와 발생하지 않았다. 여기서 충돌 계산에 쓰인 기하학 형태에 대해서는, 사지를 캡슐 및 구로 근사했다 (Fig. 3.16). 얼굴에 대해서는, 눈과 귀, 입 등의 부분에 대해서 Re-topology를 행하는 것으로 한층 더 안정화와 고속화를 보였다.&lt;br /&gt;
&lt;br /&gt;
== 3.4 태아의 척수 및 피질 모델 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.4.1 개요 ===&lt;br /&gt;
척수 및 피질 모델에 대해서 설명한다. 척수 모델은, 근육의 고유 감각 피드백을 입력으로 하고, 근육에의 운동 지령을 출력으로 한다. 이 모델은 발달 초기의 자발 운동의 모델을 상정한 것이고, 이 가정의 타당성에 대해서는 제 4장의 실험에서 검증을 행한다. 피질 모델은 감각 피드백을 입력으로 하고, 가소성에 기초한 신경계 및 인지발달을 시뮬레이션하기 위해 사용한다. 구체적으로는, 제 5장에서 피질의 일차 영역인 체성 감각 영역, 제 6장에서는 뇌 전 영역을 시뮬레이션 할 때, 척수 모델에 피질 모델을 추가하는 형태로 시뮬레이션이 행해진다. 이 두 개의 모델에 대해서는, 기본적으로는 같은 뉴런 모델 및 가소성을 따르고, 체성 감각 영역 모델의 확장이 뇌 전 영역의 시뮬레이션이다고 말할 수 있다. 거기서 첫 번째로, 피질 모델의 기본 요소인 뉴런 모델과 가소성의 규칙에 대해서 설명을 행한다. 뉴런 간의 시냅스 결합에 대해서는 동일 영역 내를 포함한 근방에서는 랜덤을 기본으로서 생선된다. 대뇌 피질 전 영역의 시뮬레이션에 대한 영역 간의 결합에 대해서는, 신생아의 뇌 이미지 해석에 의해 도출을 행하여, 이것에 기초하여 결정했다. 거기서 두 번째로는, 이 영역 간의 결합 관계 도출에 대해서, 그 방법과 결과에 대해서 설명을 행한다. 또한 피질 모델에 대해서는, 대뇌 피질 출력과 운동의 관계성은 본 연구의 대상 외이므로, 피질으로부터 척수 및 근육에의 출력은 모델화되어 있지 않다. &lt;br /&gt;
&lt;br /&gt;
=== 3.4.2 척수신경회로 모델 ===&lt;br /&gt;
척수 신경 회로 모델은, 태생기의 전반의 매우 빠른 초기 발달의 시기로부터 시작하는 자발 운동에 대해서, 자발 운동의 기전 및 신체성과의 관계성에 대해서 찾아보는 것을 가능하게 하는 모델일 필요가 있다. 그를 위해, 명시적인 운동 표현이나 근육 간 협조 관계를 상정하지 않고, 생물학적 지식에 기초하여 최소한의 가정만으로부터 구성되는 모델이 원해진다. 하지만, 자발 운동과의 관계성이 많은 문헌에서 지적되어 있는 신경 진동자에 대해서는, 단일의 근육에의 출력계로서 모델에 포함한 경우는, 본 연구의 목적으로부터 타당한 가정이라고 생각된다. 상기의 이유로부터, 척수 신경 회로 모델에 대해서는, Kuniyoshi and Sangawa에 의한 모델 [263]을 사용했다. 이 모델은, 근육 장력, 근육 길이의 감각 정보를 입력으로 하여, 근육의 활동도를 결정하는 운동 지력을 출력으로 한다. 각 근육은 신경진동자를 포함한 단위 유닛에 의해 독립으로 제어되고, 동일한 근육 레벨 이외의 반사 회로는 들어있지 않고, 신경계 레벨에서 근육 간의 결합은 일절 갖지 않는다. 즉, 명시적인 운동 표현이나 근육 간의 관계성을 결정하는 요소는 일절 들어있지 않다. 이 모델에 의한 연구에서는, 운동 창발의 예비 실험만이 보고되어 있어, 평가는 정성적인 것으로 생물의 자발 운동과의 관계성에 대해서는 취급되어 있지 않다. 여기서 본 연구에서는 이 모델을 사용하여, 창발한 운동에 대해서 정량화 및 사람의 자발 운동 특징과의 비교를 행하는 것으로부터 시작하는 것으로 했다.&lt;br /&gt;
&lt;br /&gt;
모델의 단위 유닛은, 근육, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;운동 뉴런, 척수 내 개재성 감각 뉴런 S0, 그리고 신경진동자 모델으로부터 구성된다 (Fig. 3.17). 이 모델 간의 결합에 대해서는 생물학적 지식을 고려한 지연과 이득이 설정되어 있다. 이하, 각 모델에 대해서 설명을 행한다.&lt;br /&gt;
&lt;br /&gt;
척수 내 뉴런의 다이나믹스는, 고양이나 사람의 &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;운동 뉴련에 대한 실험적인 데이터 [26, 84, 305]에 기초하여, Band-pass 필터로서 모델화 된 He에 의한 운동 뉴런 모델 [181]이 사용되고 있다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{m(s)}{i(s)} = k_{\text{m}}\frac{(1 + s/33 + (s/33)^2)}{1 + 2(s/58) + (s/58)^2} \qquad (3.29)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;는 입력신호 &amp;lt;math&amp;gt;[\mathrm{nA}]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;은 출력 신호 &amp;lt;math&amp;gt;[\mathrm{p/s}]&amp;lt;/math&amp;gt;이다. 입출력 신호 둘 다 0에서 1까지의 범위이고, 범위에서 나간 경우에 대해서는, 그 범위에 들어가도록 역치처리를 하고 있다. 또한, &amp;lt;math&amp;gt;k_{\text{m}}&amp;lt;/math&amp;gt;상수 파라미터이며, 입력 전류 &amp;lt;math&amp;gt;1 \mathrm{nA}&amp;lt;/math&amp;gt;에서의 발화율을 나타낸다. 실험 데이터 [26]으로부터 &amp;lt;math&amp;gt;k_{\text{m}} = 1.5 \mathrm{p/s/nA}&amp;lt;/math&amp;gt;으로 설정되어 있다. 척수 개재 뉴런의 다이나믹스에 대해서는 연구가 적기 때문에, 운동 뉴런의 다이나믹스에 의해 대체된 경우가 많다 [181, 85]. 본 연구에서도, 척수 개재 뉴런에 대해서는 상기의 운동 뉴런 다이나믹스를 사용한 모델을 채용하고 있다.&lt;br /&gt;
&lt;br /&gt;
신경 진동자 모델에 대해서 설명한다. 본 연구에서는, 생리학적 상세한 모델이 아닌 비선형 진동자에 의한 모델을 사용했다. 이것은, 신경 세포 모델에서부터 구성된 신경 회로망과 리듬적인 활동 패턴의 관계성을 조사하는 것을 주로 하고 있는 것, 거기에, 전신의 규모에서 시뮬레이션을 행하는 것은 계산 비용이 높은 것이 있다 [159, 63, 420, 508]. 한편, 비선형 진동자는 신경 세포 레벨보다 추상도가 높은 단순한 모델이기는 하지만, 리듬적인 활동 패턴과 운동의 관계성을 조사하는 이론 연구의 많은 경우에 실제로 사용되고 있어, 계산 비용도 낮다 [172, 95, 148]. 게다가, 이러한 진동적인 활동 패턴은 발달 초기부터 척수에 대해서 이미 관찰되어지는 것이 닭이나 쥐의 배를 조사한 연구에 의해 보고되어 있다 [176, 399, 536, 13, 177]. 본 연구에서는, 어떻게 진동적인 활동이 신경 회로망으로부터 창발하는가에 대해서는 다루지 않고, 그 활동을 베이스로서 환경과 상호작용하는 것에 의해 발생하는 감각/운동정보구조나 그 발달적 변화에 대해서 다루는 것을 목적으로 하고 있기 때문에, 신경 진동자 모델으로 충분하다고 판단했다.&lt;br /&gt;
&lt;br /&gt;
신경 진동자 모델으로서는, Asai 등에 의한 모델 [18, 1, 17]에 기초한 Kuniyoshi and Sangawa [263]에 의한 것을 사용했다. 먼저, Asai 등에 의한 신경 진동자 모델을 설명한다. 이 모델은, 두 개의 계가 상호로 제어하여 맞추는 것에 의해 상호적 활동 패턴을 생성하는 하프 센터 형태 [60, 224, 311]의 신경 진동자 모델이다. 또한, 모델의 권동은 임상적으로 관찰되어 있는 활동 패턴의 경향을 재현 가능하다고 되어 있다 [18, 17]. 각각의 계는, Fitzhugh-Nagumo (Bonhoeffer-van der Pol: BVP) 방정식에 의해 모델화 되어 있다 [132, 340]. Fitzhugh-Nagumo 방정식은, 상세하게 생물 물리학적 타당성이 높은 Hodgkin-Huxley 방정식 [194]와 비교하면 단순화 되어 있지만, 신경 세포의 흥분성 및 진동막에서 보여지는 전형적 성질을 표현 가능하다고 되어 있다 [355, 535]. 두 개의 Fitzhugh-Nagumo 방정식으로부터 구성된 신경 진동자 모델은 다음의 식으로부터 성립한다 [18].&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{\mathrm{d}x_1}{\mathrm{d}t} = c \Bigl( x_1 - \frac{1}{3}x_1^3 - y_1 + z_1\Bigr) + \delta(x_2 - x_1) \qquad (3.30)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{\mathrm{d}y_1}{\mathrm{d}t} = \frac{1}{c} ( x_1 - by_1 + a) + \epsilon x_2 \qquad (3.31)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{\mathrm{d}x_2}{\mathrm{d}t} = c \Bigl( x_2 - \frac{1}{3}x_2^3 - y_2 + z_2\Bigr) + \delta(x_1 - x_2) \qquad (3.32)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{\mathrm{d}y_2}{\mathrm{d}t} = \frac{1}{c} ( x_2 - by_2 + a) + \epsilon x_1 \qquad (3.33)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;는 각각 막 전위, 불응성을 나타낸다. &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;는 외부 전류 자극에 해당하고, &amp;lt;math&amp;gt;z_1&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;z_2&amp;lt;/math&amp;gt;의 관계성을 변화시키는 것으로 출력의 성질을 변화시키는 것이 가능하다. 구체적으로는, 동일의 경우 교대성의 주기적인 출력 &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;가 관찰되고, 다른 경우에는 그것이 복잡한 권동을 나타내는 것이 보고되어 있다 [17]. 또한, 파라미터는 &amp;lt;math&amp;gt;a = 0.7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 0.675&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = 1.75&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\delta = 0.013&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\epsilon = 0.022&amp;lt;/math&amp;gt;의 값으로 설정되어 있다.&lt;br /&gt;
&lt;br /&gt;
외부 입력에 의해 주기적인 출력과 복잡한 출력의 전환이 가능한 점에 착목하여, Kuniyoshi and Sangawa는 초기의 자발 운동의 모델으로서, 신경 진동자 모델을 다음으로 정의했다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\tau \frac{\mathrm{d}x}{\mathrm{d}t} = c \Bigl( x - \frac{1}{3}x^3 - y + z\Bigr) + \delta(s_{S0} - x) \qquad (3.34)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\tau \frac{\mathrm{d}y}{\mathrm{d}t} = \frac{1}{c} ( x - by + a) + \epsilon s_{S0} \qquad (3.35)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Asai 등에 의한 모델과의 차이는 한 쪽의 Fitzhugh-Nagumo 방정식만을 사용하고, 그 한 쪽으로부터 입력을 입력 피드백 &amp;lt;math&amp;gt;s_{S0}&amp;lt;/math&amp;gt;으로 한 것이다. Asai 등의 모델을 포함한 하프 센터 형태 모델은, 굴근(역주: 굽어지는 근육)과 신근(역주: 펴지는 근육), 또는 좌우의 다리의 교대성의 진동적 패턴을 대상으로 하고 있다. 그를 위해, 로코모션 중의 근육 활동을 두 개의 그룹으로 크게 나눠 설명하려는 문제점이 있다 [158, 311]. 게다가, 전신 운동을 대상으로 하면 문제가 더욱 심각해져서, 어떻게 근육 군을 분리할까도, 그러한 근육 간 또는 좌우의 협조 관계를 앞서 가정하는 것이 초기 발달을 대상으로 한 모델으로서는 타당성이 있는가도 문제가 되어 온다. Kuniyoshi and Sangawa는 이 문제는, 한 쪽의 반대가 되는 Fitzhugh-Nagumo 방정식을 신경계가 아닌 신체/환경 측에서 구하는 것으로 해결을 시험해 보았다. 신경 진동자 모델에 있는 단일의 Fitzhugh-Nagumo 방정식은, 그 출력에 의해 신체를 움직이고, 환경에서 움직여서, 그 결과로서 감각 피드백을 얻는다. 감각 피드백이 랜덤이 아닌, 신체/환경에 의해 구조화 되어, 그 관계성이 일정하지 않다는 것을 보이면, 그것은 Asai 등에 의한 상호로 일정한 관계성으로 결합된 두 개의 계와 동질한 권동을 하고 있다, 라는 가정에 기초하고 있다. 이 Kuniyoshi and Sangawa에 의한 신경 진동자 모델은, 다양한 운동의 창발을 확인했다, 라는 정성적인 보고에 멈춰 있기 때문에, 본 연구에서는 이 모델을 사용하여, 정량적인 평가와 상기의 가정이 성립하고 있는가의 이론적 검증을 행하는 것으로부터 시작할 필요가 있다.&lt;br /&gt;
&lt;br /&gt;
=== 3.4.3 피질 모델의 기본 구성 요소 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.4.4 뇌 이미지 해석에 의한 신생아 뇌 결합 행렬 도출 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.4.5 신생아 뇌 이미지 데이터에 기초한 피질 모델 ===&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=196</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=196"/>
		<updated>2020-11-29T15:43:34Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* 실제 사용 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위(시작 시각, 길이)&lt;br /&gt;
*** -ss 01:23:45.678 -t 01:23:45.678&lt;br /&gt;
** 인코딩 없이 자르기만 하기&lt;br /&gt;
*** -vcodec copy -acodec copy&lt;br /&gt;
** 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)&lt;br /&gt;
*** -vcodec mpeg4 -acodec libmp3lame -qscale 1&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=195</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=195"/>
		<updated>2020-11-26T12:17:30Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: /* 실제 사용 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* ffmpeg의 활용&lt;br /&gt;
** 베이스&lt;br /&gt;
*** ffmpeg -i (입력 동영상) (출력 동영상)&lt;br /&gt;
** 배속 조절 (2배)&lt;br /&gt;
*** -filter:v &amp;quot;setpts=PTS/2&amp;quot;&lt;br /&gt;
** 범위&lt;br /&gt;
*** --from 01:23:45.678 --to 01:23:45.678&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
* 리눅스에서 동영상 자르기&lt;br /&gt;
** 35초 시점부터 30초간의 영상 획득&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -ss 00:00:35 -t 00:00:30 -i 입력영상파일 -vcodec copy -acodec copy 출력영상파일&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ovg -&amp;gt; avi 동영상 인코딩&lt;br /&gt;
** ffmpeg -i input.ovg -vcodec mpeg4 -acodec libmp3lame -ss 00:00:02 -qscale 1 output.avi&lt;br /&gt;
** -ss 시작 시간&lt;br /&gt;
** -qscale 화질, 숫자가 낮으면 좋다&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=Git_%EB%A9%94%EB%AA%A8&amp;diff=194</id>
		<title>Git 메모</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=Git_%EB%A9%94%EB%AA%A8&amp;diff=194"/>
		<updated>2020-10-10T09:51:26Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: 새 문서: &amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Remote 레포 추가&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; git remote add origin ssh://git@svc:29418/d-kim/dcem.git git remote add github ssh://git@github.com/kim135797531/d...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Remote 레포 추가&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git remote add origin ssh://git@svc:29418/d-kim/dcem.git&lt;br /&gt;
git remote add github ssh://git@github.com/kim135797531/dcem.git&lt;br /&gt;
git push -u origin master&lt;br /&gt;
git push -u master master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=193</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=193"/>
		<updated>2020-10-04T11:17:08Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
* Gnome에서 Alt+F5 단축키 비활성화하기&lt;br /&gt;
** dconf-editor에서 &amp;lt;Alt&amp;gt;F5 지우기&lt;br /&gt;
*** org.gnome.desktop.wm.keybindings.unmaximize = ['&amp;lt;Super&amp;gt;Down']&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=192</id>
		<title>시놀로지 도커 설정</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80_%EB%8F%84%EC%BB%A4_%EC%84%A4%EC%A0%95&amp;diff=192"/>
		<updated>2020-09-26T13:32:51Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 외부 노출 서버 (시놀로지 VMM) ==&lt;br /&gt;
&lt;br /&gt;
* alpine-virt-3.11.3&lt;br /&gt;
&lt;br /&gt;
=== 역할 ===&lt;br /&gt;
&lt;br /&gt;
* 현재 IPv6 Cloudflare에 보고(갱신)&lt;br /&gt;
* 웹 프록시&lt;br /&gt;
&lt;br /&gt;
=== 마운트 설정 ===&lt;br /&gt;
&lt;br /&gt;
* alpine에 nfsmount 설치&lt;br /&gt;
** apk add nfsmount&lt;br /&gt;
* /etc/fstab에 다음 내용 추가&lt;br /&gt;
** 맨 뒤의 _netdev와 0 0을 꼭 추가해야 한다 (안하면 네트워크 연결 전에 마운트 시도해서 부팅 안 됨)&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
내부서버IP:/volume1/시놀로지폴더 /마운트경로 nfs nfsvers=3,rsize=524288,wsize=524288,ro,auto,nolock,_netdev 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare 연동 IP 등록 ===&lt;br /&gt;
&lt;br /&gt;
* 일본 특성상 IPv4 포트가 매우 제한적으로 열려 있고, 10000번대 밑으로는 아예 열리지도 않음&lt;br /&gt;
* IPv6는 이런 제한이 없음. 공유기가 각각의 머신에 뿌려주는 IP는 DHCP라기보다는 일본 인터넷에 직접 연결된 공인 IP.&lt;br /&gt;
** IPv6는 설계시부터 모든 기기가 고유의 공인 IP를 갖는 형태로 설계됨. 다만 그 특성상 보안에 취약하므로, 영구 IPv6 주소와 별개로 임시 IPv6가 부여되어, 수시로 주소가 바뀜.&lt;br /&gt;
** 주소 바뀜을 체크하여, Cloudflare DNS에 등록해 주는 역할 (v6 레코드인 AAAA를 업데이트 함)&lt;br /&gt;
** 다음 파일을 alpine 서버의 /etc/init.d에 저장. (파일 이름 cloudflare-alpine.service)&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
# $apk add python3&lt;br /&gt;
# $apk add py3-requests&lt;br /&gt;
# Copy this file into /etc/init.d/&lt;br /&gt;
# Test by $rc-service cloudflare-alpine.service start&lt;br /&gt;
# $rc-update add cloudflare-alpine.service&lt;br /&gt;
# $rc-service cloudflare-alpine.service restart&lt;br /&gt;
# $rc-update -u&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;Update Cloudflare DNS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
command=&amp;quot;/usr/bin/python3 /root/cloudflare-alpine.py&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;/var/run/cloudflare/cloudflare.pid&amp;quot;&lt;br /&gt;
command_background=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
        need net&lt;br /&gt;
        need nfsmount&lt;br /&gt;
        need sshd&lt;br /&gt;
        after iptables&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        ebegin &amp;quot;Starting cloudflare&amp;quot;&lt;br /&gt;
        mkdir -p /var/run/cloudflare || return 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;실제 업데이트를 수행하는 Python 파일을 위의 서비스 스크립트에 지정된 위치로 잘 저장&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_KEY = 'XXX'&lt;br /&gt;
CLOUDFLARE_ZONE_ID = 'XXX'&lt;br /&gt;
CLOUDFLARE_DNS_TOKEN = 'XXX'&lt;br /&gt;
&lt;br /&gt;
CLOUDFLARE_HEADER = {&lt;br /&gt;
    'Authorization': 'Bearer {}'.format(CLOUDFLARE_DNS_TOKEN),&lt;br /&gt;
    'Content-Type': 'application/json'&lt;br /&gt;
}&lt;br /&gt;
DNS_GET_URL = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(CLOUDFLARE_ZONE_ID)&lt;br /&gt;
&lt;br /&gt;
device = 'eth0'&lt;br /&gt;
addr_file = '/tmp/cloudflare.addr6'&lt;br /&gt;
&lt;br /&gt;
def check():&lt;br /&gt;
    addr = ''&lt;br /&gt;
    try:&lt;br /&gt;
        with open(addr_file, 'r') as f:&lt;br /&gt;
            addr = f.read()&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    get_addr_cmd = &amp;quot;ip -6 addr list scope global $device | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v ' fd' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'deprecated' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;grep -v 'mngtmpaddr' | &amp;quot; \&lt;br /&gt;
                   &amp;quot;head -n 2 | &amp;quot; \&lt;br /&gt;
                   &amp;quot;tail -n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    new_addr = os.popen(get_addr_cmd).read()&lt;br /&gt;
    new_addr = new_addr.split()[1]&lt;br /&gt;
    new_addr = new_addr.split('/')[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if addr == new_addr:&lt;br /&gt;
        print('same ip {}'.format(new_addr))&lt;br /&gt;
    else:&lt;br /&gt;
        r = requests.get(DNS_GET_URL, headers=CLOUDFLARE_HEADER)&lt;br /&gt;
        j = json.loads(r.text)&lt;br /&gt;
&lt;br /&gt;
        for item in j['result']:&lt;br /&gt;
            dns_put_url = DNS_GET_URL + '/' + item['id']&lt;br /&gt;
            new_data = dict(&lt;br /&gt;
                type=item['type'],&lt;br /&gt;
                name=item['name'],&lt;br /&gt;
                content=new_addr,&lt;br /&gt;
            )&lt;br /&gt;
            if item['type'] == 'AAAA':&lt;br /&gt;
                new_data['proxied'] = True&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
            elif item['type'] == 'TXT':&lt;br /&gt;
                new_data['content'] = 'v=spf1 {} ~all'.format(new_addr)&lt;br /&gt;
                requests.put(dns_put_url, data=json.dumps(new_data), headers=CLOUDFLARE_HEADER)&lt;br /&gt;
&lt;br /&gt;
        with open(addr_file, 'w') as f:&lt;br /&gt;
            f.write(new_addr)&lt;br /&gt;
            f.close()&lt;br /&gt;
        print('updated ip {}'.format(new_addr))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    check()&lt;br /&gt;
    sleep(60)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 그 후 서비스 등록&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
rc-update add cloudflare-alpine.service&lt;br /&gt;
rc-service cloudflare-alpine.service restart&lt;br /&gt;
rc-update -u&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 프록시 ===&lt;br /&gt;
&lt;br /&gt;
* Cloudflare로부터 오는 HTTPS 요청을 처리하여, 내부 서버에 전달&lt;br /&gt;
* 처음 도입 목적은 Cloudflare의 IPv6 over IPv4 기능을 이용하기 위함&lt;br /&gt;
* 생각해보니 외부/내부를 분리하여 보안성도 높아지고, 도커를 이용한 로드밸런서 구현 및 포트 번호 추상화가 가능해져 채택&lt;br /&gt;
* /etc/nginx/conf.d는 시놀로지에 config를 등록해 놓고 폴더째로 마운트&lt;br /&gt;
* wiki-proxy.conf 예시&lt;br /&gt;
** proxy_set_header를 설정해야 내부 서버에서 보이는 접속 요청 IP가 실제 사용자의 IP로 제대로 뜬다&lt;br /&gt;
** 내부 서버사이의 통신은 http로 하여 속도 향상 (방화벽 설정은 따로)&lt;br /&gt;
** TODO: upstream 요청 처리가 60초 이상 걸려도 취소 안 하게 설정하기? wiki의 restbase나 mathoid가 고장나는 이유가 이것 때문인 듯&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    listen   [::]:80;&lt;br /&gt;
    server_name wiki.dong-min.kim;&lt;br /&gt;
        &lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$server_name$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
	listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate pem파일;&lt;br /&gt;
    ssl_certificate_key key파일;&lt;br /&gt;
        &lt;br /&gt;
	server_name wiki.dong-min.kim;&lt;br /&gt;
    server_tokens off;&lt;br /&gt;
   &lt;br /&gt;
	location / {&lt;br /&gt;
        proxy_set_header  Host $host;&lt;br /&gt;
        proxy_set_header  X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header  X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header  Client-IP $remote_addr;&lt;br /&gt;
		proxy_pass http://내부 서버 주소:포트;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 웹 데몬 ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* HTTP 요청을 받아서&lt;br /&gt;
** 직접 처리(static)하거나&lt;br /&gt;
** PHP 인터프리터로 보내거나&lt;br /&gt;
** 다른 웹 데몬(Node.js, Python, ...)으로 다시 proxy한다&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/nginx&lt;br /&gt;
* 1.17.8-alpine&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** htpasswd -&amp;gt; (비공개)/htpasswd&lt;br /&gt;
** passwd -&amp;gt; /etc/passwd&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
** nginx/conf.d/ -&amp;gt; /etc/nginx/conf.d/&lt;br /&gt;
** nginx/nginx.conf -&amp;gt; /etc/nginx/nginx.conf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 ==&lt;br /&gt;
&lt;br /&gt;
=== PHP (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* PHP 데몬&lt;br /&gt;
* FPM(FastCGI Process Manager) 사용하여 동적 워커 생성&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 공식 레포지토리의 7.2.9-fpm-alpine 기반&lt;br /&gt;
* 추가로 PHP 확장 기능을 설치하기 위해 Dockerfile 작성&lt;br /&gt;
** gd, mysqli&lt;br /&gt;
* 이용한 라이브러리&lt;br /&gt;
** https://github.com/mlocati/docker-php-extension-installer&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/kim135797531/php-fpm-kdm-extensions&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9000&lt;br /&gt;
** 참고로 www.conf에서 다른 포트로 설정해도 php-fpm.d/zz-docker.conf에서 무조건 기본값으로 바꿈&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** php.ini -&amp;gt; /usr/local/etc/php/php.ini&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf&lt;br /&gt;
** www.conf -&amp;gt; /usr/local/etc/php-fpm.d/www.conf.default&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
==== php.ini 설정 ====&lt;br /&gt;
&lt;br /&gt;
* max_execution_time = 30&lt;br /&gt;
* max_input_time = 60&lt;br /&gt;
* memory_limit = 512M&lt;br /&gt;
* post_max_size = 10240M&lt;br /&gt;
* upload_max_filesize = 10240M&lt;br /&gt;
* default_socket_timeout = 30&lt;br /&gt;
* extension gd2, mysqli 활성화&lt;br /&gt;
&lt;br /&gt;
==== www.conf 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 여기 설정은 주로 미디어위키의 VisualEditor 확장 기능 + Math 수식 입력기를 사용할 때 Restbase 서버에 동시에 많은 요청을 보내는 것을 처리하기 위해 필요함&lt;br /&gt;
&lt;br /&gt;
* pm.max_children = 16&lt;br /&gt;
* pm.start_servers = 16&lt;br /&gt;
* pm.min_spare_servers = 16&lt;br /&gt;
* pm.max_spare_servers = 16&lt;br /&gt;
* pm.process_idle_timeout = 30s&lt;br /&gt;
&lt;br /&gt;
== 데이터베이스 ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 워드프레스, 미디어위키에 사용하기 위한 범용 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/mysql&lt;br /&gt;
* 5.7.29&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (외부 노출 서버 Nginx Proxy 포트 설정 시작 번호-2):(그대로)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** MySQL 실제 DB 파일 폴더 -&amp;gt; /var/lib/mysql/&lt;br /&gt;
** mysql.cnf -&amp;gt; /etc/mysql/conf.d/mysql.cnf&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Cassandra (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API 백엔드 Restbase에서 사용하기 위한 고성능 데이터베이스&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/cassandra/&lt;br /&gt;
* 3.11.6&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):9042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** Cassandra 실제 DB 파일 폴더 -&amp;gt; /var/lib/cassandra/&lt;br /&gt;
** Cassandra 설정 폴더 -&amp;gt; /etc/cassandra/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CASSANDRA_BROADCAST_ADDRESS = (호스트 주소 - 집 안의 NAS IP)&lt;br /&gt;
&lt;br /&gt;
==== cassandra-env.sh 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* MAX_HEAP_SIZE=&amp;quot;128M&amp;quot;&lt;br /&gt;
* HEAP_NEWSIZE=&amp;quot;20M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== cassandra.yaml 설정 ====&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase 참고&lt;br /&gt;
* key_cache_size_in_mb: 0&lt;br /&gt;
* concurrent_reads: 2&lt;br /&gt;
* concurrent_writes: 2&lt;br /&gt;
* rpc_server_type: hsha&lt;br /&gt;
* rpc_min_threads: 1&lt;br /&gt;
* rpc_max_threads: 1&lt;br /&gt;
* concurrent_compactors: 1&lt;br /&gt;
* compaction_throughput_mb_per_sec: 0&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - Nginx 종속 ==&lt;br /&gt;
&lt;br /&gt;
=== 워드프레스 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 포트폴리오&lt;br /&gt;
* https://dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== wp-컨피그.php ====&lt;br /&gt;
&lt;br /&gt;
* FTPS 설정 (SFTP가 아니다)&lt;br /&gt;
* 프록시된 요청을 처리하기 위한 추가 설정&lt;br /&gt;
** $_SERVER['HTTPS']='on'; 구절만 있으면 된다&lt;br /&gt;
** 나머지는 프록시 서버 측의 설정이 잘못된 상태일 때 필요했었다&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FTP_HOST', '내부 서버 주소:내부 포트 번호');&lt;br /&gt;
define('FTP_USER', 'wp-ftps');&lt;br /&gt;
define('FTP_PASS', '');&lt;br /&gt;
define('FTP_SSL', true);&lt;br /&gt;
define('FTP_BASE', '(비공개)/wordpress/');&lt;br /&gt;
define('FTP_CONTENT_DIR', '(비공개)/wp-content/');&lt;br /&gt;
define('FTP_PLUGIN_DIR ', '(비공개)/wp-content/plugins/');&lt;br /&gt;
&lt;br /&gt;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')&lt;br /&gt;
    $_SERVER['HTTPS']='on';&lt;br /&gt;
    // define('RELOCATE', true); &lt;br /&gt;
    // define('WP_HOME', 'https://dong-min.kim');&lt;br /&gt;
    // define('WP_SITEURL', 'https://dong-min.kim');&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {&lt;br /&gt;
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 (파일) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 개인 위키&lt;br /&gt;
* https://wiki.dong-min.kim&lt;br /&gt;
&lt;br /&gt;
==== 확장 기능 ====&lt;br /&gt;
&lt;br /&gt;
* VisualEditor, Math, SyntaxHighlight&lt;br /&gt;
** VisualEditor와 Math를 연동할 때, 수식 편집기에서 동적 업데이트 횟수에 비례해서 서버가 느려지는 현상 발생&lt;br /&gt;
** Math 확장 기능에서 제공하는 MWLatexNode.js가 수식이 업데이트 될 때마다 과거 기록을 지우지 않고 전부 갖고 있는 버그가 원인&lt;br /&gt;
** 그 기록들도 매 번 의미없는 업데이트를 하느라 서버가 느려짐&lt;br /&gt;
** 임시 해결 방법&lt;br /&gt;
*** Math 확장 기능의 modules/ve-math/ve.ce.MWLatexNode.js 파일의 맨 아래 쪽에 다음 항목을 추가하여, 강제 업데이트를 방지&lt;br /&gt;
*** 이거 해도 새로 고침은 하지만, 적어도 Mathoid 서버에 새로 요청 하지는 않는다 (캐시 사용)&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @inheritdoc ve.ce.GeneratedContentNode&lt;br /&gt;
 */&lt;br /&gt;
ve.ce.MWLatexNode.prototype.onGeneratedContentNodeUpdate = function ( staged ) {&lt;br /&gt;
	// 꼼수... this.root가 있을 때만 업데이트함&lt;br /&gt;
	// this.root가 있는 노드는 실제 글 속의 math 노드 (다이얼로그 속은 root 없음)&lt;br /&gt;
	if (this.root)&lt;br /&gt;
		this.update( undefined, staged );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== LocalSettings.php ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// ... (생략)&lt;br /&gt;
&lt;br /&gt;
$wgArticlePath = &amp;quot;/view/$1&amp;quot;;&lt;br /&gt;
$wgUsePathInfo = true;&lt;br /&gt;
$wgScriptExtension = &amp;quot;.php&amp;quot;;&lt;br /&gt;
# $wgUploadPath = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgMathValidModes[] = 'mathml';&lt;br /&gt;
$wgDefaultUserOptions['math'] = 'mathml';&lt;br /&gt;
$wgMathFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
$wgMathMathMLUrl = 'https://wiki-mathoid.dong-min.kim';&lt;br /&gt;
&lt;br /&gt;
$wgDefaultUserOptions['visualeditor-enable'] = 1;&lt;br /&gt;
$wgHiddenPrefs[] = 'visualeditor-enable';&lt;br /&gt;
$wgVirtualRestConfig['modules']['parsoid'] = array(&lt;br /&gt;
    'url' =&amp;gt; 'http://wiki-parsoid.dong-min.kim',&lt;br /&gt;
    'domain' =&amp;gt; 'wiki.dong-min.kim',&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$wgVisualEditorRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/v1/page/html/';&lt;br /&gt;
$wgVisualEditorFullRestbaseURL = 'https://wiki-restbase.dong-min.kim/wiki.dong-min.kim/';&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Restbase (도커) ===&lt;br /&gt;
&lt;br /&gt;
* 이 Restbase를 비롯하여 아래의 Parsoid, Mathoid는 미디어위키에서 Visual Editor + Math 확장 기능을 사용하기 위해 설치함&lt;br /&gt;
* 원래 미디어위키에서 무료로 제공하는 기본 Restbase서버와 Mathoid 서버를 이용해도 되지만, 속도가 정말 '''&amp;lt;big&amp;gt;끔찍&amp;lt;/big&amp;gt;하게''' 느려서 직접 구축&lt;br /&gt;
* 제대로 된 문서가 없어서 구축 삽질 엄청 했다... 코드 안에 mediawiki url 하드코딩이 너무 많아 뭐가 문제인지 발견하기가 힘들었다&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 API를 처리하기 위한 REST 처리 서버&lt;br /&gt;
* REST로 받은 요청을 내부 독립 서버 (Parsoid, Mathoid 등)에 전달 및 반환 결과 캐싱&lt;br /&gt;
* 기본 DB 세팅인 SQLite는 동시에 많은 요청이 들어오면 db파일이 죽는 경우가 있어서, Cassandra 세팅으로 바꿈&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-restbase-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-restbase&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):7231&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Parsoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Visual Editor 등에서 html &amp;lt;-&amp;gt; wikitext 간 변환 등을 위해 문서 실시간 파싱 등을 처리&lt;br /&gt;
* Node.js&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-parsoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-parsoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):8000&lt;br /&gt;
** (비공개):8001&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== 미디어위키 Mathoid (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 미디어위키의 Math 확장 기능에서 사용&lt;br /&gt;
* LaTeX 문법을 svg, png 등으로 변환&lt;br /&gt;
* Node.js 10&lt;br /&gt;
* pm2로 서비스화 시킴&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 인터넷에 떠도는 Dockerfile 기반으로 몇 가지 하드코딩을 넣어 이미지 생성&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid&lt;br /&gt;
* Restbase 소스 (하드코딩 + 버그 수정)&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-mathoid-src&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/repository/docker/kim135797531/docker-mathoid&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):10042&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config.yaml -&amp;gt; /mount/config.yaml&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
=== Deluge (토렌트) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 토렌트 서버&lt;br /&gt;
* 컨테이너를 완전히 OpenVPN으로 감싸서, VPN 등록이 되지 않은 상태에서는 네트워크 접속을 원천 차단&lt;br /&gt;
* *.ovpn 파일은 config 폴더에 넣으면 됨&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/binhex/arch-delugevpn&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (기본값)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** config/ -&amp;gt; /config&lt;br /&gt;
** (자료 저장 폴더) -&amp;gt; /data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** NAME_SERVERS = 1.1.1.1&lt;br /&gt;
** LAN_NETWORK = 호스트의 아이피 말고 호스트의 서브넷 (xxx.xxx.xxx.xxx/xx)&lt;br /&gt;
** ENABLE_PRIVOXY = yes&lt;br /&gt;
** PGID = 100&lt;br /&gt;
** PUID = 1026&lt;br /&gt;
** VPN_PROV = custom&lt;br /&gt;
** VPN_ENABLED = yes&lt;br /&gt;
** HOME = /config/home&lt;br /&gt;
&lt;br /&gt;
=== Gitlab ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 사설 Git 서버&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-ce/&lt;br /&gt;
* 12.8.8&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):22&lt;br /&gt;
** (비공개):80&lt;br /&gt;
** (비공개):443&lt;br /&gt;
** (비공개):5005&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab 실제 자료 폴더 -&amp;gt; /var/opt/gitlab/&lt;br /&gt;
** gitlab 설정 폴더 -&amp;gt; /etc/gitlab/&lt;br /&gt;
&lt;br /&gt;
==== gitlab.rb 설정 ====&lt;br /&gt;
&lt;br /&gt;
* external_url 'https://git.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['gitlab_ssh_host'] = 'kasumi.synology.me'&lt;br /&gt;
* gitlab_rails['time_zone'] = 'Asia/Seoul'&lt;br /&gt;
* gitlab_rails['gitlab_default_theme'] = 10  # dark(default) = 2, red = 9, light red = 10&lt;br /&gt;
* gitlab_rails['trusted_proxies'] = ['시놀로지IP', '프록시IP']&lt;br /&gt;
* gitlab_rails['gitlab_shell_ssh_port'] = 64100&lt;br /&gt;
* registry_external_url 'https://registry.dong-min.kim&amp;lt;nowiki/&amp;gt;'&lt;br /&gt;
* gitlab_rails['registry_enabled'] = true&lt;br /&gt;
* unicorn['worker_processes'] = 2&lt;br /&gt;
* sidekiq['concurrency'] = 3  # default 25&lt;br /&gt;
* nginx['gzip_enabled'] = false&lt;br /&gt;
* nginx['listen_port'] = 80&lt;br /&gt;
* nginx['listen_https'] = false&lt;br /&gt;
* registry_nginx['enable'] = true&lt;br /&gt;
* registry_nginx['gzip_enabled'] = false&lt;br /&gt;
* registry_nginx['listen_port'] = 5005&lt;br /&gt;
* registry_nginx['listen_https'] = false&lt;br /&gt;
&lt;br /&gt;
=== Gitlab Runner ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* Gitlab의 CI/CD 실행용 Runner&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/gitlab/gitlab-runner/&lt;br /&gt;
* 12.8.0&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 파일 설정&lt;br /&gt;
** docker.sock -&amp;gt; /var/run/docker.sock&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** gitlab runner 설정 폴더 -&amp;gt; /etc/gitlab-runner&lt;br /&gt;
* 주의점&lt;br /&gt;
** 시놀로지 docker를 쓰려면 시놀로지의 docker.sock이 필요하다.&lt;br /&gt;
*** 먼저 시놀로지 측에서 sudo ln -s /var/run/docker.sock /volume1/docker/docker.sock 으로 심볼릭 링크 생성&lt;br /&gt;
*** Gitlab Runner 컨테이너 생성할 때 위 파일 링크가 안 됨&lt;br /&gt;
*** 먼저 아무 파일이나 링크해서 일단 컨테이너 생성&lt;br /&gt;
*** 컨테이너 설정 백업해서, 그 파일 안에서 링크 수정&lt;br /&gt;
*** 수정한 컨테이너 설정을 다시 로드&lt;br /&gt;
** 컨테이너 실행 후 gitlab-runner register 명령어로 gitlab 등록&lt;br /&gt;
&lt;br /&gt;
=== kb_apart (광규 외주) (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 광규 외주 프로그램 - 아파트 시세 확인&lt;br /&gt;
&lt;br /&gt;
* gliderlabs/alpine:3.3 기반 (glibc 설치용)&lt;br /&gt;
* Miniconda3 설치&lt;br /&gt;
* Python 3.7.5 + Flask&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* Dockerfile&lt;br /&gt;
** https://git.dong-min.kim/kim135797531/docker-kb-apart-src&lt;br /&gt;
* 도커 레포지토리 없음 (비공개 코드)&lt;br /&gt;
** tar 파일로 직접 업로드&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):5000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** 법정동.txt -&amp;gt; /var/lib/kb_apart/utils/법정동.txt&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CONDA_ENV_NAME = kb_apart&lt;br /&gt;
&lt;br /&gt;
=== Internet Speed Logger (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 일정 주기마다 Speedtest 사이트로 속도 측정해서 그래프로 표시&lt;br /&gt;
* 자꾸 집 인터넷 QoS 걸리는 것 같아서 설치함&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 레포지토리&lt;br /&gt;
** https://hub.docker.com/r/vkentta/internet-speed-logger&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (비공개):3000&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** internet speed logger 설정 폴더 -&amp;gt; /usr/src/app/data&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** CHECK_PERIOD_MINUTES = 30&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== 응용 프로그램(애플리케이션) - 독립형 ==&lt;br /&gt;
&lt;br /&gt;
=== busybox (도커) ===&lt;br /&gt;
&lt;br /&gt;
==== 역할 ====&lt;br /&gt;
&lt;br /&gt;
* 도커 게스트 관점에서 바라보는 파일 권한 확인, 간단한 명령어 (curl이나 ping 등) 실행용&lt;br /&gt;
&lt;br /&gt;
==== 레포지토리 ====&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/_/busybox&lt;br /&gt;
* 1.31.1-glibc&lt;br /&gt;
&lt;br /&gt;
==== 컨테이너 설정 ====&lt;br /&gt;
&lt;br /&gt;
* 포트 설정&lt;br /&gt;
** (없음)&lt;br /&gt;
* 볼륨 설정&lt;br /&gt;
** www -&amp;gt; (비공개)/www/&lt;br /&gt;
* 환경 변수&lt;br /&gt;
** (기본값)&lt;br /&gt;
&lt;br /&gt;
== 권한 관련 팁 ==&lt;br /&gt;
Nginx, PHP의 404 Not found 오류는 권한 문제일 때가 많다. 도커에서 실행중이라고 했을 때 살펴볼 것은&lt;br /&gt;
&lt;br /&gt;
* 컨테이너 내에서 Nginx나 PHP를 실행하고 있는 uid는 무엇인가?&lt;br /&gt;
** 해당 uid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* uid가 속해 있는 그룹 확인 (gid)&lt;br /&gt;
** 해당 gid가 파일을 읽을 수 있는가? 쓸 수 있는가?&lt;br /&gt;
* 권한이 있는데도 접근이 안 되는 경우&lt;br /&gt;
** 루트 디렉터리에서부터 시작해서, 해당 파일이 있는 디렉터리까지의 경로까지 중에서 현재 uid 또는 gid로 '''실행 권한'''을 얻을 수 있는지 확인할 것.&lt;br /&gt;
** 읽기, 쓰기 권한이 아니라 실행 권한이다.&lt;br /&gt;
* 겉으로 보기에는 같은 www-data이더라도 컨테이너에 따라 id는 다를 수 있다.&lt;br /&gt;
* 시놀로지의 경우 NFS 서버로 마운트한 클라이언트에서 본 권한과도 다를 수 있기 때문에 주의&lt;br /&gt;
* LDAP 설정해서 동기화 하려 했으나 귀찮아서 일단 보류&lt;br /&gt;
&lt;br /&gt;
== 집 Docker Swarm 삽질 ==&lt;br /&gt;
&lt;br /&gt;
=== GUI 프로그램 ===&lt;br /&gt;
&lt;br /&gt;
==== Portainer (9000) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** '''터미널 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** gitlab 레지스트리 목록 보기 불가&lt;br /&gt;
** 이미지에서 마우스로 컨테이너 실행 불가&lt;br /&gt;
&lt;br /&gt;
==== Swarmpit (888) ====&lt;br /&gt;
&lt;br /&gt;
* 가능&lt;br /&gt;
** gitlab 연동 가능&lt;br /&gt;
** gitlab 레지스트리에서 이미지 push/pull 가능&lt;br /&gt;
** gitlab 레지스트리 목록 보기 가능&lt;br /&gt;
** '''이미지에서 마우스로 컨테이너 실행 가능'''&lt;br /&gt;
* 불가&lt;br /&gt;
** 터미널 실행 불가&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=191</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=191"/>
		<updated>2020-09-07T11:33:05Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=190</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=190"/>
		<updated>2020-09-07T11:03:16Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** https://askubuntu.com/questions/971142/cannot-disable-cpu-throttling-on-ubuntu-16-04-lts&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=189</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=189"/>
		<updated>2020-09-07T10:44:54Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 온도 쓰로틀링 막기&lt;br /&gt;
** sudo apt-get remove thermald&lt;br /&gt;
** lsmod | grep -i intel으로 전원과 온도관리 관련한 모듈 살펴보기 (rapl 등)&lt;br /&gt;
** /etc/modprobe.d/blacklist-throttling-kdm.conf 생성&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blacklist intel_powerclamp&lt;br /&gt;
blacklist intel_rapl&lt;br /&gt;
blacklist intel_rapl_perf&lt;br /&gt;
blacklist intel_rapl_msr&lt;br /&gt;
blacklist intel_rapl_common&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** sudo update-initramfs -u -k all&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* CPU 온도 및 전력 사용량 조회&lt;br /&gt;
** sudo turbostat --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 0.5&lt;br /&gt;
** sudo apt-get install linux-tools-common&lt;br /&gt;
** sudo apt-get install linux-tools-generic&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=188</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=188"/>
		<updated>2020-09-03T15:00:24Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 오피스&lt;br /&gt;
** 기본 libreoffice&lt;br /&gt;
** onlyoffice&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=187</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=187"/>
		<updated>2020-09-03T10:38:47Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
** Screenshot Locations by TimurKiyivinski&lt;br /&gt;
*** gnome tweak에서 설정 바꿀 수 있다.&lt;br /&gt;
*** 시스템 설정에서 기존 스크린샷 키보드 바로가기 단축키를 지우고,&lt;br /&gt;
*** printscreen에 gnome-screenshot -i를,&lt;br /&gt;
*** shift+printscreen에 gnome-screenshot -w을 설정&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=186</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=186"/>
		<updated>2020-08-31T15:55:14Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
** SVP로 30Hz이든 60Hz든 144Hz 주사율까지 뻠삥해보자&lt;br /&gt;
*** mpv는 apt-get으로 깐 mpv는 안 되고, 직접 빌드해야 함&lt;br /&gt;
*** SVP랑 mpv 다 설치 후, mpv --input-ipc-server=/tmp/mpvsocket --hwdec=audo-copy --player-operation-mode=pseudo-gui로 실행하거나, 아니면 그냥 SVP에서 영상 재생&lt;br /&gt;
*** 설정에서 frc.target.max가 47일텐데 이거를 60 이상으로 바꿔주면 60Hz 영상도 뻥튀기해서 볼 수 있음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=185</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=185"/>
		<updated>2020-08-31T13:19:54Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* 윈도우랑 듀얼 부팅시 시간 달라지는 문제 해결&lt;br /&gt;
** timedatectl set-local-rtc 1 --adjust-system-clock&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
* Ubuntu 18.04 이후 여러 모니터 환경에서, 고주사율(144Hz 등) 모니터가 있음에도 불구하고 마우스만 144Hz로 움직이고 다른 모든 프로그램은 60Hz로 움직이는 문제 해결&lt;br /&gt;
** /etc/environment에 다음 추가 (DP-0은 가장 고주사율 모니터가 쓰는 포트 적기)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
__GL_SYNC_DISPLAY_DEVICE=DP-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=184</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=184"/>
		<updated>2020-08-26T17:45:36Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Intel 내장 그래픽 모니터랑 NVIDIA 그래픽 모니터 동시에 사용하기&lt;br /&gt;
** 주로 노트북에서 많이 사용하는 PRIME을 억지로 응용해서 가능.&lt;br /&gt;
** 모든 디스플레이 연산은 NVIDIA 그래픽카드에서 하고, 연산 결과물 일부만 Intel 그래픽으로 보내서 실현&lt;br /&gt;
** 참조한 곳: http://us.download.nvidia.com/XFree86/Linux-x86/319.12/README/randr14.html&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Chapter 32. Offloading Graphics Display with RandR 1.4&lt;br /&gt;
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Requirements&lt;br /&gt;
X.Org X server version 1.13 or higher.&lt;br /&gt;
&lt;br /&gt;
A Linux kernel with CONFIG_DRM enabled and the appropriate driver interfaces present:&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_export&lt;br /&gt;
&lt;br /&gt;
drm_gem_prime_import&lt;br /&gt;
&lt;br /&gt;
gem_prime_pin&lt;br /&gt;
&lt;br /&gt;
gem_prime_get_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_import_sg_table&lt;br /&gt;
&lt;br /&gt;
gem_prime_vmap&lt;br /&gt;
&lt;br /&gt;
gem_prime_vunmap&lt;br /&gt;
&lt;br /&gt;
Version 1.4.0 of the xrandr command-line utility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider&lt;br /&gt;
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;layout&amp;quot;&lt;br /&gt;
    Screen 0 &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Inactive &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Driver &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    BusID &amp;quot;&amp;lt;BusID for NVIDIA device here&amp;gt;&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    Device &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    # Uncomment this line if your computer has no display devices connected to&lt;br /&gt;
    # the NVIDIA GPU.  Leave it commented if you have display devices&lt;br /&gt;
    # connected to the NVIDIA GPU that you would like to use.&lt;br /&gt;
    #Option &amp;quot;UseDisplayDevice&amp;quot; &amp;quot;none&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.&lt;br /&gt;
&lt;br /&gt;
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:&lt;br /&gt;
&lt;br /&gt;
$ xrandr --setprovideroutputsource modesetting NVIDIA-0&lt;br /&gt;
$ xrandr --auto&lt;br /&gt;
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.&lt;br /&gt;
&lt;br /&gt;
Use the&lt;br /&gt;
&lt;br /&gt;
$ xrandr --listproviders&lt;br /&gt;
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.&lt;br /&gt;
&lt;br /&gt;
The NVIDIA driver currently only supports the Source Output capability. It does not support render offload and cannot be used as an output sink. &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 예시 (내가 추가한 것은 intel의 Section &amp;quot;Device&amp;quot;와 intel의 Section &amp;quot;Screen&amp;quot;과 Section &amp;quot;ServerLayout&amp;quot;의 Inactive &amp;quot;intel&amp;quot;)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerLayout&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Layout0&amp;quot;&lt;br /&gt;
    Screen      0  &amp;quot;Screen0&amp;quot; 0 0&lt;br /&gt;
    InputDevice    &amp;quot;Keyboard0&amp;quot; &amp;quot;CoreKeyboard&amp;quot;&lt;br /&gt;
    InputDevice    &amp;quot;Mouse0&amp;quot; &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
    Inactive       &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Mouse0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;mouse&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Protocol&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Device&amp;quot; &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
    Option         &amp;quot;Emulate3Buttons&amp;quot; &amp;quot;no&amp;quot;&lt;br /&gt;
    Option         &amp;quot;ZAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # generated from default&lt;br /&gt;
    Identifier     &amp;quot;Keyboard0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;kbd&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    ModelName      &amp;quot;Unknown&amp;quot;&lt;br /&gt;
    Option         &amp;quot;DPMS&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
    VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;intel&amp;quot;&lt;br /&gt;
    Driver         &amp;quot;modesetting&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier     &amp;quot;Screen0&amp;quot;&lt;br /&gt;
    Device         &amp;quot;Device0&amp;quot;&lt;br /&gt;
    Monitor        &amp;quot;Monitor0&amp;quot;&lt;br /&gt;
    DefaultDepth    24&lt;br /&gt;
    SubSection     &amp;quot;Display&amp;quot;&lt;br /&gt;
        Depth       24&lt;br /&gt;
    EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;intel&amp;quot;&lt;br /&gt;
    Device        &amp;quot;intel&amp;quot;&lt;br /&gt;
EndSection &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=183</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=183"/>
		<updated>2020-08-26T14:18:07Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
* Ubuntu 20.04 + NVIDIA 그래픽카드 환경에서 모니터 회전 정보 저장 안 될 때&lt;br /&gt;
** Ubuntu 20.04.2에서 고쳐진다고는 하지만 언제 기다리나..&lt;br /&gt;
** NVIDIA 드라이버가 root권한을 요구할 때가 있는데 X서버는 사용자 권한으로 돌아가고 있어서 생기는 문제라고 함&lt;br /&gt;
** /etc/X11/Wrapper.config에 needs_root_rights = yes 추가&lt;br /&gt;
** https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1716857/comments/26&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=182</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=182"/>
		<updated>2020-08-22T19:15:03Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
* OS 자동 로그인 설정시 keyring 물어보는 것 없애기&lt;br /&gt;
** seahorse 에서&lt;br /&gt;
*** default keyring 비밀번호 변경 -&amp;gt; 비밀번호 공백으로 설정&lt;br /&gt;
*** login keyring에서 default keyring용 password 삭제&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=181</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=181"/>
		<updated>2020-08-22T19:05:56Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** 시놀로지의 경우는 하나의 Target에 대해 ipv4랑 ipv6주소 등 여러가지 던져 주는데, 클라이언트에서 이 중에 하나 연결하면 다른 주소로는 Target 연결 실패하여 재시도하느라 부팅에 120초 이상 걸릴 수 있으니, /etc/iscsi/nodes에서 하나만 남기고 지우자&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=180</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=180"/>
		<updated>2020-08-22T18:41:11Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** iscsiadm -m node&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=179</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=179"/>
		<updated>2020-08-22T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
*** sensors | grep -i fan 했을 때 정보 안 나오면, /etc/modules에 it87 추가해 줘야 한다.&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
**** &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!BIOS 이름&lt;br /&gt;
!실제 기기&lt;br /&gt;
!우분투 드라이버&lt;br /&gt;
!PWM 제어&lt;br /&gt;
!최소 RPM&lt;br /&gt;
!가동 시작 RPM&lt;br /&gt;
!기본 RPM&lt;br /&gt;
!최대 RPM&lt;br /&gt;
|-&lt;br /&gt;
|CPU fan&lt;br /&gt;
|수냉쿨러 3열 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm1&lt;br /&gt;
|642 (PWM &amp;lt;= 24)&lt;br /&gt;
|642 (PWM = 24)&lt;br /&gt;
|1638&lt;br /&gt;
|2000 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 1&lt;br /&gt;
|수냉쿨러 펌프&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm2&lt;br /&gt;
|0 (PWM &amp;lt;= 60)&lt;br /&gt;
|845 (PWM = 75)&lt;br /&gt;
|1271&lt;br /&gt;
|2343~2700 (PWM = 255)&lt;br /&gt;
|-&lt;br /&gt;
|System fan 2&lt;br /&gt;
|본체 후면 팬&lt;br /&gt;
|it87&lt;br /&gt;
|hwmon2/pwm3&lt;br /&gt;
|0 (PWM &amp;lt;= 28)&lt;br /&gt;
|300 (PWM = 45)&lt;br /&gt;
|1090&lt;br /&gt;
|1090 (PWM = 255)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
# 수냉펌프인 hwmon2/pwm2는 항상 최고속도로 돌아가도록 설정&lt;br /&gt;
INTERVAL=5&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon2/pwm2=hwmon1/temp1_input hwmon2/pwm3=hwmon1/temp1_input&lt;br /&gt;
FCFANS=hwmon2/pwm1=hwmon2/fan1_input hwmon2/pwm2=hwmon2/fan2_input hwmon2/pwm3=hwmon2/fan3_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50 hwmon2/pwm2=0 hwmon2/pwm3=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77 hwmon2/pwm2=20 hwmon2/pwm3=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150 hwmon2/pwm2=75 hwmon2/pwm3=45&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0 hwmon2/pwm2=60 hwmon2/pwm3=28&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** iscsiadm -m node&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=178</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=178"/>
		<updated>2020-08-17T20:04:13Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#iSCSI 마운트&lt;br /&gt;
UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 성능 옵션 조절&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g performance&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g ondemand&lt;br /&gt;
** sudo cpufreq-set -c 0 1 2 3 4 5 6 7 -g powersave&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
INTERVAL=10&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input&lt;br /&gt;
FCFANS= hwmon2/pwm1=hwmon2/fan1_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
* 시스템 전력 사용량 조회&lt;br /&gt;
** powertop&lt;br /&gt;
* iSCSI 장치 만들기 (시놀로지)&lt;br /&gt;
** IQN 이름: iqn.기관설립일.kim.dong-min:원하는 이름&lt;br /&gt;
** LUN 이름: 원하는 이름&lt;br /&gt;
** 총 용량: 1024GB&lt;br /&gt;
** 공간 할당: Thin Provisioning (Thin으로해야 용량 확장 가능)&lt;br /&gt;
** 고급 기능:&lt;br /&gt;
*** Hardware-assisted zeroing, locking, data trasfer&lt;br /&gt;
*** 스냅샷&lt;br /&gt;
*** 공간 재사용&lt;br /&gt;
** 최대 수신/전송 세그멘트 바이트: 262144&lt;br /&gt;
* iSCSI 장치 마운트하기 (우분투)&lt;br /&gt;
** apt-get install open-iscsi&lt;br /&gt;
** vi /etc/iscsi/iscsid.conf&lt;br /&gt;
*** node.startup = manual 에서 node.startup = automatic 으로&lt;br /&gt;
** 장치 주소 확인&lt;br /&gt;
*** iscsiadm -m discovery -t st -p 192.168.5.7&lt;br /&gt;
*** iscsiadm -m node&lt;br /&gt;
** 블록 장치 연결&lt;br /&gt;
*** iscsiadm -m node --targetname &amp;quot;iqn 이름&amp;quot; --portal &amp;quot;호스트:포트&amp;quot; --login&lt;br /&gt;
** 블록 장치 이름 찾기&lt;br /&gt;
*** fdisk -l (결과 /dev/sdc)&lt;br /&gt;
** 파티션 생성&lt;br /&gt;
*** parted /dev/sdc print&lt;br /&gt;
*** parted /dev/sdc mklabel gpt&lt;br /&gt;
*** parted -a optimal /dev/sdc mkpart iscsi_docker ext4 0% 100%&lt;br /&gt;
*** parted /dev/sdc print 으로 생긴 파티션 번호 찾기 (1번)&lt;br /&gt;
*** mkfs.ext4 /dev/sdc1&lt;br /&gt;
** 마운트&lt;br /&gt;
*** mkdir /mnt/iscsi_docker&lt;br /&gt;
*** blkid /dev/sdc1 으로 UUID 찾기&lt;br /&gt;
*** vi /etc/fstab&lt;br /&gt;
**** UUID=(uuid) /mnt/iscsi_docker ext4 _netdev,defaults 0 0&lt;br /&gt;
** Docker에서 쓸 수 있도록 심볼릭 링크 걸기&lt;br /&gt;
*** ln -s /mnt/iscsi_docker /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=177</id>
		<title>단축키&amp;명령어</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EB%8B%A8%EC%B6%95%ED%82%A4%26%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=177"/>
		<updated>2020-08-17T18:57:02Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 실제 사용 ==&lt;br /&gt;
&lt;br /&gt;
* 우분투 화면 회전&lt;br /&gt;
** 쉬운 방법&lt;br /&gt;
*** xrandr -o normal&lt;br /&gt;
*** xrandr -o left&lt;br /&gt;
** 화면 선택 회전&lt;br /&gt;
*** xrandr -q&lt;br /&gt;
*** xrandr --output HDMI1 --rotate normal&lt;br /&gt;
*** xrandr --output HDMI1 --rotate left&lt;br /&gt;
* 압축 파일 한글 인코딩 깨질때&lt;br /&gt;
** unzip -O cp949 xxxx.zip&lt;br /&gt;
* 무식한 dmesg tail&lt;br /&gt;
** while true;do sudo dmesg -c;done&lt;br /&gt;
* 액세스 로그 보기&lt;br /&gt;
** 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -&amp;gt; IP 주소 및 요청 API 확인&lt;br /&gt;
** 뒤에서부터 150바이트 표현 -&amp;gt; 접속 디바이스 정보 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret).&amp;quot;\n&amp;quot;; echo &amp;quot;==============================$ret2&amp;quot;.&amp;quot;\n\n&amp;quot;;'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 키보드 키 반복 입력 안 될 때&lt;br /&gt;
** xset r on&lt;br /&gt;
* 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때&lt;br /&gt;
** tput reset&lt;br /&gt;
* 리눅스에서 동영상 자르기&lt;br /&gt;
** 35초 시점부터 30초간의 영상 획득&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -ss 00:00:35 -t 00:00:30 -i 입력영상파일 -vcodec copy -acodec copy 출력영상파일&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ovg -&amp;gt; avi 동영상 인코딩&lt;br /&gt;
** ffmpeg -i input.ovg -vcodec mpeg4 -acodec libmp3lame -ss 00:00:02 -qscale 1 output.avi&lt;br /&gt;
** -ss 시작 시간&lt;br /&gt;
** -qscale 화질, 숫자가 낮으면 좋다&lt;br /&gt;
&lt;br /&gt;
* zsh 기존 명령어 검색&lt;br /&gt;
** Ctrl+R&lt;br /&gt;
** !?검색어?&lt;br /&gt;
* zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때&lt;br /&gt;
** setopt NO_NOMATCH&lt;br /&gt;
* gnome shell 이상할 때&lt;br /&gt;
** alt+f2 하고 r 엔터&lt;br /&gt;
** alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
** killall -3 gnome-shell 도 된다고 함&lt;br /&gt;
&lt;br /&gt;
* CPU 클럭, 온도&lt;br /&gt;
** watch -n.5 &amp;quot;cat /proc/cpuinfo | grep \&amp;quot;^[c]pu MHz\&amp;quot;&amp;quot;&lt;br /&gt;
** watch -n.5 &amp;quot;sensors | grep -i Package&amp;quot;&lt;br /&gt;
* 파일 폴더 용량 확인 (크기, 사이즈)&lt;br /&gt;
** du&lt;br /&gt;
** du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)&lt;br /&gt;
** du | sort -hr (정렬)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 소유권 변경 ===&lt;br /&gt;
&lt;br /&gt;
* 소유자와 그룹 모두 변경(재귀적으로)&lt;br /&gt;
** chown -R kdm:kdm [폴더]&lt;br /&gt;
* 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
path='/home/kdm/'&lt;br /&gt;
user='kdm'&lt;br /&gt;
group='kdm'&lt;br /&gt;
&lt;br /&gt;
#rw-rw-r--&lt;br /&gt;
find ${path}/ -type f -print0 | xargs -0 chmod 0664&lt;br /&gt;
#rwxrwxr-x&lt;br /&gt;
find ${path}/ -type d -print0 | xargs -0 chmod 0775&lt;br /&gt;
&lt;br /&gt;
chown -R ${user}:${group} ${path}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find . -type f -exec chmod 777 {} \;&lt;br /&gt;
find . -type d -exec chmod 777 {} \;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* 현재 버전 확인&lt;br /&gt;
** cat /etc/issue&lt;br /&gt;
** lsb_release -a&lt;br /&gt;
&lt;br /&gt;
* mysql 관련&lt;br /&gt;
** 접속&lt;br /&gt;
*** mysql -h localhost -u myname -pmypass mydb&lt;br /&gt;
** sql 로그 보기(위험!)&lt;br /&gt;
*** SHOW VARIABLES LIKE &amp;quot;general_log%&amp;quot;;&lt;br /&gt;
*** SET GLOBAL general_log = 'ON';&lt;br /&gt;
*** SET GLOBAL general_log = 'OFF';&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 폴더 삭제 ===&lt;br /&gt;
&lt;br /&gt;
* 항상 safe-rm 사용하기&lt;br /&gt;
* 정상적인 방법&lt;br /&gt;
** rm -rf [폴더 이름]&lt;br /&gt;
* 약간 위험한 방법&lt;br /&gt;
** 폴더 안으로 들어가서 rm -rf ./*&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;절대 금지&amp;lt;/pre&amp;gt;&lt;br /&gt;
** rm -rf /&lt;br /&gt;
** rm -rf /* '''preserve도 못 막음!!!!!!!'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 하드 복구 관련 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ddrescue --no-split /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 세팅용 ==&lt;br /&gt;
&lt;br /&gt;
* 시작 프로그램 설정&lt;br /&gt;
** gnome-session-properties&lt;br /&gt;
* 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)&lt;br /&gt;
** 확인: cat /proc/sys/vm/swappiness&lt;br /&gt;
** 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가&lt;br /&gt;
** 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10&lt;br /&gt;
** 재부팅 안하고 스왑 비우기: swapoff -a&lt;br /&gt;
** 다시 스왑 켜기: swapon -a&lt;br /&gt;
* 기본 프로그램 설정은 이렇게&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install exo-utils&lt;br /&gt;
exo-preferred-applications&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[우분투 창 모니터간 이동]]&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=176</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=176"/>
		<updated>2020-08-17T18:51:47Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;LC_COLLATE는 * /etc/environment에다가 넣어줘야 될수도?&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&lt;br /&gt;
#ssh 마운트는 먼저 sshfs를 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#먼저 **root 계정**에서 계정명@호스트로 접속이 되는지 확인한 다음에 넣을 것&lt;br /&gt;
계정명@호스트:/kasumi /media/kdm/kasumi_sshfs fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,reconnect,port=포트,rw,IdentityFile=키파일 0 0&lt;br /&gt;
&lt;br /&gt;
#nfs 마운트는 먼저 nfs-common을 설치한 다음에, 다음과 같이 하면 된다.&lt;br /&gt;
#rsize,wsize는 서버의 값을 확인한 다음 설정하는 것을 강력히 권장&lt;br /&gt;
호스트:/volume1/kasumi /media/kdm/kasumi nfs nfsvers=3,rsize=32768,wsize=32768,rw,auto,async,nolock&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
INTERVAL=10&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input&lt;br /&gt;
FCFANS= hwmon2/pwm1=hwmon2/fan1_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=175</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=175"/>
		<updated>2020-08-17T18:26:06Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_COLLATE  DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
INTERVAL=10&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input&lt;br /&gt;
FCFANS= hwmon2/pwm1=hwmon2/fan1_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=174</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=174"/>
		<updated>2020-08-17T16:52:30Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
** 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
** sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
** 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
INTERVAL=10&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input&lt;br /&gt;
FCFANS= hwmon2/pwm1=hwmon2/fan1_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
**** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
**** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
	<entry>
		<id>https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=173</id>
		<title>우분투 설치할 목록</title>
		<link rel="alternate" type="text/html" href="https://wiki.dong-min.kim/w/index.php?title=%EC%9A%B0%EB%B6%84%ED%88%AC_%EC%84%A4%EC%B9%98%ED%95%A0_%EB%AA%A9%EB%A1%9D&amp;diff=173"/>
		<updated>2020-08-17T16:42:23Z</updated>

		<summary type="html">&lt;p&gt;Kim135797531: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2015년 7월 27일 (월) 01:09에 마지막으로 수정됨&lt;br /&gt;
&lt;br /&gt;
== 단축키&amp;amp;명령어 ==&lt;br /&gt;
&lt;br /&gt;
* [[단축키&amp;amp;명령어]]&lt;br /&gt;
&lt;br /&gt;
== OS 관련 ==&lt;br /&gt;
&lt;br /&gt;
* USB 부팅 디스크 만들기&lt;br /&gt;
** unetbootin&lt;br /&gt;
&lt;br /&gt;
* 더 편한 패키지 설치&lt;br /&gt;
** aptitude, Synaptic Package Manager&lt;br /&gt;
* 설정 편집기 (레지스트리 편집기와 비슷)&lt;br /&gt;
** dconf editor&lt;br /&gt;
* 오른쪽 Alt키 Hangul키로 바꾸기&lt;br /&gt;
** gnome-tweak에서&lt;br /&gt;
*** Keyboard &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Korean Hangul/Hanja keys&lt;br /&gt;
**** [x] Make right Alt a Hangul key&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
*** org.gnome.mutter overlay-key = 'Alt_R'&lt;br /&gt;
&lt;br /&gt;
* 모든 입력기를 다 써본 결과 벼루가 그나마 나음. &lt;br /&gt;
** uim, uim-byeoru&lt;br /&gt;
** &amp;lt;Global settings&amp;gt;&lt;br /&gt;
*** [x] Specify default IM&lt;br /&gt;
*** Default input method: Byeoru&lt;br /&gt;
*** Enabled input methods: &amp;quot;Byeoru&amp;quot;, &amp;quot;Mozc&amp;quot;&lt;br /&gt;
*** [x] Enable IM switching by hotkey&lt;br /&gt;
*** IM switching key: &amp;quot;Super_key&amp;quot;&lt;br /&gt;
*** [x] Skip direct method for IM switching by hotkey&lt;br /&gt;
*** [ ] Enable input method toggle by hot keys&lt;br /&gt;
*** [x] Enable lazy input method lading for fast startup&lt;br /&gt;
** &amp;lt;Global key bindings 1&amp;gt;&lt;br /&gt;
*** [Global] on: x&lt;br /&gt;
*** [Global] off: x&lt;br /&gt;
** &amp;lt;Mozc key bindings&amp;gt;&lt;br /&gt;
*** [Mozc] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Mozc] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
** &amp;lt;Byeoru key bindings 1&amp;gt;&lt;br /&gt;
*** [Byeoru] on: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
*** [Byeoru] off: &amp;quot;Hangul&amp;quot;, &amp;quot;Henkan_Mode&amp;quot;, &amp;quot;hiragana-katakana&amp;quot;&lt;br /&gt;
* 쉘&lt;br /&gt;
** byobu, zsh, on-my-zsh, powerlevel10k&lt;br /&gt;
** 폰트는 D2Coding에다가 Nerd폰트 직접 개조해서 포함&lt;br /&gt;
** 파일 안전하게 삭제 safe-rm&lt;br /&gt;
&lt;br /&gt;
* SSH 관리&lt;br /&gt;
** pac manager(무거우나 강력함)&lt;br /&gt;
** pac manager에서 쉘 입력 보존(방향키 같은) 하려면 rlwrap으로 감싸기 설정&lt;br /&gt;
** Asbru manager&lt;br /&gt;
*** preferences-&amp;gt;main options-&amp;gt;advanced-&amp;gt;Host-key verification string을 다음으로 바꾸기&lt;br /&gt;
*** (원본) ^.+ontinue connecting \((.+)\/(.+)\)\?\s*$&lt;br /&gt;
*** (수정) ^.+ontinue connecting \(([^/]+)\/([^/]+)(?:[^)]+)?\)\?\s*$&lt;br /&gt;
&lt;br /&gt;
* FTP 프로그램&lt;br /&gt;
** filezilla&lt;br /&gt;
* 방화벽&lt;br /&gt;
** fail2ban&lt;br /&gt;
* ubuntu 18.04 gnome 멈추진 않았는데 마우스 클릭이 안 될때 (focus 이동 먹통)&lt;br /&gt;
** https://github.com/kim135797531/Ubuntu-Remove-Focusproblem&lt;br /&gt;
* 우분투 확장 기능들 (Gnome)&lt;br /&gt;
** Bluetooth quick connect by bjarosze&lt;br /&gt;
** Clipboard Indicator by Tudmotu&lt;br /&gt;
** Launch new instance by fmuellner&lt;br /&gt;
** Night Light Slider by TimurKiyivinski&lt;br /&gt;
** No activities button by Yaya.cout&lt;br /&gt;
** NoAnnoyance v2 by bjoerndaase&lt;br /&gt;
** Remove Alt+Tab Delay v2 by bjoerndaase&lt;br /&gt;
** slinger by gfxmonk&lt;br /&gt;
** Sound Input &amp;amp; Output Device Chooser by kgshank&lt;br /&gt;
** Status Area Horizontal Spacing by p91paul&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마우스 휠로 프로그램 전환&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock scroll-action 'cycle-windows'&lt;br /&gt;
&lt;br /&gt;
* 시작표시줄에서 마운트된 드라이브 없애기&lt;br /&gt;
** dconf-editor에서&lt;br /&gt;
** org.gnome.shell.extensions.dash-to-dock show-mounts false&lt;br /&gt;
&lt;br /&gt;
* 프로그램 바로가기 만들기&lt;br /&gt;
** alacarte&lt;br /&gt;
* 자동실행 넣을 것들&lt;br /&gt;
** ~/.config/autostart 안에 넣자 (개별 파일로)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;kdm-chrome.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=env LANGUAGE=ko_KR.utf-8 /opt/google/chrome/google-chrome&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=chrome kor&lt;br /&gt;
Name=chrome kor&lt;br /&gt;
Comment[en_US]=한국어 크롬&lt;br /&gt;
Comment=크롬을 한국어로 쓰자&lt;br /&gt;
&lt;br /&gt;
&amp;lt;synergy.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=synergy&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[ko_KR]=synergy&lt;br /&gt;
Name=synergy&lt;br /&gt;
Comment[ko_KR]=&lt;br /&gt;
Comment=시너지 자동실행&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xmodmap.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Exec=xmodmap -e 'keycode 134 = '&lt;br /&gt;
Hidden=false&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
Name[en_US]=fuck windows key&lt;br /&gt;
Name=fuck windows key&lt;br /&gt;
Comment[en_US]=&lt;br /&gt;
Comment=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xrandr.desktop&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-triple-monitor&lt;br /&gt;
Exec=xrandr --output DP-0 --pos 0x0 --rotate left --mode 1920x1080 --output DVI-D-0 --primary --pos 1080x420 --mode 1920x1080 --output HDMI-0 --pos 3000x420 --mode 1920x1080&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
X-GNOME-Autostart-Delay=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 단위 표시 바꾸기&lt;br /&gt;
** ~/.pam_environment에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LC_NUMERIC	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TIME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MONETARY	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_PAPER	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_NAME	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_ADDRESS	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_TELEPHONE	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_MEASUREMENT	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
LC_IDENTIFICATION	DEFAULT=ko_KR.UTF-8&lt;br /&gt;
PAPERSIZE	DEFAULT=a4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* git 로그인 유지&lt;br /&gt;
** ~/.gitconfig에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[user]&lt;br /&gt;
	email = 메일&lt;br /&gt;
	name = Dongmin Kim&lt;br /&gt;
[push]&lt;br /&gt;
	default = simple&lt;br /&gt;
[credential]&lt;br /&gt;
	helper = cache --timeout 86400&lt;br /&gt;
[http]&lt;br /&gt;
[http]&lt;br /&gt;
	proxy = &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* conda 기본 채널 설정&lt;br /&gt;
** ~/.condarc에서 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
channels:&lt;br /&gt;
  - intel&lt;br /&gt;
  - defaults&lt;br /&gt;
channel_priority: strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 부품 관련 ==&lt;br /&gt;
&lt;br /&gt;
* 파티션 매니저&lt;br /&gt;
** gparted partition editor&lt;br /&gt;
&lt;br /&gt;
* 시스템 상태 관련&lt;br /&gt;
** htop&lt;br /&gt;
** iotop&lt;br /&gt;
** iftop&lt;br /&gt;
** ioping&lt;br /&gt;
** lm-sensors&lt;br /&gt;
* GUI 디스크 남은 용량 보기&lt;br /&gt;
** baobab&lt;br /&gt;
&lt;br /&gt;
* NVIDIA 그래픽카드 최상의 성능 뽑아내기&lt;br /&gt;
** /etc/modprobe.d/powermizer-kdm.conf&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 options nvidia NVreg_RegistryDwords=&amp;quot;PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerDefault=0x1;PowerMizerDefaultAC=0x1&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;/etc/X11/xorg.conf 안의 Device 항목에 Coolbits 넣어주기&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device0&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:2:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
     Identifier     &amp;quot;Device1&amp;quot;&lt;br /&gt;
     Driver         &amp;quot;nvidia&amp;quot;&lt;br /&gt;
     Option         &amp;quot;Coolbits&amp;quot; &amp;quot;24&amp;quot;&lt;br /&gt;
     VendorName     &amp;quot;NVIDIA Corporation&amp;quot;&lt;br /&gt;
     BusID          &amp;quot;PCI:129:0:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 인텔 CPU 터보부스트 최고 클럭 조정&lt;br /&gt;
** cd /sys/devices/system/cpu/intel_pstate&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;17&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
** echo &amp;quot;17&amp;quot; tee ./min_perf_pct &amp;amp;&amp;amp; echo &amp;quot;100&amp;quot; | tee ./max_perf_pct&lt;br /&gt;
* 시스템 팬 속도 정책 설정&lt;br /&gt;
** sudo apt-get install fancontrol&lt;br /&gt;
** sudo pwmconfig&lt;br /&gt;
** sudo service fancontrol restart&lt;br /&gt;
** (2020년 6월 기준 수냉쿨러 설정)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration file generated by pwmconfig, changes will be lost&lt;br /&gt;
INTERVAL=10&lt;br /&gt;
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2608&lt;br /&gt;
DEVNAME=hwmon1=coretemp hwmon2=it8728&lt;br /&gt;
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input&lt;br /&gt;
FCFANS= hwmon2/pwm1=hwmon2/fan1_input&lt;br /&gt;
MINTEMP=hwmon2/pwm1=50&lt;br /&gt;
MAXTEMP=hwmon2/pwm1=77&lt;br /&gt;
MINSTART=hwmon2/pwm1=150&lt;br /&gt;
MINSTOP=hwmon2/pwm1=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 최대 절전 모드 설정&lt;br /&gt;
** sudo apt-get install pm-utils&lt;br /&gt;
** cat /etc/fstab | grep -i swap 해서 UUID 알아내기&lt;br /&gt;
** sudo vi /etc/default/grub&lt;br /&gt;
** GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=a26edce1-f9c2-42ff-a2f2-0e0f52eb3ee9&amp;quot;&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** 실행하기&lt;br /&gt;
*** sudo pm-hibernate&lt;br /&gt;
&lt;br /&gt;
== 프로그램 관련 ==&lt;br /&gt;
&lt;br /&gt;
* Simplenote&lt;br /&gt;
** 구글 킵이 히스토리 저장이 안 되서 빡침..&lt;br /&gt;
** 무료!&lt;br /&gt;
** https://app.simplenote.com/&lt;br /&gt;
* 스샷 프로그램&lt;br /&gt;
** shutter&lt;br /&gt;
** 근데 shutter 너무 무거워서 그냥 Shift+PrintScreen 씀&lt;br /&gt;
&lt;br /&gt;
* 동영상 재생기&lt;br /&gt;
** bomi&lt;br /&gt;
** https://github.com/xylosper/bomi&lt;br /&gt;
** mpv, vlc도 좋음&lt;br /&gt;
* 음악&lt;br /&gt;
** clementine&lt;br /&gt;
&lt;br /&gt;
* 웹 브라우저&lt;br /&gt;
** google chrome 또는 chromium&lt;br /&gt;
** 크로미움에서 프로필 열지 못함 에러가 날 경우, 일단 브라우저에서 계정 연결을 끊고, 터미널창에서 크로미움을 켰다가 제대로 켜지는 걸 보고 끈 다음에 다시 켜서 로그인 하면 된다.&lt;br /&gt;
** 그리고 자꾸 로그인 키 잠금을 물어보면, '암호 및 키'를 검색해서 '로그인' 항목의 암호를 그냥 똑같은걸로 다시 바꿔주면 된다.&lt;br /&gt;
** 다운로드 한 파일을 클릭하면 파일이 안 열리고 다운로드 폴더가 열린다면&lt;br /&gt;
*** ~/.local/share/applications/mimeapps.list 에서 x-scheme-handler/file=exo-file-manager.desktop 앞에 주석처리(맨 앞에 # 붙이면 됨)&lt;br /&gt;
* gedit 자동 백업&lt;br /&gt;
** https://github.com/kassoulet/gedit-focus-autosave&lt;br /&gt;
&lt;br /&gt;
* Git diff 및 브랜치 보기&lt;br /&gt;
** Giggle&lt;br /&gt;
&lt;br /&gt;
* 그래픽 편집기&lt;br /&gt;
** gimp&lt;br /&gt;
** pinta&lt;br /&gt;
* HEX 비교&lt;br /&gt;
** hexdiff&lt;br /&gt;
* 원격제어&lt;br /&gt;
** teamviewer&lt;br /&gt;
** chrome remote desktop&lt;br /&gt;
*** 우분투에서 쓰고 있는 화면 안 나오면 이거대로 하기&lt;br /&gt;
*** https://superuser.com/questions/778028/configuring-chrome-remote-desktop-with-ubuntu-gnome-14-04/850359#comment1966661_850359&lt;br /&gt;
* 가상머신&lt;br /&gt;
** virtualbox&lt;br /&gt;
** VMware player&lt;br /&gt;
*** VMware player 상의 윈도우에서 한/영키가 잘 먹지 않는다면, 다음과 같이 키 매핑을 추가해준다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /etc/vmware/config&lt;br /&gt;
** 커널 3.19 이상에서 모듈 설치가 안 되는 문제는, 다음을 참조 (https://wiki.archlinux.org/index.php/VMware#3.19_kernels)&lt;br /&gt;
&lt;br /&gt;
xkeymap.keysym.Hangul = &amp;quot;0x0f2&amp;quot;  &lt;br /&gt;
xkeymap.keysym.Hangul_Hanja = &amp;quot;0x0f1&amp;quot;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wine&lt;br /&gt;
** winetricks&lt;br /&gt;
** 꿀뷰, 반디집&lt;br /&gt;
* 키보드 마우스 공유&lt;br /&gt;
** synergy&lt;br /&gt;
** 스크립트로 실행하기&lt;br /&gt;
*** 서버(키보드와 마우스가 있는 컴퓨터), conf 파일은 GUI를 통해 만들어 두어야 한다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergys -f --debug NOTE --name kdm-pc -c ./synergys.conf --address :24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 서버 설정파일 -&amp;gt; 양 방향을 지정하고 단축키 지정으로 Ctrl+` 로 작업 기기 전환 구현 (출처: https://davejamesmiller.com/blog/synergy-hotkey-to-toggle-screens) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
section: screens&lt;br /&gt;
	kdm-server:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		halfDuplexCapsLock = false&lt;br /&gt;
		halfDuplexNumLock = false&lt;br /&gt;
		halfDuplexScrollLock = false&lt;br /&gt;
		xtestIsXineramaUnaware = false&lt;br /&gt;
		switchCorners = none &lt;br /&gt;
		switchCornerSize = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: aliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: links&lt;br /&gt;
	kdm-server:&lt;br /&gt;
        left = kdm-pc&lt;br /&gt;
		right = kdm-pc&lt;br /&gt;
	kdm-pc:&lt;br /&gt;
		left = kdm-server&lt;br /&gt;
        right = kdm-server&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section: options&lt;br /&gt;
	relativeMouseMoves = false&lt;br /&gt;
	screenSaverSync = false&lt;br /&gt;
	win32KeepForeground = false&lt;br /&gt;
	switchCorners = none &lt;br /&gt;
	switchCornerSize = 0&lt;br /&gt;
    keystroke(Control+`) = switchInDirection(right)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CMD=`./synergyc -f --debug NOTE --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*** 클라이언트 원격 실행(의존성: expect가 설치되어 있어야 한다)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/expect -f&lt;br /&gt;
spawn ssh -p 8022 [계정]@alkga.iptime.org `/home/kdm/kdm-synergy/synergyc -f --debug DEBUG --name kdm-server --display &amp;quot;:0&amp;quot; alkga.iptime.org:24800 &amp;amp;`&lt;br /&gt;
expect &amp;quot;assword:&amp;quot;&lt;br /&gt;
send &amp;quot;[비밀번호]\r&amp;quot;&lt;br /&gt;
interact&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 화면 녹화, 방송 스트리밍&lt;br /&gt;
** obs studio&lt;br /&gt;
* pdf viewer&lt;br /&gt;
** Okular가 로딩도 잘 되고 좋음&lt;br /&gt;
** 기본 evince는 안정적&lt;br /&gt;
** 우분투용 adobe pdf는 버전도 낮고, wine 위에서 돌아가서 호환성 최악(창 최대화 불가, 렌더링 문제 등)&lt;br /&gt;
** wps office의 pdf reader는 예쁘나 로딩이 너무 느림&lt;br /&gt;
* IDE&lt;br /&gt;
** CLion, PyCharm&lt;br /&gt;
** PyCharm에 Black 적용 (문법 정리) &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
*** 설정에서 Tools -&amp;gt; File Watchers&lt;br /&gt;
Program: /usr/local/bin/black&lt;br /&gt;
Arguments: -l 88 $FilePath$&lt;br /&gt;
Output paths to refresh: $FilePath$&lt;br /&gt;
Working directory: $ProjectFileDir$&lt;br /&gt;
&lt;br /&gt;
Advanced Options 에서&lt;br /&gt;
(체크 해제) Auto-saved edited files to trigger the watcher&lt;br /&gt;
(체크) Trigger the watcher on external changes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 기타 개발 관련&lt;br /&gt;
** vscode, matlab, maya&lt;br /&gt;
* DBMS GUI viewer&lt;br /&gt;
** mysql-workbench, pgadmin3&lt;br /&gt;
* 한컴오피스 뷰어&lt;br /&gt;
** &amp;lt;del&amp;gt;깔고 싶지 않아!!!!!&amp;lt;/del&amp;gt;&lt;br /&gt;
* 파일 기록 삭제&lt;br /&gt;
** activity-log-manager&lt;br /&gt;
* 멈춘 프로세스 쉬운 디버깅&lt;br /&gt;
** crash-watch (https://github.com/FooBarWidget/crash-watch)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:phusion.nl/misc&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install crash-watch&lt;br /&gt;
&lt;br /&gt;
crash-watch &amp;lt;PID&amp;gt; # 죽는 순간 정보 보여줌&lt;br /&gt;
crash-watch --dump &amp;lt;PID&amp;gt; # 즉시 스택 트레이스 보기&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 유용한 명령어 ==&lt;br /&gt;
&lt;br /&gt;
* 마이크 입력을 그대로 출력&lt;br /&gt;
** 편한 방법 &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gstreamer-tools&lt;br /&gt;
gst-launch pulsesrc ! pulsesink&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 위의 방법이 안되면 다음 방법도 써 본다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 이 명령어로 하드웨어 이름을 알아낸다.&lt;br /&gt;
pactl list &amp;gt; list.txt&lt;br /&gt;
# 이 명령어로 출력을 시작한다. --latency-msec 은 짧으면 좋지만 잡음이 생길 수 있으므로 적당한 값으로 한다.&lt;br /&gt;
pacat -r --device=alsa_input.pci-0000_00_1b.0.analog-stereo | pacat -p --latency-msec=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** 이런 방법도 있다. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install pavucontrol&lt;br /&gt;
pactl load-module module-loopback latency_msec=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* alacarte 으로 우분투 아이콘 바로가기를 만들자.&lt;br /&gt;
** 실행도 쉽고 터미널 아이콘하고 분리도 되서 좋다.&lt;br /&gt;
** /home/kdm/kdm-synergy/synergys -f --debug NOTE --name kdm-pc -c /home/kdm/kdm-synergy/synergys.conf --address :24800 추가, 터미널 사용은 체크 해제.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 시작시 창 최소화&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install devilspie&lt;br /&gt;
&lt;br /&gt;
mkdir ~/.devilspie&lt;br /&gt;
vi ~/.devilspie/teamviewer.ds&lt;br /&gt;
&lt;br /&gt;
(if  &lt;br /&gt;
(is (application_name) &amp;quot;Teamviewer&amp;quot;)  &lt;br /&gt;
(begin (minimize) )  &lt;br /&gt;
)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ntfs 파티션 자동 마운트&lt;br /&gt;
&lt;br /&gt;
# 먼저 sudo blkid 명령어로 원하는 파티션의 UUID를 알아 놓는다.&lt;br /&gt;
# sudo vi /etc/fstab 으로 fstab 파일을 연다.&lt;br /&gt;
# 맨 아래줄에 다음과 같이 입력하고 저장한다. 여기서 UUID는 위에서 확인한 걸로 한다. /media/kdm/Win8.1은 자신이 원하는 마운트 경로로 바꿔 준다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#umask=000 해서 권한 777으로 만든다&lt;br /&gt;
UUID=B846EC2A46EBE6DA /media/kdm/ExtLarge ntfs-3g defaults,user,locale=ko_KR.UTF-8,umask=000 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 패키지 삭제&lt;br /&gt;
** apt-get remove test&lt;br /&gt;
*** 설정파일은 삭제 안 함&lt;br /&gt;
** apt-get purge test&lt;br /&gt;
*** 설정파일까지 삭제&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* vim 커스터마이징&lt;br /&gt;
** https://github.com/gmarik/Vundle.vim&lt;br /&gt;
&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 우분투용 커널 수동 설치 ===&lt;br /&gt;
&lt;br /&gt;
* 다운로드&lt;br /&gt;
** [http://kernel.ubuntu.com/~kernel-ppa/mainline 공식 배포처]&lt;br /&gt;
** wget [커널 공용 헤더] (linux-headers-버전-...-all.deb]&lt;br /&gt;
** wget [커널 아키텍쳐 전용 헤더] (linux-headers-버전-generic-...-amd64.deb]&lt;br /&gt;
** wget [커널 아키텍쳐 전용 이미지] (linux-image-버전-image-...-amd64.deb]&lt;br /&gt;
* 설치&lt;br /&gt;
** sudo dpkg -i linux-headers*.deb linux-image*.deb&lt;br /&gt;
* 설정 후 재부팅&lt;br /&gt;
** sudo update-grub&lt;br /&gt;
** sudo reboot&lt;br /&gt;
&lt;br /&gt;
== 이제 안 씀 ==&lt;br /&gt;
&lt;br /&gt;
* 시디롬 멀티부스트로 인한 CPU 고 점유율 해결(인터럽트 문제)(SVE14A27CKH 한정)&lt;br /&gt;
** 원인 찾기 https://bugzilla.kernel.org/show_bug.cgi?id=53071&lt;br /&gt;
** 해결 http://askubuntu.com/questions/176565/why-does-kworker-cpu-usage-get-so-high&lt;br /&gt;
** 임시적인 적용은 echo disable &amp;gt; /sys/firmware/acpi/interrupts/gpe13&lt;br /&gt;
&lt;br /&gt;
* OpenJDK -&amp;gt; Oracle JDK 전환&lt;br /&gt;
** 이클립스 등 의존성 제거 없이 전환 가능&lt;br /&gt;
** 1. 오라클 jdk 설치&lt;br /&gt;
*** sudo add-apt-repository ppa:webupd8team/java&lt;br /&gt;
*** sudo apt-get update&lt;br /&gt;
*** sudo apt-get install oracle-java7-installer&lt;br /&gt;
** 2. 전환되었는지 확인&lt;br /&gt;
*** sudo update-alternatives --config java&lt;br /&gt;
** 3. OpenJDK 삭제&lt;br /&gt;
*** sudo apt-get purge openjdk*&lt;br /&gt;
&lt;br /&gt;
* 와인, playonlinux로 카카오톡&lt;br /&gt;
** http://igxactly-kr.blogspot.kr/2014/04/ubuntu-1404-pc-wine.html 참조&lt;br /&gt;
&lt;br /&gt;
* Unity Tweak Tools&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:tualatrix/ppa&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install unity-tweak-tool&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Google Keep&lt;br /&gt;
** 통합 메모&lt;br /&gt;
** 단독 실행법은 다음과 같다.&lt;br /&gt;
*** &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
chromium-browser --ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so --enable-pinch --profile-directory=Default --app-id=hmjkmjkepdijhoojdojkdfohbdgmmhki&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AMD 하이브리드 그래픽을 사용한다면, fglrx를 사용하지 말 것.&lt;br /&gt;
** 공식 배포(소프트웨어 업데이트)에서 설치해도 low graphic mode로 진입하는 버그가 있다.&lt;br /&gt;
*** /usr/lib64 심볼릭 링크로 해결(sudo ln -s /usr/lib /usr/lib64)&lt;br /&gt;
*** 명령어 입력 전에 lib64 폴더가 비어 있는지 확인(날아간다)&lt;br /&gt;
** 멀티 모니터 사용시 화면이 깨지는 버그가 있다.&lt;br /&gt;
** 다음 내용을 ~/.config/autostart 폴더 안에 xrandr.desktop 이런 식의 파일로 넣어 놓으면 부팅시마다 자동 세팅&lt;br /&gt;
** scale이 중요한데, scale을 써야 GPU가 연산을 해서 충돌이 없어지는 듯 하다.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=kdm-script&lt;br /&gt;
Exec=xrandr --output LVDS1 --auto --scale 1.0001x1.0001 --output HDMI1 --auto --scale 1.0001x1.0001 --left-of LVDS1&lt;br /&gt;
Icon=system-run&lt;br /&gt;
X-GNOME-Autostart-enabled=true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 어도비 리더&lt;br /&gt;
** 더 이상 어도비 리더는 리눅스를 지원하지 않는다. 우분투 기본 탑재된 에빈스 뷰어를 쓰던가, 아니면 캐노니컬 파트너 레포지토리 저장소에 있는 옛날 버전 어도비 리더를 설치하자. (버전 9.5.5)&lt;br /&gt;
** 설치법&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo add-apt-repository &amp;quot;deb http://archive.canonical.com/ precise partner&amp;quot;&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install acroread&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* 설치가 끝나면 다시 깔끔하게 레포지토리를 지우자&lt;br /&gt;
:**&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo add-apt-repository -r &amp;quot;deb http://archive.canonical.com/ precise partner&amp;quot;&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 그래픽 프로세서 사용량 보기&lt;br /&gt;
** radeontop&lt;br /&gt;
&lt;br /&gt;
ovg -&amp;gt; avi 동영상 인코딩&lt;br /&gt;
&lt;br /&gt;
* ffmpeg -i input.ovg -vcodec mpeg4 -acodec libmp3lame -ss 00:00:02 -qscale 1 output.avi&lt;br /&gt;
* -ss 시작 시간&lt;br /&gt;
* -qscale 화질, 숫자가 낮으면 좋다&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== USB2VGA 설정 ===&lt;br /&gt;
&lt;br /&gt;
* '''절대 안됨''' 다시는 시도하지 말자. 시간만 날렸다.&lt;br /&gt;
* USB 일련번호 0711:5100 인 싸구려 USB 그래픽카드인데.. 윈도우에서는 되는데 우분투에서는 절대 안됨&lt;br /&gt;
* 우분투 버전 14.04에서 리눅스 커널 4.0으로 업뎃했는데도 안됨&lt;br /&gt;
* lsusb 하면 그제서야 뭔가 하려는 듯 하다가 멈춰버림.&lt;br /&gt;
* 커널에 drivers/usb/misc/sisusbvga/sisusb.c 안에다가 0711:5100 써도 안 됨&lt;br /&gt;
* ko 파일을 만들어서 insmod해도 안 되고 그냥 안됨&lt;br /&gt;
* 무슨 짓을 해도 안됨!!! 짜증&lt;/div&gt;</summary>
		<author><name>Kim135797531</name></author>
	</entry>
</feed>