グレインの備忘録

プログラミング関係とかをつらつらと。

wineでフォントが汚い場合の対策

wineを入れたはいいものの、どうにもフォントが汚い。

アンチエイリアスがまるでかかっていないようだ。

スムージングの設定の問題?

スムージングが設定できてないのかと思って、やってみた。

mattintosh.blog.so-net.ne.jp

しかし、全く効果はない。

Xftの問題?

調べたら、あるエントリに行き当たった。

WineHQ Forums • View topic - Font anti-aliasing does not work...

どうやら、xftの設定の一部を消せばいいらしい。

$ xrdb -query | grep -vE 'Xft\.(anti|hint|rgba)' | xrdb

これを実行したらフォントがきれいになった。理由はよくわからない。

NeoVim+neco-ghcでHaskell自動補完

neco-ghcを使ってHaskellの自動補完を有効にする。

github.com

なお、neco-ghcはneocomplete,deoplete,YCMなどで動く。

インストール

Tomlに追加。

<<dein_lazy.toml>>

[[plugins]]
repo = 'eagletmt/neco-ghc'
on_i = 1

あとはdein#install()で完了。

さらに、ghc-modが必要なので入れておく。(stackも必要)

$ stack install ghc-mod

※clockのビルドでエラーが出た方はこちら↓

grainrigi.hatenablog.com

※終わったら、ちゃんと~/.local/binにパスを通すこと(でないと動かない)

使い方

githubのReadme.mdを見れば早い。

動作はかなり軽快だと思う。

stackのclockのビルドで大ハマリした話

ghc-modを入れようとしたらclockのビルドに失敗してハマったのでメモ。

ビルドエラー

ghc-modのところでclockのビルドに失敗した的なメッセージが出たので単体でビルドした結果がこちら。

[naoki@X58A-UD3R ~/WorkDir/haskell] $ stack install clock
clock-0.7.2: configure
clock-0.7.2: build

--  While building package clock-0.7.2 using:
      /home/naoki/.stack/setup-exe-cache/x86_64-linux-tinfo6-nopie/Cabal-simple_m
PHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-tinfo6-nopie/
Cabal-1.24.2.0 build --ghc-options " -ddump-hi -ddump-to-file"
    Process exited with code: ExitFailure 1
    Logs have been written to: /home/naoki/.stack/global-project/.stack-work/logs
/clock-0.7.2.log

    Configuring clock-0.7.2...
    Building clock-0.7.2...
    Preprocessing library clock-0.7.2...
    /tmp/stack18925/clock-0.7.2/Clock.hsc:44:0: 警告: "hsc_alignment" が再定義さ
れました
    /tmp/stack18925/clock-0.7.2/In file included from .stack-work/dist/x86_64-lin
ux-tinfo6-nopie/Cabal-1.24.2.0/build/System/Clock_hsc_make.c:1:0:
    /home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2
/template-hsc.h:88:0: 備考: ここが以前の宣言がある位置です
     #define hsc_alignment(t...) \

    /usr/bin/ld: .stack-work/dist/x86_64-linux-tinfo6-nopie/Cabal-1.24.2.0/build/
