Edited at

Bash on Ubuntu on Windows で Emacs をビルドする

More than 1 year has passed since last update.


2016/12/28 追記

こちらの方法 なら、ウィンドウサイズまわりの挙動も問題無いようです.

echo 0 > /proc/sys/kernel/randomize_va_space

sudo apt-get install libperl-dev
sudo apt-get install libgtk2.0-dev
curl -Ss -L https://gist.githubusercontent.com/nanasess/f04cb2a8926c5423e47efec4327b340a/raw/05b8ae147a6a3425f516c574c8d89471f1849bc6/xselect.c.patch | patch -p1
./configure x86_64-pc-linux-gnu --with-x-toolkit=gtk2 --with-libotf --with-m17n-flt --prefix=/usr/local/emacs
make
sudo make install
## Fix dbus session.conf
sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

echo 2 > /proc/sys/kernel/randomize_va_space


2016/11/8 追記

最近の emacs-snapshot なら X 経由で起動できるようです。

sudo add-apt-repository ppa:ubuntu-elisp/ppa

sudo apt-get update
sudo apt-get install emacs-snapshot
sudo update-alternatives --config emacs ## and select emacs-snapshot


See Also


Bash on Ubuntu on Windows で apt-get install emacs とすれば、 Emacs をインストールできます。ただし、 GUI の環境 で Emacs を起動しようとすると、以下のような Warning で起動できません。

(emacs:305): GConf-WARNING **: Client failed to connect to the D-BUS daemon:

Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

どうも、 D-BUS と会話がうまくできないようなので、 --without-dbus でビルドすることにします。


必要なパッケージのインストール

sudo apt-get install libXpm-dev libjpeg-dev libgif-dev libtiff4-dev libncurses5-dev libgtk-3-dev libgnutls-dev libmagick++-dev

libgtk-3-dev 以外はお好みで。


exec-shield の問題の対応

そのまま make すると、 途中で core dump してしまう ので randomize_va_space を無効化しておきます。

sudo -s

echo 0 > /proc/sys/kernel/randomize_va_space


ビルド

curl -LO http://ftpmirror.gnu.org/emacs/emacs-24.5.tar.gz

tar xvzf emacs-24.5.tar.gz
cd emacs-24.5
./configure --with-x-toolkit=gtk3 --without-dbus --prefix=/usr/local/emacs
make
sudo make install

指定した --prefix にインストールされます。

上記の例の場合、 /usr/local/emacs/bin/emacs で起動します。


最後に

randomize_va_space を元に戻しておきましょう

echo 2 > /proc/sys/kernel/randomize_va_space


その他

AddressFamily inet 

ListenAddress 0.0.0.0
X11UseLocalhost yes

AddressFamilyListenAddress よりも先に書く必要があります。


参考