Xubuntu16.04を入れていつものごとく LANG=C xdg-user-dirs-gtk-update でホームディレクトリ配下の日本語ディレクトリを英語化したところ、再起動時に下記のようなエラーが出るようになった。
Configured directory for incoming files does not exist Please make sure that directory "/home/user/ダウンロード" exists or configure it with blueman-services
ディレクトリ名の変更で「/home/user/ダウンロード」だったのが「/home/user/Downloads」になったわけだけど、それをblueman側が認識できていないようだ。
何か設定が残っているのではないかとapt-get purgeからのinstallし直してみるも解消せず。
結論としては、下記のスクリプト(自作)を流すことで解消した。未検証のスクリプトなので利用する際は注意されたし。
#! /usr/bin/python3
from blueman.main.Config import Config
from gi.repository import GLib
dir = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD)
config = Config("org.blueman.transfer")
config.set_string('shared-path', dir)
print( config['shared-path'] )
原因としては上記のBluemanのConfigにset_stringされたものがgsettingsにキャッシュされたままになっていて、Blueman側はキャッシュを読みに行くようになっているのでホームディレクトリ配下のディレクトリ変更に追従できなかった模様。
Blueman側は最初に値をキャッシュする際は、下記のコードを使っている。
from gi.repository import GLib GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD) #=> /home/user/Downloads
この値は正しく取れる。
Configに設定されているキャッシュされた値を見ると、日本語のディレクトリ名が返ってくる。
from blueman.main.Config import Config
Config("org.blueman.transfer")["shared-path"]
#=> '/home/user/ダウンロード'
このBluemanのConfigディレクトリ自体はGio.Settings(gsettings)を継承している。gsettingsの値はローカルファイルにキャッシュされており(うちの環境では ~/.config/dconf/user にバイナリ形式で保存されていた)、Bluemanをpurgeしてももちろん消えない。
gsettingsで設定されている値はコマンドラインでも参照できる。
$ gsettings get org.blueman.transfer shared-path
値の設定もコマンドライン上から実行可能。パスをベタで指定する際はこっち使った方が楽そう。
$ gsettings set org.blueman.transfer shared-path '/home/user/Downloads/'