System/Clock_hsc_make.o: relocation R_X86_64_32 against `.rodata' can not be used
 when making a shared object。 -fPIC を付けて再コンパイルしてください。
    /usr/bin/ld: 最終リンクに失敗しました: 出力に対応するセクションがありません
    collect2: エラー: ld はステータス 1 で終了しました
    linking .stack-work/dist/x86_64-linux-tinfo6-nopie/Cabal-1.24.2.0/build/Syste
m/Clock_hsc_make.o failed (exit code 1)
    command was: /usr/bin/gcc .stack-work/dist/x86_64-linux-tinfo6-nopie/Cabal-1.
24.2.0/build/System/Clock_hsc_make.o .stack-work/dist/x86_64-linux-tinfo6-nopie/C
abal-1.24.2.0/build/System/Clock_hsc_utils.o -o .stack-work/dist/x86_64-linux-tin
fo6-nopie/Cabal-1.24.2.0/build/System/Clock_hsc_make -fno-PIE -fno-stack-protecto
r -L/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2
/base-4.9.1.0 -Wl,-R,/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.
0.2/lib/ghc-8.0.2/base-4.9.1.0 -L/home/naoki/.stack/programs/x86_64-linux/ghc-tin
fo6-nopie-8.0.2/lib/ghc-8.0.2/integer-gmp-1.0.0.1 -Wl,-R,/home/naoki/.stack/progr
ams/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/integer-gmp-1.0.0.1 -lgmp -
L/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/gh
c-prim-0.5.0.0 -Wl,-R,/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8
.0.2/lib/ghc-8.0.2/ghc-prim-0.5.0.0 -L/home/naoki/.stack/programs/x86_64-linux/gh
c-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/rts -Wl,-R,/home/naoki/.stack/programs/x86_64-
linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/rts -lm -lrt -ldl -lpthread

全然意味がわからん。

結局

ncursesのレガシパッケージが必要とのこと。(ncurses5-compatible)

github.com

別のところで「ncurses-full入れれば一発やで」と書いてあったので自分はそっちを使った。

またもやエラー

ところが、今度はncurses-fullがうまく入らない。

1[naoki@X58A-UD3R ~/WorkDir/haskell] $ yaourt -S ncurses5-compat-libs

==> AUR から ncurses5-compat-libs の PKGBUILD をダウンロード...
x .SRCINFO
x .gitignore
x PKGBUILD
izznogooood commented on 2017-09-05 19:28
gpg --recv-keys C52048C0C0748FEE227D47A2702353E0F7E48EDB

bhimberg commented on 2017-09-06 11:35
This may help some, please comment/correct if I missed something.

For whatever reason, my .gnupg directory was not quite right. I would get an erro
r:
$ gpg --recv-keys C52048C0C0748FEE227D47A2702353E0F7E48EDB
gpg: keyserver receive failed: Cannot assign requested address

I moved my $HOME/.gnupg directory to .gnupg.bak and ran the following:
dirmngr --debug-level guru

This recreated the .gnupg directory and fixed whatever was causing 'Cannot assign
 requested address'. I think it may be related to useradd or something along thos
e lines: root was able to import keys fine, just not this particular user. Maybe
I missed a step in the installation guide?

elicacio commented on 2017-10-02 17:55
Hello guys,

I was able to install the package following the tip of this link https://forum.ma
njaro.org/t/error-trying-to-install-ncurses/19354/2

run the following command:
gpg --keyserver keys.gnupg.net --recv-keys 702353E0F7E48EDB

after:

yaourt -S ncurses5-compat-libs

zor1984qq commented on 2017-10-23 10:20
Thx it works now.

abdo commented on 2017-10-28 18:33
This packages does not build. The linker fails with a missing symbol. I do not fu
lly understand what happened, but looking at the PKGBUILD in core I managed to fi
x it by adding --with-termlib=tinfo --with-ticlib=tic on the ./configure command
line, and removing the symlink to libtinfo.so.5 (because it already exists) from
package().

ncurses5-compat-libs 6.0+20170902-1  (2017-09-04 06:22)
( サポートがないパッケージ: 潜在的に危険です ! )
==> PKGBUILD を編集しますか ? [Y/n] ("A" で中止)
==> ----------------------------------
==> n

==> ncurses5-compat-libs の依存パッケージ:
 - glibc (既にインストールされています)
 - gcc-libs (既にインストールされています)
 - sh (既にインストールされています)


==> ncurses5-compat-libs のビルドを続行しますか ? [Y/n]
==> ----------------------------------------
==>

==> パッケージのビルドとインストール
==> パッケージを作成: ncurses5-compat-libs 6.0+20170902-1 (2017年 12月  4日 月曜
日 21:23:17 JST)
==> ランタイムの依存関係を確認...
==> ビルドタイムの依存関係を確認...
==> ソースを取得...
  -> ダウンロード ncurses-6.0-20170902.tgz...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 3244k  100 3244k    0     0   216k      0  0:00:15  0:00:15 --:--:--  125k
  -> ダウンロード ncurses-6.0-20170902.tgz.asc...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   267  100   267    0     0    267      0  0:00:01 --:--:--  0:00:01   575
==> source で md5sums ファイルを検証...
    ncurses-6.0-20170902.tgz ... 成功
    ncurses-6.0-20170902.tgz.asc ... スキップ
==> gpg でソースファイルの署名を検証...
    ncurses-6.0-20170902.tgz ... 失敗 (不明な公開鍵 702353E0F7E48EDB)
==> エラー: PGP 鍵を検証できませんでした!
==> エラー: Makepkg は ncurses5-compat-libs をビルドできませんでした。
==> ncurses5-compat-libs のビルドを再開しますか ? [y/N]
==> ----------------------------------------
==> N

PGP鍵が検証できない」とさ。これはお決まりのパターン。鍵をインポートすればいい。

yaourt で PGP鍵を検証できない場合の対処

[naoki@X58A-UD3R ~] $ gpg --keyserver http://pgp.mit.edu --recv-keys 702353E0F7E48EDB
gpg: 有効なOpenPGPデータが見つかりません。
gpg:           処理数の合計: 0

???

鍵が見つからないということらしい。

最終的に

結論から言うと、鍵サーバーが違った。

aur.archlinux.org

[naoki@X58A-UD3R ~] $ gpg --keyserver keys.gnupg.net --recv-keys 702353E0F7E48EDB

gpg: key 702353E0F7E48EDB: 鍵がないため142個の署名は検査しません
gpg: /home/naoki/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵702353E0F7E48EDB: 公開鍵"Thomas Dickey <dickey@invisible-island.net>"をインポートしました
gpg: 究極的に信用する鍵が見つかりません
gpg:           処理数の合計: 1
gpg:             インポート: 1

アホらしいこと極まりない。

あとはトントン拍子でうまく行った。

$ yaourt -S ncurses-full
$ stack install clock

おわり。

SSHでGitHubに接続する

パスワード認証の問題点

GitコマンドでGitHubにpush/pullするためには何らかの形で認証方法を与えてやる必要がある。

一つはユーザー名とパスワードを入力する方法である。

ところが、これは毎回パスワードを入力する必要があるので面倒臭い。
(一応パスワードを保存することもできるが、平文で保存されるためセキュリティ上全くよろしくない。)

そこでSSHが登場する。

SSH公開鍵暗号通信

SSHを使えば、最初に鍵生成する手間はかかるが、認証情報を入力する必要はない。

また、マシンごとに秘密鍵を作っておけば漏洩時の対処もしやすい。

ちなみに、SSHのデメリットは特にないと思われる。

鍵生成

鍵生成および通信にはopensshが必要なので入れておく。

$ sudo pacman -S openssh

ssh-keygenで鍵生成。

$ ssh-keygen -t rsa

生成場所はデフォルトのままにしておく。
パスフレーズは設定しても構わないが、設定するとpushのたびに入力する必要がある。

生成が完了したら~/.ssh/id_rsa.pubに公開鍵が生成されているはずなので、中身をコピーする。

あとは、GitHubの「Settings」→「SSH and GPG keys」→右上の「New SSH Key」から登録しておしまい。

HTTPSでcloneしたリポジトリSSHに切り替え

GitHubからcloneするときは大抵HTTPSを使うと思うが、このままではSSHでpush/pullできない。

そこで、モードを切り替える。

対象のローカルリポジトリディレクトリに移動して、

$ git remote set-url origin git@github.com:[ユーザー名]:[リポジトリ名].git

とする。これでsshに切り替わる。

ArchLinuxのインストール 2.5.ユーザー作成編

ArchLinuxでユーザーを作るときに少しハマったのでメモ。

ホームディレクトリをちゃんと作ること

ユーザーの正しい作成方法は、

$ sudo useradd -b/home [ユーザー名]
$ sudo passwd [ユーザー名]
$ sudo mkdir /home/[ユーザー名]
$ sudo chown [ユーザー名] /home/[ユーザー名]

である。特に後半の二行がめっちゃ重要。

ホームディレクトリが存在しないとXが設定ファイルを作れないため、GUIのログインに失敗してしまうのである。

xfceの設定をバックアップ(xfpanel-switch)

xfpanel-switchを使うと、xfceの設定を保存できる。

インストール

ArchLinuxだとAURでメンテナンスされている。

$ yaourt -S xfpanel-switch

おわり。

使い方

パネルを右クリックして、「パネル」→「パネルの設定」を開く。

すると、設定画面に「Backup and Restore」というボタンが追加されている。

あとはツールチップを頼りに設定を保存・エクスポートする。

設定の上書きについて

一度保存した設定を上書きしたい場合は、同名で保存すれば良い。

このとき、同名のものが2つで来ているように見えるが、実際は上書きされているので上書き前のものを消そうとしないこと。

(消すと、先ほど上書き保存したものが消されてしまう。)

ArchLinuxにWifiマネージャとブラウザを入れる

以前に構築したArchLinux環境にWifiマネージャ的なものを入れてみる。

マネージャアプレットのインストール

NetworkManagerを入れてなければ、

$ sudo pacman -S networkmanager
$ sudo systemctl enable NetworkManager.service

で入れておく。

入れ終わったら、

$ sudo pacman -S network-manager-applet xfce4-notifyd gnome-keyring

これで終わり。再ログインしたら右上にアイコンが出るはず。

通知の設定

デフォルトだと通知の表示時間が10秒と長いので変更する。

左上の「アプリケーション」→「設定」→「通知」を開き、「Disappear After」を設定する。

f:id:grainrigi:20171202222705p:plain

ブラウザ

ブラウザはChromiumをチョイス。

火狐も使ってみたのだがなんだがうまく動かない模様。(文字が出ない)

$ sudo pacman -S chromium

おわり。

あとはフォントの設定をしておくこと。(デフォルトは英字がなんか変なので)