ubuntu 16.04 設定まとめ

バージョンチェック

cat /etc/lsb-release

設定スクリプト

#!/bin/bash

# 16.04

CURRENT=`pwd`

if [ $CURRENT != $HOME ]; then
    echo "Error: Run in your home folder"
    exit;
fi

# rm folders
rm -rf Videos/ Templates/ Public/ Pictures/ Music/ Documents/

# apport
sudo rm -rf /var/crash/*
grep "enabled=1" /etc/default/apport >/dev/null
if [ $? -eq 0 ]; then
    sudo emacs /etc/default/apport
fi

# apt-get (install)
sudo apt-get install -y \
    mdadm \
    build-essential \
    xclip \
    fonts-vlgothic \
    global \
    emacs24-nox \
    unrar \
    python-setuptools \
    git-core \
    curl \
    wireshark \
    vlc \
    p7zip \
    python-pip \
    libgtest-dev \
    gnome-session-flashback \
    gconf-editor \
    unity-tweak-tool gnome-tweak-tool \
    nodejs npm \
    compizconfig-settings-manager compiz-plugins \
    ubuntu-desktop \
    gnome-do \
    xbacklight

# IME
sudo apt-get install -y fcitx-mozc
im-config -n fcitx

# Gtk Emacs
gsettings set org.gnome.desktop.interface gtk-key-theme Emacs

# Window buttons
gsettings set org.gnome.desktop.wm.preferences button-layout 'menu:minimize,maximize,close'

# Disable password input after Suspend
gsettings set org.gnome.desktop.lockdown disable-lock-screen 'true'

# Set default list style in Nautilus
gsettings set org.gnome.nautilus.preferences default-folder-viewer 'list-view'

# Capslock
dconf reset /org/gnome/settings-daemon/plugins/keyboard/active
dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"

# disable a system-ready sound
if [ -f /usr/share/sounds/ubuntu/stereo/system-ready.ogg ]; then
    sudo mv /usr/share/sounds/ubuntu/stereo/system-ready.ogg /usr/share/sounds/ubuntu/stereo/system-ready.ogg.bak
fi

# Terminal font
gconftool-2 --get /apps/gnome-terminal/profiles/Default/font
gconftool-2 --set --type string /apps/gnome-terminal/profiles/Default/font "VL Gothic 12"
fc-list | grep vl

# Beyond Compare 4
# http://www.scootersoftware.com/
which bcompare
if [ $? -eq 1 ]; then
    sudo apt-get install -y libqtwebkit4 libqt4-opengl
    sudo dpkg -i  $HOME/Dropbox/DESKTOP/SETUP/bcompare-4.1.8.21575_amd64.deb
fi

ターミナルの CJK の設定

  • Profile -> Compatibility -> Ambiguous-width characters --> Wide

Unity を使わない

  • gnome-session-flashback を使う
    • テーマ
      • 今まで使っていた New Wave は消えたので、Ambiance をメインする
      • gnome-tweek-tool で設定を変更できる
    • タスクバーの設定
      • ログインセッションが Flashback (Compiz) だとおかしい。Metacity にすれば Alt + 右クリック で好きなように設定できる

gnome-do

  • Alt+Space に Summon Do を割り当てるには競合しているキーバインドをまず解除する必要がる
    • System Tools - System Setting - Keyboard - Shortcuts - Activate the window menu の Alt+Space を Disabled にする

Firefox

  • Amazon Video 見られるようになった。
  • Preferences --> Content" --> Play DRM content
sudo add-apt-repository ppa:mozillateam/firefox-next
sudo apt update

ubuntu 側で、 /etc/adjtime を設定 (/etc/default/rcS から変更された)

sudo timedatectl set-local-rtc 1

音声出力先のデフォルト値を /etc/pulse/default.pa で修正

set-default-sink alsa_output.pci-0000_02_00.1.hdmi-stereo-extra1


以下は過去のメモの統合

cron

  • /var/spool/cron/crontabs/username
  • gem

RAID1 の構成

  • Fakeraid (Onboard) は使わない
  • 2TB 以上の場合は GPT を使う

初回構成時

sudo parted /dev/sdx
mklabel gpt
mkpart primary ext4 1M -1

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[xy]1
sudo mdadm -D /dev/md0

sudo mkfs.ext4 /dev/md0

sudo blkid

sudo vi /etc/fstab
UUID=XXXX /mnt/md0 ext4 defaults 0 0

再マウント時

sudo mdadm --assemble /dev/md0 /dev/sd[xy]1
sudo mdadm -D /dev/md0

sudo blkid

sudo vi /etc/fstab
UUID=XXXX /mnt/md0 ext4 defaults 0 0

paiza POH Vol.5

解答(ミナミ)

#!/usr/bin/env ruby

file = $stdin
lines = file.readlines
file.close

x, y = lines[0].split.map{|a| a.to_i}
t = lines[1, y].map{|b| b.split.map{|a| a.to_i}}

count_list = []
  
for i in 0..x - 1
  count = 0
  for j in 0..y - 1
    count += 1 if t[j][i] == 1
  end
  count_list += [count]
end

for j in 0..y - 1
  line = ""
  for i in 0..x - 1
    c = count_list[i] > y - 1 - j ? 1 : 0
    line += c.to_s + " "
  end
  puts line.rstrip
end

解答(レナ)

#!/usr/bin/env ruby

file = $stdin
lines = file.readlines
file.close

x, y, n = lines[0].split.map{|a| a.to_i}
t = lines[1, y].map{|b| b.split.map{|a| a.to_i}}
rects = lines[y + 1, n].map{|b| b.split.map{|a| a.to_i}}
  
sum = 0

for rect in rects
  for pos_y in (rect[1] - 1)..(rect[3] - 1)
    for pos_x in (rect[0] - 1)..(rect[2] - 1)
      sum += t[pos_y][pos_x]
      t[pos_y][pos_x] = 0
    end
  end
end

puts sum

コードの覚え書き

解説を読んでのメモ

paiza POH Vol.4 野田さん攻略

解答

#!/usr/bin/env ruby

file = $stdin
lines = file.readlines
file.close

t, n = lines[0].split.map{|x| x.to_i}
m_list = lines[1, n].map{|x| x.to_i}

max_sum = sum = m_list[0, t].inject(0){|sum, x| sum + x}

for i in t..n - 1
  sum += -m_list[i - t] + m_list[i]
  max_sum = [max_sum, sum].max
end
  
puts max_sum

コードの覚え書き

  • 3番目のみ計算量を考慮して差分だけ計算するようにした

解説を読んでのメモ

  • しゃくとり法というらしい。累積和はあんまり道具として身についていないな。

paiza POH Vol.3 霧島京子攻略

解答

#!/usr/bin/env ruby

file = $stdin
lines = file.readlines
file.close

m = lines[0].to_i
n = lines[1].to_i
companies = lines[2, n].map{|x| x.split.map{|y| y.to_i}}
companies.sort!{|a, b| b[0] <=> a[0]}

map_q_to_r = {}
map_q_to_r[0] = 0

left_q_sum = companies.inject(0){|sum, x| sum + x[0]}

for q,r in companies
  new_map_q_to_r = {}
  for sq, sr in map_q_to_r
    next if sq + left_q_sum < m
    new_map_q_to_r[sq] = sr
  end
  for sq, sr in map_q_to_r
    if new_map_q_to_r.has_key?(sq + q)
      new_map_q_to_r[sq + q] = [map_q_to_r[sq + q], sr + r].min
    else
      new_map_q_to_r[sq + q] = sr + r
    end
  end
  map_q_to_r = new_map_q_to_r
  left_q_sum -= q
end

min_cost = -1
for sq, sr in map_q_to_r
  if sq >= m
    if min_cost < 0
      min_cost = sr
    else
      min_cost = [min_cost, sr].min
    end
  end
end

puts min_cost

コードの覚え書き

  • 動的計画法で人数をキーにして、その人数での最小コストをメモ化してナップサック問題を解く
  • 残りの会社の総人数を加えてもプロジェクトに必要な人数に届かないメモは捨てる

解説を読んでのメモ

  • 霧島さんの水着壁紙が素晴らしい。

Bootstrap のメモ

テーブルを固定幅にする

  • td に .span をつけることでグリッドシステムが使える。12 等分より細かい位置調整は div を併用してネストする。
  • ただし、テキストが長い場合は word-break:break-all (あるいは word-wrap:break-word, overflow-wrap:break-word) を忘れずに。

Ajax とキャッシュについて

cache: false

Ajax でリクエストが実際に発行されずにレスポンスがブラウザのキャッシュから参照されるのを避ける。

$.ajax({
    cache: false,
});

これによって実際にはタイムスタンプ等のパラメータがリクエストに付与され、ブラウザが前回とは異なるリクエストとして処理する。$.ajaxSetup でも設定できる。

http://api.jquery.com/jQuery.ajax/#toptions

location.reload(true)

ページを動的生成していると、うっかり true をつけないとキャッシュから古い結果が表示される。