「Tp smapi」の版間の差分
(→3番目のオプション、カーネル: 微修正) |
(→1番目のオプション、カスタムスクリプト: 情報を更新) |
||
(同じ利用者による、間の4版が非表示) | |||
10行目: | 10行目: | ||
Ivy Bridge プロセッサあるいはそれよりも新しいプロセッサ (型番が {{ic|*30}}, {{ic|*40}}, {{ic|*50}} のモデル) が搭載された最新の Thinkpad にインストールしても、tp_smapi は動作しません。{{Pkg|tpacpi-bat}} か {{AUR|tpacpi-bat-git}} を使って下さい。 |
Ivy Bridge プロセッサあるいはそれよりも新しいプロセッサ (型番が {{ic|*30}}, {{ic|*40}}, {{ic|*50}} のモデル) が搭載された最新の Thinkpad にインストールしても、tp_smapi は動作しません。{{Pkg|tpacpi-bat}} か {{AUR|tpacpi-bat-git}} を使って下さい。 |
||
− | ==インストール== |
+ | == インストール == |
− | 最近 community リポジトリに移動された {{Pkg|tp_smapi}} パッケージを[[インストール]]してください。カスタムカーネルの [[linux-ck]] を使っている場合は [[AUR]] からインストールできる {{AUR|tp_smapi-ck}} が存在します。 |
||
+ | {{Pkg|linux}} の場合は {{Pkg|tp_smapi}} パッケージ、または {{Pkg|linux-lts}} の場合は {{Pkg|tp_smapi-lts}} を [[インストール]] します。他のすべてのカーネル (例:{{Pkg|linux-zen}}) の場合は、{{AUR|tp_smapi-dkms}} の使用を検討してください。 |
||
− | パッケージによって3つの新しい[[カーネルモジュール]]が追加されます: |
||
+ | ''tp_smapi'' (およびそのバリエーション) は、次の [[カーネルモジュール]] を提供します。 |
||
− | {| class="wikitable" align="center" style="width:100%; text-align:left;" |
||
− | |- style="text-align: center;" |
||
− | | colspan="2" | '''カーネルモジュール''' |
||
− | |- style="text-align: center;" |
||
− | | width="30%" |'''名前''' |
||
− | | |'''説明''' |
||
− | |- |
||
− | |tp_smapi |
||
− | | |
||
− | ThinkPad SMAPI サポート |
||
− | |- style="border-top:1px solid #aaaaaa;" |
||
− | |hdaps |
||
− | | |
||
− | IBM [[Hard Drive Active Protection System]] (HDAPS) ドライバー |
||
− | |- style="border-top:1px solid #aaaaaa;" |
||
− | |thinkpad_ec |
||
− | | |
||
− | ThinkPad の組み込みコントローラハードウェアへのアクセス (tp_smapi と hdaps のどちらも依存) |
||
− | |} |
||
+ | ; tp_smapi: ThinkPad SMAPI サポート |
||
− | 再起動後、tp_smapi とその依存モジュールは自動的にロードされ、{{ic|/sys/devices/platform/smapi}} 下の sysfs インターフェイスが使えるようになります。 |
||
+ | ; hdaps: IBM ハードドライブアクティブ保護システム ([[HDAPS]]) ドライバー |
||
+ | ; thinkpad_ec: ThinkPad 組み込みコントローラーのハードウェアアクセス ({{ic|tp_smapi}} と {{ic|hdaps}} は両方ともこれに依存します) |
||
+ | |||
+ | 再起動後、{{ic|tp_smapi}} とその依存関係が自動ロードされ、{{ic|/sys/devices/platform/smapi/}} の sysfs インターフェイスが完全に機能するようになります。 |
||
==機能== |
==機能== |
||
59行目: | 44行目: | ||
echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh |
echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh |
||
− | + | [[ヘルプ:読み方#実行可能属性の付与|実行可能]] にします。このスクリプトを使用すると、バッテリーのしきい値を設定するのが非常に簡単になります。 |
|
+ | 次のように入力するだけです (set_battery_thresholds がスクリプトの名前の場合): |
||
+ | |||
set_battery_thresholds 0 96 100 |
set_battery_thresholds 0 96 100 |
||
− | 引数を付けないで実行すると、BAT0 の閾値が 40% と 80% に設定されます。 |
||
+ | または、引数を指定せずに実行すると、デフォルトで BAT0 になり、しきい値が 40% と 80% になります。 |
||
− | スクリプトに実行可能属性を付与してください: |
||
+ | |||
− | # chmod 744 /usr/sbin/set_battery_thresholds |
||
+ | 起動時に [[systemd]] にスクリプトを実行させます。したがって、{{ic|tp_smapi_set_battery_thresholds.service}} ユニットを作成し、その後 [[起動/有効化]] します。 |
||
− | + | {{hc|/etc/systemd/system/tp_smapi_set_battery_thresholds.service|2= |
|
− | {{bc|<nowiki> |
||
[Unit] |
[Unit] |
||
Description=Set Battery Charge Thresholds by tp_smapi |
Description=Set Battery Charge Thresholds by tp_smapi |
||
78行目: | 64行目: | ||
[Install] |
[Install] |
||
WantedBy=multi-user.target |
WantedBy=multi-user.target |
||
+ | }} |
||
− | </nowiki>}} |
||
+ | バッテリーで動作させることも可能です。これには、[[acpid]] がインストールされ、実行されている必要があります。{{ic|/etc/acpi/handler.sh}} を編集します。 |
||
− | そして systemd で有効化: |
||
− | # systemctl enable tp_smapi_set_battery_thresholds.service |
||
− | バッテリーが接続されたときもスクリプトを実行させるには、[[acpid]] をインストール・設定している必要があります。{{ic|/etc/acpi/handler.sh}} を編集してください: |
||
#... other ACPI stuff |
#... other ACPI stuff |
||
battery) |
battery) |
||
113行目: | 97行目: | ||
{{Note|最初の2つのオプションは、T42p では機能しません。3つ目は E540 に対応しています。}} |
{{Note|最初の2つのオプションは、T42p では機能しません。3つ目は E540 に対応しています。}} |
||
− | === 1番目のオプション |
+ | === 1番目のオプション, カスタムスクリプト === |
* 上述のようにスクリプト {{ic|/usr/sbin/set_battery_thresholds}} を作成 |
* 上述のようにスクリプト {{ic|/usr/sbin/set_battery_thresholds}} を作成 |
||
* オリジナルの {{ic|/etc/acpi/handler.sh}} を {{ic|/etc/acpi/handler.sh.start}} にコピー |
* オリジナルの {{ic|/etc/acpi/handler.sh}} を {{ic|/etc/acpi/handler.sh.start}} にコピー |
||
* 上述のように {{ic|/etc/acpi/handler.sh}} を編集して {{ic|/etc/acpi/handler.sh.stop}} にコピー |
* 上述のように {{ic|/etc/acpi/handler.sh}} を編集して {{ic|/etc/acpi/handler.sh.stop}} にコピー |
||
− | 以下のスクリプトをコピーして |
+ | 次に、以下のスクリプトをコピーして実行可能にし、好みに合わせて値を調整し、root cron として数分ごとに実行します。 |
+ | #!/bin/bash |
||
− | {{bc|<nowiki> |
||
+ | |||
− | #!/bin/bash |
||
+ | CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-) |
||
− | |||
+ | |||
− | CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-) |
||
+ | if [ $CURRENTCHARGE -gt 80 ]; then |
||
− | |||
+ | cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh |
||
− | if [ $CURRENTCHARGE -gt 80 ]; then |
||
+ | echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh |
||
− | cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh |
||
+ | exit 0 |
||
− | echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh |
||
+ | fi |
||
− | exit 0 |
||
+ | if [ $CURRENTCHARGE -lt 60 ]; then |
||
− | fi |
||
+ | cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh |
||
− | if [ $CURRENTCHARGE -lt 60 ]; then |
||
+ | echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh |
||
− | cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh |
||
+ | exit 0 |
||
− | echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh |
||
+ | fi |
||
− | echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh |
||
+ | |||
− | exit 0 |
||
+ | exit 0 |
||
− | fi |
||
− | |||
− | exit 0 |
||
− | </nowiki>}} |
||
=== 2番目のオプション, tpacpi-bat === |
=== 2番目のオプション, tpacpi-bat === |
||
バッテリーの充電の閾値を制御するには、AUR から Perl スクリプトの {{Pkg|tpacpi-bat}} または {{AUR|tpacpi-bat-git}} をインストールします。 |
バッテリーの充電の閾値を制御するには、AUR から Perl スクリプトの {{Pkg|tpacpi-bat}} または {{AUR|tpacpi-bat-git}} をインストールします。 |
||
− | |||
− | 次を実行して {{ic|acpi_call}} カーネルモジュールをロードしてください: |
||
− | # modprobe acpi_call |
||
− | もしくは {{ic|/etc/rc.config}} の MODULES にカーネルモジュールを追加します。 |
||
手動で閾値を設定するには以下を実行: |
手動で閾値を設定するには以下を実行: |
||
152行目: | 129行目: | ||
上記の例で指定している 40 や 80 はバッテリーの最大容量からのパーセンテージです。必要に応じて調整してください。また、上記の行を {{ic|/etc/rc.local}} に追加することで起動時に実行させることができます。上記の値は永続的なはずですが、バッテリーを抜いたときに値がリセットされることがあります。 |
上記の例で指定している 40 や 80 はバッテリーの最大容量からのパーセンテージです。必要に応じて調整してください。また、上記の行を {{ic|/etc/rc.local}} に追加することで起動時に実行させることができます。上記の値は永続的なはずですが、バッテリーを抜いたときに値がリセットされることがあります。 |
||
− | {{Note|コマンドのリストは tpacpi-bat のヘルプを見て下さい: {{ic|perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h}} |
+ | {{Note|コマンドのリストは tpacpi-bat のヘルプを見て下さい: {{ic|perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h}}}} |
− | === 3番目のオプション |
+ | === 3番目のオプション, カーネル === |
カーネル 4.17 には、ThinkPad のバッテリ充電のしきい値を直接調整するオプションが追加されました。 |
カーネル 4.17 には、ThinkPad のバッテリ充電のしきい値を直接調整するオプションが追加されました。 |
2023年10月13日 (金) 10:40時点における最新版
tp_smapi は ThinkPad ノートパソコンのハードウェアから情報を取得したりコマンドを送信したりするカーネルモジュールのセットです。tp_smapi の情報は /sys/devices/platform/smapi
ファイルシステムに存在します。/proc
ファイルシステムと同じように、ファイルから情報を読み書きしたりハードウェアにコマンドを送信することが可能です。サポートされている ThinkPad ノートパソコンを使っている場合は、tp_smapi をインストールすることが強く推奨されます。
目次
サポートされているノートパソコン
まず、あなたのノートパソコンがサポートされているかどうか確認してください。Thinkwiki に サポートされている Thinkpad の完全なリスト が載っています。あなたの TP が stop_threshold をサポートしておらず start_threshold しかサポートしていない場合は #部分的にサポートされているノートパソコンの対処方法 を見て下さい。
Ivy Bridge プロセッサあるいはそれよりも新しいプロセッサ (型番が *30
, *40
, *50
のモデル) が搭載された最新の Thinkpad にインストールしても、tp_smapi は動作しません。tpacpi-bat か tpacpi-bat-gitAUR を使って下さい。
インストール
linux の場合は tp_smapi パッケージ、または linux-lts の場合は tp_smapi-lts を インストール します。他のすべてのカーネル (例:linux-zen) の場合は、tp_smapi-dkmsAUR の使用を検討してください。
tp_smapi (およびそのバリエーション) は、次の カーネルモジュール を提供します。
- tp_smapi
- ThinkPad SMAPI サポート
- hdaps
- IBM ハードドライブアクティブ保護システム (HDAPS) ドライバー
- thinkpad_ec
- ThinkPad 組み込みコントローラーのハードウェアアクセス (
tp_smapi
とhdaps
は両方ともこれに依存します)
再起動後、tp_smapi
とその依存関係が自動ロードされ、/sys/devices/platform/smapi/
の sysfs インターフェイスが完全に機能するようになります。
機能
以下は tp_smapi を使って行えることの一部です。自由に追加してください。
バッテリーの充電の制御
長時間にわたってノートパソコンのバッテリーを満充電の状態にしておくことは良いことではありません 。長時間バッテリーを使わなければならない状況ではないかぎり、できるだけバッテリーは 40-80% ほど残っている状態にしておくべきです。
一般的な方法
tp_smapi を使うことで充電を開始したり停止する閾値を制御することができます。以下のコマンドを実行して適当な値を設定してください:
echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh echo 80 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh
上記の場合、バッテリーが 40% 以下になると充電が開始され、80% を超えるとそれ以上充電しなくなります。このように設定することでバッテリーの寿命を伸ばすことができます。
バッテリーを一度抜いて、再挿入したりすると、設定した閾値はデフォルトの値にリセットされることがあります。リセットを回避するには、値を設定するスクリプトを作成して、起動時やバッテリーが接続されたときにスクリプトを実行させるようにしてください。より詳しい手順は以下のとおりです。
スクリプト /usr/sbin/set_battery_thresholds
を作成:
#!/bin/sh # set the battery charging thresholds to extend battery lifespan echo ${2:-40} > /sys/devices/platform/smapi/BAT${1:-0}/start_charge_thresh echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh
実行可能 にします。このスクリプトを使用すると、バッテリーのしきい値を設定するのが非常に簡単になります。 次のように入力するだけです (set_battery_thresholds がスクリプトの名前の場合):
set_battery_thresholds 0 96 100
または、引数を指定せずに実行すると、デフォルトで BAT0 になり、しきい値が 40% と 80% になります。
起動時に systemd にスクリプトを実行させます。したがって、tp_smapi_set_battery_thresholds.service
ユニットを作成し、その後 起動/有効化 します。
/etc/systemd/system/tp_smapi_set_battery_thresholds.service
[Unit] Description=Set Battery Charge Thresholds by tp_smapi [Service] Type=oneshot ExecStart=/usr/sbin/set_battery_thresholds RemainAfterExit=yes [Install] WantedBy=multi-user.target
バッテリーで動作させることも可能です。これには、acpid がインストールされ、実行されている必要があります。/etc/acpi/handler.sh
を編集します。
#... other ACPI stuff battery) case "$2" in BAT0) case "$4" in 00000000) ;; 00000001) /usr/sbin/set_battery_thresholds ;; #... more ACPI stuff
設定が反映されているかどうか確認
設定が反映されたかどうか確認するには、以下の出力を確認します:
cat /sys/devices/platform/smapi/BAT0/start_charge_thresh cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh
ハードディスクを落下から保護
tp_smapi にはノートパソコンの加速度計を読み取って、ハードドライブにダメージを与える落下などの動きを検出できるドライバーが含まれています。この機能に関する情報は HDAPS のページを見て下さい。
部分的にサポートされているノートパソコンの対処方法
部分的にしかサポートされていないノートパソコンでも、バッテリーの制御ができることがあります。まず実際にサポートされている機能を確認してください:
cat /sys/devices/platform/smapi/BAT0/start_charge_thresh cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh
start-charge_thresh
はサポートされているのに stop_charge_thresh
はサポートされていない場合でも、コンピュータに充電を止めさせる方法が2つあります。
1番目のオプション, カスタムスクリプト
- 上述のようにスクリプト
/usr/sbin/set_battery_thresholds
を作成 - オリジナルの
/etc/acpi/handler.sh
を/etc/acpi/handler.sh.start
にコピー - 上述のように
/etc/acpi/handler.sh
を編集して/etc/acpi/handler.sh.stop
にコピー
次に、以下のスクリプトをコピーして実行可能にし、好みに合わせて値を調整し、root cron として数分ごとに実行します。
#!/bin/bash CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-) if [ $CURRENTCHARGE -gt 80 ]; then cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh exit 0 fi if [ $CURRENTCHARGE -lt 60 ]; then cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh exit 0 fi exit 0
2番目のオプション, tpacpi-bat
バッテリーの充電の閾値を制御するには、AUR から Perl スクリプトの tpacpi-bat または tpacpi-bat-gitAUR をインストールします。
手動で閾値を設定するには以下を実行:
tpacpi-bat -v -s startThreshold 0 40 tpacpi-bat -v -s stopThreshold 0 80
上記の例で指定している 40 や 80 はバッテリーの最大容量からのパーセンテージです。必要に応じて調整してください。また、上記の行を /etc/rc.local
に追加することで起動時に実行させることができます。上記の値は永続的なはずですが、バッテリーを抜いたときに値がリセットされることがあります。
3番目のオプション, カーネル
カーネル 4.17 には、ThinkPad のバッテリ充電のしきい値を直接調整するオプションが追加されました。
echo 60 > /sys/class/power_supply/BAT0/charge_stop_threshold echo 40 > /sys/class/power_supply/BAT0/charge_start_threshold
値を表示しようとすると最後のセットのみが表示され、128が追加されます。
これは既知の問題ですが、バッテリの動作からわかるように実際は別の値が設定されています。
他の興味深いパラメータは /sys/class/power_supply/BAT 0/
にあります。