Rabbit Slide Show

DebianでFirefoxをカスタマイズするには

2016-12-10

Description

2016/12/10にサイボウズ株式会社にて開催された[Mini Debian Conference Japan 2016](http://miniconf.debian.or.jp/)の発表資料です。

Text

Page: 1

DebianでFirefoxを
カスタマイズするには
How to customize Firefox on Debian
Kentaro Hayashi
ClearCode Inc.
Mini Debian Conference Japan 2016
2016-12-10

Page: 2

自己紹介(1)
Profile
Twitter/GitHub: @kenhys
所属: トラックポイント・ソフトドーム派

Page: 3

自己紹介(2)
Profile
トラックポイント・ソフトドーム派

Page: 4

参考画像の出典
http://www.irasutoya.com/

Page: 5

パッケージ関連の活動
As a contributor
groonga (全文検索エンジン)
groonga-normalizer-mysql
libhinawa
fcitx-imlist
hal-flash (Flashを延命させるアレ)
growl-for-linux

Page: 6

閑話休題
そろそろ本題に
Back on topic

Page: 7

本日の話題
Today's topics
Firefoxのカスタマイズのこと
About how to customize Firefox

Page: 8

話さないこと
I don't talk about...
アドオンの作り方
How to create addon
WebExtensions

Page: 9

会場のみなさんに質問
Question 1
ブラウザは何を使っていますか?
What browsers do you love?

Page: 10

ブラウザシェア
Browser stats
デスクトップにおけるシェアの推移(by
StatCounter)

Page: 11

chromium on debian

Page: 12

firefox on debian

Page: 13

iceweasel on debian

Page: 14

firefox-esr on debian

Page: 15

会場のみなさんに質問
Question 2
Firefoxカスタマイズしていますか?
Do you customize Firefox?

Page: 16

カスタマイズいろいろ
Customizing ...
設定メニューからオプションを変更
Tweak via options
アドオンをインストール
Install addons
user.jsを修正する
Modify user.js
システム全体の設定
System-wide configuration

Page: 17

カスタマイズいろいろ
Customizing ...
設定メニューからオプションを変更
Tweak via options
アドオンをインストール
Install addons
user.jsを修正する
Modify user.js
システム全体の設定
System-wide configuration

Page: 18

アドオンをインストール
Install addons
https://addons.mozilla.org/en-US/firefox/

Page: 19

必須のアドオン
Must install these addons
Tab Groups
ツリー型タブ
Tree Style Tab
Vimperator
注:個人の感想です。
Personally, I recomends these addons

Page: 20

アドオン on debian
Addons on debian
$ apt search xul | grep xul-ext | wc -l
79
aptでインストール可能なパッケージがこれだけあ
る

Page: 21

aptでインストール
Easy to install by apt
$ sudo apt install xul-ext-iceweasel-branding

Page: 22

Iceweasel風Firefox
Mimic iceweasel
Firefoxを使っていたと思ったらIceweaselだった

Page: 23

インストールのされかた
How xpi is installed?
xpiそのままインストール
Install xpi as is
展開済みのaddonとしてインストール
Install as unpacked addon

Page: 24

拡張はどこに?
Where is extension installed?
$ dpkg -S /usr/lib/firefox/browser/extensions/\{972ce4c6-7e08-4474-a285-3208198ce6fd\}.xpi
firefox: /usr/lib/firefox/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi
デフォルトのテーマは
xpiとしてインストールされている

Page: 25

拡張はどこに?
Where is extension installed?
/usr/share/xul-ext/iceweasel-brandingに展開
/usr/share/xul-ext/iceweasel-branding
├── chrome
│
├── content
│
│
├── about-logo.png
│
│
├── about-logo@2x.png
│
│
├── about-wordmark.png
│
│
├── about-wordmark.svg
│
│
├── about.png
│
│
├── aboutDialog.css
│
│
├── aboutIceweasel
│
│
│
├── aboutIce.js
│
│
│
├── aboutIce.manifest
│
│
│
└── ice.xhtml
│
│
├── browser-overlay.css
│
│
├── icon128.png
│
│
├── icon16.png
│
│
├── icon32.png
│
│
├── icon48.png
│
│
├── icon64.png
│
│
└── unofficial
│
│
├── identity-icons-brand.svg
│
│
└── silhouette-40.svg
│
└── locale
│
├── brand.dtd
│
├── brand.properties
│
└── ice.dtd
├── chrome.manifest
├── icon.png
├── icon64.png
└── install.rdf

Page: 26

カスタマイズいろいろ
Customizing ...
設定メニューからオプションを変更
Tweak via options
アドオンをインストール
Install addons
user.jsを修正する
Modify user.js
システム全体の設定
System-wide configuration

Page: 27

user.jsを修正する
Modify user.js
伝統的なカスタマイズ方法
Traditional way to customize
~/.mozilla/firefox/(プロファイル)/user.jsに置く
Put user.js as ~/mozilla/firefox/(profile)/user.js

Page: 28

user.jsの例
Example how to customize user.js
user_pref("browser.tabs.closeWindowWithLastTab", false);
最後のタブを閉じたときにウィンドウを閉じない
Do not close window even though last tab is closed

Page: 29

user.jsは万能ではない
user.js is suitable for specific purpose
プロファイルごとに設定
Need to configure each profile
プロファイルで管理されていない項目は不可
It should be managed by profile
集中管理するのには不向き
Not suitable for centralized management
FirefoxSyncでよいのでは?
FirefoxSync may be better solution?

Page: 30

カスタマイズいろいろ
Customizing ...
設定メニューからオプションを変更
Tweak via options
アドオンをインストール
Install addons
user.jsを修正する
Modify user.js
システム全体の設定
System-wide configuration

Page: 31

システム全体の設定は
How to do system-wide configuration?
/etc/firefox/*.js
/etc/firefox/以下に置いた任意の.jsで設定できる
Any *.js is ok under /etc/firefox/

Page: 32

Debian固有の設定
Debian specific configuration
設定ファイルの場所
The configuration file is:
/usr/lib/firefox/browser/defaults/syspref/
firefox.js-> /etc/firefox/firefox.js

Page: 33

Debian固有の設定(1)
Debian specific configuration
拡張の更新を有効
Enable to update extensions
pref("extensions.update.enabled", true);

Page: 34

Debian固有の設定(2)
Debian specific configuration
LANGに応じてロケールを設定
Use LANG environment variable to choose locale
pref("intl.locale.matchOS", true);

Page: 35

Debian固有の設定(3)
Debian specific configuration
既定のブラウザチェック無効
Disable default browser checking
pref("browser.shell.checkDefaultBrowser", false);

Page: 36

Debian固有の設定(4)
Debian specific configuration
OpenH264は無効
Disable OpenH264
pref("media.gmp-gmpopenh264.enabled", false);

Page: 37

Debian固有の設定(5)
Debian specific configuration
新規タブはクラシックスタイルに
Default to classic view for about:newtab
sticky_pref("browser.newtabpage.enhanced", false);

Page: 38

Debian固有の設定(6)
Debian specific configuration
ヘルスレポートは無効
Disable health report upload
pref("datareporting.healthreport.uploadEnabled", false);

Page: 39

設定方法いろいろ
pref(...) family
defaultPref('...')
lockPref('...')
pref('...')
sticky_pref('...')

Page: 40

defaultPref('...')
初期設定値を指定
prefs.jsには原則保存されない

Page: 41

lockPref('...')
設定を変更させない

Page: 42

pref('...')
ユーザーが変更可能

Page: 43

sticky_pref('...')
prefs.jsにデフォルト値に関わらず保存
通常は設定を変更したらprefs.jsに保存

Page: 44

組織向けにFirefoxを
Firefox for organizations
個人なら好きにカスタマイズでいい
組織利用はまた別の観点が必要

Page: 45

組織利用の観点だと
Point of view from organizations
プロキシの設定をしたい
統計情報は送りたくない
勝手にアップデートしない

Page: 46

組織内向けカスタマイズ
How to customize for organization
Mozilla Japan 法人向け情報
https://www.mozilla.jp/business/

Page: 47

参考記事の紹介(1)
Blog entry how to customize
「Firefox・Thunderbirdの組織内向けカスタマイズの
方法の簡単な紹介と比較」
http://www.clear-code.com/
blog/2014/3/27.html

Page: 48

参考記事の紹介(2)
Blog entry how to customize
user.js
MCD
ActiveDirectoryのポリシー
CCK2 Wizard
その他

Page: 49

MCD?
McDonald?

Page: 50

MCDとは?
What is MCD?
Mission Control Desktop
Netscape由来の集中管理機構
autoconfig.jsとautoconfig.cfg

Page: 51

autoconfig.js
/usr/lib/firefox/pref/autoconfig.js
pref("general.config.filename", "autoconfig.cfg");
pref("general.config.vendor", "autoconfig");
pref("general.config.obscure_value", 0);

Page: 52

autoconfig.cfg
/usr/lib/firefox/autoconfig.cfg
// 1行目は必ずコメントとしてください。
lockPref("autoadmin.global_config_url", "http://xxx/autoconfig.jsc");

Page: 53

autoconfig.jsc
ネットワーク経由で参照可能な場所に配置
中身は単なるprefやlockPref

Page: 54

こんなときどうする?
設定例がわからなくて困った
「技術的なよくある質問」
https://www.mozilla.jp/business/faq/tech/

Page: 55

こんなときどうする?
「技術的なよくある質問」をみても解決しない

Page: 56

firefox-support-
common
https://github.com/clear-code/firefox-support-
common

Page: 57

firefox-support-
common
カスタマイズ事例集のリポジトリ
There are use cases in this repository

Page: 58

firefox-support-
common
configurations/customization-items.ods
具体的なカスタマイズ方法が記載
Practical use cases are there

Page: 59

customization-
items.ods
カスタマイズ事例をシートで分類
customization-items
menuitem-shortcut-disable-items
misc-ui-disable-items

Page: 60

customization-
items.ods
カスタマイズ事例をシートで分類
customization-items
menuitem-shortcut-disable-items
misc-ui-disable-items

Page: 61

customization-items
ポリシーを満たすための設定例
セキュリティ
プライバシー
自動更新
Firefox38/45ESRでの設定方法/設定内容

Page: 62

customization-
items.ods
カスタマイズ事例をシートで分類
customization-items
menuitem-shortcut-disable-items
misc-ui-disable-items

Page: 63

menuitem-shortcut-
disable-items
メニューのショートカットを無効にするための設
定
ショートカットから実行できてはまずい
Firefox38/45ESRでの設定方法/設定内容

Page: 64

customization-
items.ods
カスタマイズ事例をシートで分類
customization-items
menuitem-shortcut-disable-items
misc-ui-disable-items

Page: 65

misc-ui-disable-items
非表示にしたい項目の設定例
例:セキュリティパネル非表示化
Firefox38/45ESRでの設定方法/設定内容

Page: 66

どうやって?
How?
カスタマイズ用のアドオンを活用
Use specific addons to customize

Page: 67

カスタマイズのアドオン
Addon to customize
GlobalChrome.css
UI Text Overrider
Force Addon Status

Page: 68

カスタマイズのアドオン
Addon to customize
GlobalChrome.css
UI Text Overrider
Force Addon Status

Page: 69

GlobalChrome.css
ユーザースタイルシート機能
Provides user stylesheet
globalChrome.cssを所定の場所に配置
Put globalChrome.css in specific path
https://addons.mozilla.org/ja/firefox/addon/
globalchromecss/

Page: 70

カスタマイズのアドオン
Addon to customize
GlobalChrome.css
UI Text Overrider
Force Addon Status

Page: 71

UI Text Overrider
UI要素のラベルやツールチップテキストなどを変
更
Enable to customize UI labels, tooltips and so on
https://addons.mozilla.org/ja/firefox/addon/
ui-text-overrider/

Page: 72

カスタマイズのアドオン
Addon to customize
GlobalChrome.css
UI Text Overrider
Force Addon Status

Page: 73

Force Addon Status
アドオンの有効・無効の状態を強制的に変える機
能
https://addons.mozilla.org/ja/firefox/addon/force-
addon-status/

Page: 74

できることの一例
単機能アドオンの組み合わせでkiosk端末っぽく
参考:全部入りのkioskモード
https://addons.mozilla.org/ja/firefox/addon/
mkiosk/

Page: 75

使い方
odsに記載のサンプルコードをコピペ
目的に応じて個別の設定例をコピペ

Page: 76

GlobalChrome.css
@-moz-document url-prefix("chrome://browser/content/browser.xul") {
(セレクタ),
*[always-hidden="true"] {
display: none !important;
-moz-user-focus: ignore !important;
}
}

Page: 77

UI Text Overrider(1)
// disable shortcuts and UI
var killedItems = [];
var killedItemsWithDelay = [];
var hiddenItemsWithDelay = [];

Page: 78

UI Text Overrider(2)
killedItems.push("(ここにセレクタを記載)");

Page: 79

UI Text Overrider(3)
function setKillItemRule(aIdentifier, aSelector, aDelayed, aDisableCommand) {
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier, aSelector);
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".disabled", "true");
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".hidden", "true");
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".readonly", "true");
if (aDisableCommand) {
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".command", "");
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".oncommand", "");
}
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".always-hidden", "true");
lockPref("extensions.uitextoverrider@clear-code.com." + aIdentifier + ".delayed", aDelayed == true);
}
killedItems.join(","),
false, true);
setKillItemRule("killedItems",
setKillItemRule("killedItemsWithDelay", killedItemsWithDelay.join(","), true, true);
setKillItemRule("hiddenItemsWithDelay", hiddenItemsWithDelay.join(","), true, false);

Page: 80

Force Addon Status
lockPref("extensions.force-addon-status@clear-code.com.plugins.0.pattern", "^Java(\\(TM\\)| )");
lockPref("extensions.force-addon-status@clear-code.com.plugins.0.enabledState", 0);"

Page: 81

まとめ
集中管理ならまずはMCDがよい
カスタマイズ専用アドオンが役立つ
過去のノウハウは
firefox-support-commonをチェック

Other slides

DebConf20 DebConf20
2020-08-25