2018/11/09

[Python] mmap.flush で OSError が出る場合、アラインメントが不適切な可能性あり

Python の [mmap](https://docs.python.jp/3/library/mmap.html) は `flush()` を実行することで変更をディスクに保存します。

この `flush([offset[, size]])` を引数つきで呼ぶときは 「`offset` が `mmap.ALLOCATIONGRANULARITY` の倍数でないといけない」という制約がありますエラーメッセージにその旨出して欲しい。

つまり、以下のように、`offset` の位置を調整しないといけません。

```python
aligned_offset = int(offset / mmap.ALLOCATIONGRANULARITY) * mmap.ALLOCATIONGRANULARITY
mm.flush(aligned_offset, offset - aligned_offset + size)
```

> 参考
>
> [Issue 32798: mmap.flush() on Linux does not accept the "offset" and "size" args - Python tracker](https://bugs.python.org/issue32798)


`offset` の調整をしないと、`OSError` が発生してしまいます。
```
OSError: [Errno 22] Invalid argument
```

最初、このエラーが発生した時、指定した範囲が不正なんじゃないか等、無駄に調べてしまいました…

2018/11/01

GSettings と dconf の関係

「GNOME 3 の設定は [dconf](https://wiki.gnome.org/Projects/dconf) という設定管理システムに保存されていて、[GSettings]([GSettings](https://developer.gnome.org/platform-overview/stable/tech-gsettings.html.en) はそのラッパー」という程度に理解していたのですが、
[Vino の設定をしたり](https://kokufu.blogspot.com/2018/10/ubuntu-1804-vino.html) するうちに、理解が深まってきたのでまとめておこうと思います。

> 参考
>
> [First steps with GSettings – GTK+ Development Blog](https://blog.gtk.org/2017/05/01/first-steps-with-gsettings/)

dconf の schema id と schema path の関係

dconf は設定値を一意に決定する際、`schema id` と `schema path` という2種類の文字列を使用します。

`schema id` は "."(ピリオド)区切りの文字列で、`gsettings` でキーを指定する際のデフォルトです。
これに対し、`schema path` は  "/"(スラッシュ)区切りの文字列で `dconf-editor` の上部に表示されています。

2018/10/31

gsettings で vino を有効にする方法 on Ubuntu 18.04

先日、`dconf` を用いて vino を有効にする方法を書いたのですが、これを `gsettings` を使って出来ないか探ってみました。

> 参考
>
> [Ubuntu 18.04 で Vino を有効にする方法(コマンドラインで)](https://kokufu.blogspot.com/2018/10/ubuntu-1804-vino.html)

2018/10/30

Ubuntu 18.04 で Vino を有効にする方法(コマンドラインで)

「[Vino の設定は gconftool-2 では出来ない](https://kokufu.blogspot.com/2017/09/vino-gconftool-2.html)」 に書いたように、Ubuntu 16.04 までは gsettings を用いて [Vino](https://people.gnome.org/~markmc/remote-desktop-2.html) を有効に出来ましたコマンドラインで。

しかし、Ubuntu 18.04 では `org.gnome.Vino` の中に `enabled` というキーが存在しません。
つまり、先の方法では Vino を有効に出来ません。