$ sudo cat << __EOF__ > /usr/share/lightdm/lightdm.conf.d/10_my.conf [SeatDefaults] # Hiding the user list. greeter-hide-users=true __EOF__ $ cat /usr/share/lightdm/lightdm.conf.d/10_my.conf [SeatDefaults] # Hiding the user list. greeter-hide-users=true $ sudo service lightdm restart
投稿者: matoken
Ubuntu17.04環境にJapanese Teamのパッケージレポジトリを追加
5/3にUbuntu 17.04 日本語 Remixがリリースされました.
デスクトップ利用しているUbuntu 17.04環境が1つあるのでUbuntu Japanese Teamのパッケージレポジトリを追加してみました.
$ wget https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg $ gpg ./ubuntu-ja-archive-keyring.gpg pub dsa1024 2005-05-24 [SC] 3B593C7BE6DB6A89FB7CBFFD058A05E90C4ECFEC uid Ubuntu-ja Archive Automatic Signing Key <archive@ubuntulinux.jp> sub elg2048 2005-05-24 [E] $ sudo apt-key add ./ubuntu-ja-archive-keyring.gpg OK $ wget https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg $ gpg ./ubuntu-jp-ppa-keyring.gpg pub rsa1024 2009-04-05 [SC] 59676CBCF5DFD8C1CEFE375B68B5F60DCDC1D865 uid Launchpad PPA for Ubuntu Japanese Team $ sudo apt-key add ./ubuntu-jp-ppa-keyring.gpg OK $ rm ./ubuntu-jp-ppa-keyring.gpg $ wget https://www.ubuntulinux.jp/sources.list.d/zesty.list $ cat zesty.list ## Ubuntu Japanese LoCo Team's repository for Ubuntu 17.04 ## Please report any bugs to https://bugs.launchpad.net/ubuntu-jp-improvement deb http://archive.ubuntulinux.jp/ubuntu zesty main deb-src http://archive.ubuntulinux.jp/ubuntu zesty main deb http://archive.ubuntulinux.jp/ubuntu-ja-non-free zesty multiverse deb-src http://archive.ubuntulinux.jp/ubuntu-ja-non-free zesty multiverse $ sudo mv ./zesty.list /etc/apt/sources.list.d/ubuntu-ja.list $ sudo apt update $ sudo apt upgrade $ sudo apt install ubuntu-defaults-ja $ apt show ubuntu-defaults-ja Package: ubuntu-defaults-ja Version: 17.04-0ubuntu1~ja3 Priority: optional Section: metapackages Maintainer: Jun Kobayashi <jkbys@ubuntu.com> Installed-Size: 22.5 kB Provides: ubuntu-default-settings Depends: dconf-gsettings-backend | gsettings-backend, language-pack-ja, language-pack-gnome-ja, libreoffice-l10n-ja, libreoffice-help-ja, firefox-locale-ja, thunderbird-locale-ja, fonts-noto-cjk, fonts-takao-pgothic, fonts-takao-gothic, fonts-takao-mincho, poppler-data, cmap-adobe-japan1, fcitx, fcitx-mozc, fcitx-libs-qt5, fcitx-frontend-all, fcitx-frontend-gtk2, fcitx-frontend-gtk3, fcitx-frontend-qt4, fcitx-ui-classic, fcitx-config-gtk, mozc-utils-gui Conflicts: im-setup-helper, ubuntu-default-settings Replaces: im-setup-helper Download-Size: 4,446 B APT-Manual-Installed: yes APT-Sources: http://archive.ubuntulinux.jp/ubuntu zesty/main amd64 Packages Description: Default settings for Japanese/Japan This package contains customized default settings for the Japanese Ubuntu Remix.
Raspberry PiのFreedomBoxで/var/lib/dpkg/statusが壊れたのを復旧
Raspberry PiでFreedomBoxを試しているのですが,ストレージがmicroSDのせいか修正していたパッケージの依存関係か何かがおかしくなったせいか/var/lib/dpkg/status
が壊れてしまいました.
$ sudo apt update Hit:1 http://cdn-fastly.deb.debian.org/debian testing InRelease Reading package lists... Error! E: Unable to parse package file /var/lib/dpkg/status (1) W: You may want to run apt-get update to correct these problems E: The package cache file is corrupted
E: パッケージファイル /var/lib/dpkg/status を解釈することができません (1) W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれません E: パッケージキャッシュファイルが壊れています
apt-get update
で治るのかなと思って叩いてみましたが駄目でした.
Debian リファレンスの第2章 Debian パッケージ管理によると,
2.6.5. パッケージセレクションの復元
もし何らかの理由で “/var/lib/dpkg/status” の内容が腐った場合には、Debian システムはパッケージ選択データーが失われ大きな打撃を被ります。古い “/var/lib/dpkg/status” ファイルは、”/var/lib/dpkg/status-old” や “/var/backups/dpkg.status.*” としてあるので探します。
“/var/backups/” は多くの重要な情報を保持しているので、これを別のパーティション上に置くのも良い考えです。
とのことなので,/var/lib/dpkg/status-old
から復旧をと思いましたがこれも既に壊れているバージョン./var/backups/dpkg.status.0
はまだ壊れていなかったのでこれで上書きして復旧したようです.
$ sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
ディスクイメージのデバイスマップが簡単に作れるkpartxを試す
以下のページでkpartx
というディスクのデバイスマップを作るコマンドがあるのを知りました
そこでまず、kpartxを使って各パーティションのデバイスマップを作ります。
$ sudo /sbin/kpartx -av /opt/atde3-20100309.img
add map loop2p1 : 0 497952 linear /dev/loop2 63
add map loop2p2 : 0 33045705 linear /dev/loop2 498015
$ ls /dev/mapper/
control loop2p1 loop2p2
これでディスクイメージの各物理パーティションに対応したデバイスマップができました。fdiskで見えていたパーティションはそれぞれ、/dev/mapper/loop2p1 /dev/mapper/loop2p2 として参照できるようになっています。
これまでは以下のページのようにfdiskコマンドでパーティション情報を確認してmount時にoffsetを指定していました.
kpartxを使うとこの作業が簡単になりそうなので試してみました.
Debian sid amd64ではそのままkpartx
パッケージだったのでこれを導入します.(Ubuntu 17.04 amd64でも同様でした.)
$ sudo apt install kpartx
丁度Raspbian jessie 2017-04-10が出たのでこれで試してみます.
$ unzip -l 2017-04-10-raspbian-jessie-lite.zip Archive: 2017-04-10-raspbian-jessie-lite.zip Length Date Time Name --------- ---------- ----- ---- 1297862656 2017-04-10 18:58 2017-04-10-raspbian-jessie-lite.img --------- ------- 1297862656 1 file $ time unzip 2017-04-10-raspbian-jessie-lite.zip Archive: 2017-04-10-raspbian-jessie-lite.zip inflating: 2017-04-10-raspbian-jessie-lite.img real 2m58.438s user 0m27.512s sys 0m2.132s sudo /sbin/kpartx -av 2017-04-10-raspbian-jessie-lite.img add map loop0p1 (254:3): 0 83968 linear 7:0 8192 add map loop0p2 (254:4): 0 2442728 linear 7:0 92160 $ ls -lA /dev/mapper/ 合計 0 crw------- 1 root root 10, 236 4月 11 23:37 control lrwxrwxrwx 1 root root 7 4月 12 06:07 loop0p1 -> ../dm-3 lrwxrwxrwx 1 root root 7 4月 12 06:07 loop0p2 -> ../dm-4 lrwxrwxrwx 1 root root 7 4月 11 23:37 sda3_crypt -> ../dm-0 lrwxrwxrwx 1 root root 7 4月 11 23:37 x220--vg-root -> ../dm-1 lrwxrwxrwx 1 root root 7 4月 11 23:37 x220--vg-swap_1 -> ../dm-2
デバイスマッピングされています.これで簡単にmount出来ました.
$ sudo mount -o ro /dev/mapper/loop0p1 /media/mk/pi-boot $ sudo mount -o ro /dev/mapper/loop0p2 /media/mk/pi-root/ $ mount | grep /dev/mapper/loop0p /dev/mapper/loop0p1 on /media/mk/pi-boot type vfat (ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro) /dev/mapper/loop0p2 on /media/mk/pi-root type ext4 (ro,relatime,data=ordered) $ ls /media/mk/pi-boot COPYING.linux bcm2708-rpi-0-w.dtb bcm2708-rpi-cm.dtb bcm2710-rpi-cm3.dtb config.txt fixup_db.dat kernel.img start.elf start_x.elf LICENCE.broadcom bcm2708-rpi-b-plus.dtb bcm2709-rpi-2-b.dtb bootcode.bin fixup.dat fixup_x.dat kernel7.img start_cd.elf LICENSE.oracle bcm2708-rpi-b.dtb bcm2710-rpi-3-b.dtb cmdline.txt fixup_cd.dat issue.txt overlays start_db.elf $ ls /media/mk/pi-root bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
そしてchrootしてみたり
$ sudo mount -o remount,rw /media/mk/pi-root $ sudo cp -p /usr/bin/qemu-arm-static /media/mk/pi-root/usr/bin $ sudo chroot /media/mk/pi-root/ /bin/bash # dpkg --get-selections "*" | wc -l 427
アンマウントして元に戻します.
# exit $ sudo umount /media/mk/pi-* $ sudo kpartx -d /dev/mapper/loop0p1 $ sudo kpartx -d /dev/mapper/loop0p2 $ rm ./2017-04-10-raspbian-jessie-lite.img
便利ですね :)
後は圧縮ファイルをそのまま使えると便利なんですがムリカナ?
OsMoのTripページからGPXを入手するメモ
土日に撮った写真にジオタグをつけようとそのときロギングしていたGPSのログを吸い出そうとしたら見当たりません.GPSロガーの設定がいつの間にかログを保存しない設定になっていました.ボタン部分のゴム部分に穴が開いてしまって防水ではなくなったので土曜の雨の時カバンに入れていたのでそのときにキーロックし忘れて設定が変わったのかもしれません.
保存しない設定になってたorz pic.twitter.com/TOFcU4Df4j
— 鹿児島Linux勉強会04/08 (@matoken) 2017年4月10日
AndroidスマホでOsMoDroidも動作させていたのでこれがログを残していないかと見てみると古いものしかありません.
$ jmtpfs android/ $ ls -ltrA android/内部ストレージ/OsMoDroid | tail -1 -rw-r--r-- 1 mk mk 803382 2月 25 21:35 20170225070457.gpx $ find android -iname "*osmo*" android/内部ストレージ/osmand/tracks/osmo android/内部ストレージ/OsMoDroid android/SDカード/Android/obb/net.osmand.plus/tracks/osmo $ ls -ltrA android/内部ストレージ/OsMoDroid/ | tail -1 -rw-r--r-- 1 mk mk 803382 2月 25 21:35 20170225070457.gpx
自動的に生成されるTripページにルートが表示されるのでこれが取得できないかソースを見てみました.
それっぽいURLをこんな感じで抜き出して,
$ w3m -dump_source 'https://osmo.mobi/h/d8VhsthhuF9rpEDUCNXjOhHxJHdmiNQNRsoR4AEmpF' | sed -n "s/^.*getJSON('\([^']*\)'.*$/\1/p" https://api.osmo.mobi/session_get?url=d8VhsthhuF9rpEDUCNXjOhHxJHdmiNQNRsoR4AEmpF&mode=
そのurlの中を見るとJSONでGPXの項目があるのでjqで抜き出す
$ w3m -dump_source 'https://osmo.mobi/h/d8VhsthhuF9rpEDUCNXjOhHxJHdmiNQNRsoR4AEmpF' | sed -n "s/^.*getJSON('\([^']*\)'.*$/\1/p" | jq -r .gpx https://st.osmo.mobi/htg/d/8/V/hsthhuF9rpEDUCNXjOhHxJHdmiNQNRsoR4AEmpF.gpx
これをDLするとGPXだった.
$ wget https://st.osmo.mobi/htg/d/8/V/hsthhuF9rpEDUCNXjOhHxJHdmiNQNRsoR4AEmpF.gpx
繋げるとこんな感じ
$ w3m -dump_source 'https://osmo.mobi/h/d8VhsthhuF9rpEDUCNXjOhHxJHdmiNQNRsoR4AEmpF' | sed -n "s/^.*getJSON('\([^']*\)'.*$/\1/p" | xargs w3m -dump_source | jq -r .gpx | wget -i -
GPX Viewerで開こうとするとファイルオープン画面から帰ってこなかったですが,GpsPruneだと開けました.ちょっと荒いけど無いよりは全然いいですね.
/proc/cpuinfoのSerialを詐称する
$ cat /proc/cpuinfo | sed -e 's/Serial.*/Serial\t\t: 00000000deadbeef/' > /tmp/cpuinfo_fake $ sudo chmod 444 /tmp/cpuinfo $ sudo chown root.root /tmp/cpuinfo $ sudo mount -o bind /tmp/cpuinfo_fake /proc/cpuinfo $ tail /proc/cpuinfo Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 Hardware : BCM2835 Revision : a01041 Serial : 00000000deadbeef
Podcastが無くなって困る
現在Podcastをpodget
で取得して,
2 * * * * podget -s
その中の新しいものだけをownCloudにコピーしてAndroidやPCで視聴しています.
10 * * * * cd ~mk/POD ; find . -mmin -2880 -type f | egrep -v 'm3u$|LOG\/' | rsync --delete --progress --files-from=- ~mk/POD/ /var/www/owncloud/data/matoken/files/podcast/; find /var/www/owncloud/data/matoken/files/podcast/ -ctime +7 -type f -print0 | xargs -0 rm ; find /var/www/owncloud/data/matoken/files/podcast/news/ -mmin +1`
今日聞こうとしたらownCloud内のPodcastが0個になっていました.心当たりはUbuntu 14.04 LTSからUbuntu 16.04 LTSへのdist-upgrade.ownCloudは上げる前と後に動作確認してたんで他の部分が怪しいとログを見るとpodget
がエラーを吐いています.こんな感じ.
$ podget -s /home/mk/.podget/podgetrc cannot be verified to be compatible with this version of podget. It is missing the version line that is included in configuration files created by newer versions of podget. Please create a new configuration file by running 'podget --create-config <FILENAME>', and then converting your old configuration to the new format. Then move the new file in place of the old and podget will work as it used to.
設定ファイルが使えなくなってるみたいですね.枯れてるのかと思ってたら結構変化があったようです.
ちなみに更新前のバージョンがpodget 0.6.9-1
で現在はpodget 0.7.9-1
でした.
てことで,設定ファイルの雛形を別の場所に書き出して,
$ podget --create-config /tmp/podgetrc podget Configuration filename specified by -c or --create-config violates the following rules... Suggestion(s): 1. Filenames should not include any directory configuration. Remove the directory configuration. If you need to specify a directory other than the default, use the -d or --dir_config command line options. Closing session.
…….--dir_config
付けて再度.
$ podget --dir_config /tmp --create-config podgetrc podget Installing default user configuration file in /tmp/podgetrc Installing default server list configuration. Closing session.
https://gist.github.com/1b5fba2e949409a87e1955e0c779b057
diffを取ってみると設定項目自体はそう変わってない感じですが,設定値が大文字小文字が変わったりしています.
比較しながら書き換えて叩くと動き始めたようです.
$ podget podget Session directory not found, creating Session file not found. Creating podget.18364 . ------------------------------------------------- Category: tech Name: 電脳空間カウボーイズ Downloading feed index from http://feeds.feedburner.com/weblogs/csc 2017-04-06 06:13:13 URL:http://feeds.feedburner.com/weblogs/csc [46549] -> "-" [1] Downloading csc_2017_design2.mp3 from http://onosendai.jp/csc 2017-04-06 06:20:43 URL:http://onosendai.jp/csc/csc_2017_design2.mp3 [51781411/51781411] -> "/home/mk/POD/tech/電脳空間カウボーイズ/csc_2017_design2.mp3" [1] PLAYLIST: Adding tech/電脳空間カウボーイズ/csc_2017_design2.mp3 to /home/mk/POD/New-2017-04-06.m3u Downloading csc_2017_design1.mp3 from http://onosendai.jp/csc 2017-04-06 06:25:04 URL:http://onosendai.jp/csc/csc_2017_design1.mp3 [37304885/37304885] -> "/home/mk/POD/tech/電脳空間カウボーイズ/csc_2017_design1.mp3" [1] PLAYLIST: Adding tech/電脳空間カウボーイズ/csc_2017_design1.mp3 to /home/mk/POD/New-2017-04-06.m3u :
しかし,ダウンロード済みのファイルも取得しているような?
新規のみの設定にしているつもりなんですが,初回は舐めちゃうのかな?2度目のときに確認してみます.
# Force # 0 == Only download new material. # 1 == Force download all items even those you've downloaded before. FORCE=0
とりあえず終わるまではsoundcloud辺りで聞いてます.
その後2回目はちゃんと期待通りの動作するのを確認したのでcrontabに登録し直しました.
etckeeperのmanに載っているREADMEを読もうと思ったら無い
Debian sid amd64のetckeeper
のmanに載っているREADMEを読もうと思ったらそんなファイルは無い.
$ man etckeeper | grep -B1 README SEE ALSO /usr/share/doc/etckeeper/README.md.gz $ lv /usr/share/doc/etckeeper/README.md.gz /usr/share/doc/etckeeper/README.md.gz: No such file or directory $ ls -lA /usr/share/doc/etckeeper/ 合計 40 -rw-r--r-- 1 root root 4679 7月 18 2016 README.mdwn.gz -rw-r--r-- 1 root root 11645 8月 2 2016 changelog.Debian.gz -rw-r--r-- 1 root root 1785 7月 18 2016 copyright -rw-r--r-- 1 root root 948 7月 18 2016 index.mdwn -rw-r--r-- 1 root root 483 7月 18 2016 install.mdwn -rw-r--r-- 1 root root 55 7月 18 2016 news.mdwn -rw-r--r-- 1 root root 309 7月 18 2016 todo.mdwn $ dpkg -L etckeeper | grep README /etc/etckeeper/commit.d/README /etc/etckeeper/init.d/README /etc/etckeeper/post-install.d/README /etc/etckeeper/pre-commit.d/README /etc/etckeeper/pre-install.d/README /etc/etckeeper/unclean.d/README /etc/etckeeper/uninit.d/README /etc/etckeeper/update-ignore.d/README /usr/share/doc/etckeeper/README.mdwn.gz $ dpkg-query -W etckeeper etckeeper 1.18.5-1
/usr/share/doc/etckeeper/README.mdwn.gz
が内容からしてそれぽい.
バグぽいので報告しようかと思って既存のバグを眺めると既に報告されて上流で修正済みのようでした.
バックライト制御コマンドのybacklight
awesome wmでバックライトの制御にxbacklight
コマンドを使っていたのですが,手元のDebian sid amd64環境ではNo outputs have backlight property
というエラーで現在利用できなくなっています.
$ xbacklight -get No outputs have backlight property $ xbacklight = 100 No outputs have backlight property $ xbacklight + 10 No outputs have backlight property $ xbacklight - 10 No outputs have backlight property
workaroundとしてこんな感じで手で叩いていてちょっとあれです.持ち出さないPCなのであまり操作しないのでどうにかなってるけど不便です.
$ sudo sh -c "echo 1000 > /sys/class/backlight/intel_backlight/brightness"
しかし,gdm3のログイン画面ではFn+Home/Fm+End
でバックライトの変更が出来ることに気づきました.
なんか進展あったのかな?とバグレポを眺めているとそれらしいものは見つからないけれど,
- #833508 – xbacklight reports “No outputs have backlight property” – Debian Bug report logs
- 96572 – xbacklight doesn’t work with modesetting on intel
ybacklight
というものが紹介されているのに気づきました.
利用方法はxbacklight
と同じです.
$ ybacklight -h Usage: /home/mk/bin/ybacklight [options] Options: -d <driver> or -driver <driver>: Use driver <driver> (NB: -display is also supported for compatibility) -help: Print this help -set <percentage> or = <percentage>: Set backlight to <percentage> -inc <percentage> or + <percentage>: Increase backlight by <percentage> -dec <percentage> or - <percentage>: Decrease backlight by <percentage> -get: Get backlight percentage -time <ignored> or -steps <ignored>: Unsupported, ignored -v: Verbose output
読むのはいけますが,変更は出来ません.
$ ybacklight -get 30 $ ybacklight +10 Permissions conflict. Can't write to: ( /sys/class/backlight/intel_backlight/brightness )
/sys/class/backlight/intel_backlight/brightness
に書き込み権をつけると行けます.
$ ls -l /sys/class/backlight/intel_backlight/brightness -rw-r--r-- 1 root root 4096 4月 5 06:48 /sys/class/backlight/intel_backlight/brightness $ sudo chmod o+w /sys/class/backlight/intel_backlight/brightness $ ls -l /sys/class/backlight/intel_backlight/brightness -rw-r--rw- 1 root root 4096 4月 5 06:48 /sys/class/backlight/intel_backlight/brightness $ ybacklight +10 40 $ ybacklight -10 30
ちょっと微妙.
gdm3でユーザーリストの非表示が無効になっていたのを調べる
Debian sid amd64のgdm3の画面でユーザーリストを表示しないようにしていたのですが,表示されるようになっていました.
これまでは,
/etc/gdm3/greeter.dconf
ファイルの以下の設定を有効にしていました.
disable-user-list=true
$ apt-get changelog gdm3
( /usr/share/doc/gdm3/changelog.Debian.gz)を見るとこんな記述が,
* greeter.dconf-defaults: this is a new file to remove the old greeter.gsettings * Convert greeter.gsettings to greeter.dconf-defaults at postinst time and use ucf to update the file. * Make a direct symlink to the new greeter.dconf-defaults file in the dconf defaults directory.
gdm3 (3.12.1-1)からgreeter.dconf-defaults
に変わったようです.
$ ls /etc/gdm3/ Init PostLogin PostSession PreSession Xsession daemon.conf daemon.conf.dpkg-dist greeter.dconf greeter.dconf-defaults greeter.dconf-defaults.ucf-old
内容はほとんど同じなようです.
$ diff /etc/gdm3/greeter.dconf /etc/gdm3/greeter.dconf-defaults 26,27d25 < #logo='/usr/share/icons/gnome/48x48/places/debian-swirl.png' < #fallback-logo='/usr/share/icons/gnome/48x48/places/debian-swirl.png' 31d28 < 33c30 < disable-user-list=true --- > # disable-user-list=true 37,38c34,35 < #banner-message-enable=true < #banner-message-text='Welcome!!!!!!!!!!!!!!!!!!!!!!' --- > # banner-message-enable=true > # banner-message-text='Welcome'
ということで/etc/gdm3/greeter.dconf-defaults
のdisable-user-list=true
を有効にしたらOKでした.
diff --git a/gdm3/greeter.dconf-defaults b/gdm3/greeter.dconf-defaults index c5b0786..b0ee10c 100644 --- a/gdm3/greeter.dconf-defaults +++ b/gdm3/greeter.dconf-defaults @@ -27,7 +27,7 @@ logo='/usr/share/icons/hicolor/48x48/emblems/emblem-debian-white.png' fallback-logo='/usr/share/icons/hicolor/48x48/emblems/emblem-debian-white.png' # - Disable user list -# disable-user-list=true +disable-user-list=true # - Disable restart buttons # disable-restart-buttons=true # - Show a login welcome message
#ちなみにこのとき$ sudo service gdm3 restart
としたらなんかおかしくなってしまいました…….OSごと再起動したら治りました.
gdm3でdisable-user-list=trueが効かない
greeter.dconfからgreeter.dconf-defaultsに変わってる?defaults側でdisable-user-list=trueにしてgdm3上げ直したら酷いことに
遠隔から修正したorz pic.twitter.com/TIPmlC6cWY— 鹿児島Linux勉強会04/08 (@matoken) 2017年4月4日
次から気づきやすいように
$ sudo dpkg-reconfigure apt-listchanges
で「APTで表示すべき変更内容の種類を選択してください。」を「両方 – ニュースと changelog の両方」にしておきました.testing/unstable辺りはちゃんと読まないとですね…….
※apt-listchangesが入っていない場合は$ sudo apt install apt-listchanges