読者です 読者をやめる 読者になる 読者になる

もやし日誌

日記のようなもの

Windows10の仮想デスクトップをOSXのMission Control風に操作できる、TaskViewGestureToolkitをつくってみた

Mac OS XのMission Controlみたいに三本指で横にスワイプすると仮想デスクトップを切り替える機能がWindows10の仮想デスクトップに無かったのでつくってみました。

こんな風に動きます

SynapticsタッチパッドとWacomペンタブレットに対応

  • 3本指タッチに対応したSynapticsタッチパッド
  • 4本指タッチに対応したWacomペンタブレット(Wacom feel™ Multi-Touchに対応したもののみ)

Wacomペンタブレットはドライバ側で3本指でのタップでドラッグ操作できる機能があり、潰すのも勿体無いので4本指にしました。
(近いうちに3本指にもできるように、コンフィグファイルか何かで対応する予定です)
Synaptics社製タッチパッドは多くのノートパソコンに搭載されているので、結構多くの機種で使えるかと思います。
ちなみにThinkpad X1 Carbon 4th genもSynaptics社のタッチパッドが搭載されていました。

操作方法

3本指、もしくは4本指(Wacomペンタブレットの場合)で左右にスワイプでデスクトップ切り替え上下にスワイプでタスクビューの表示です

導入

TaskViewGestureToolkitと干渉してしまうので、各デバイスのドライバ側で設定されているジェスチャーを外してください。

Wacomペンタブレット

f:id:kazuki09:20160730024015p:plainf:id:kazuki09:20160730024020p:plain 4本指のジェスチャーの設定を外しておきます。

Synapticsタッチパッド

f:id:kazuki09:20160730024532p:plain 3本指のジェスチャーの設定を外しておきます。

f:id:kazuki09:20160730135326p:plain

動作には.NET Framework 4.6が必要になります。(Windows10には最初から入ってるので追加インストールの必要なし)
アプリケーションを起動するとウィンドウ等は何も表示されずタスクトレイに常駐するので、試しに3本指でスワイプしてみて動けばそれで完了です。

ダウンロード

github.com

反応が遅いときは...?

アプリケーション側で擬似的にショートカットキーを送信しているのでうまく動作しないことがあります。
タスクトレイに常駐しているアイコンの右クリックメニューより"Use API to switch desktop"オプションを有効にしてください。
これにより仮想デスクトップの切り替えをWin32API経由で行うようになりますが、切替時のアニメーション効果が無くなります。

既知の不具合

  • スリープから復帰した際に反応しなくなることがある
    →タスクトレイアイコンの右クリックメニューより、Reload pluginsを実行する。(各デバイスのプラグインが再ロードされます)
  • Wacomペンタブレットをアプリケーション起動後に接続しても反応しないことがある
    →タスクトレイアイコンの右クリックメニューより、Reload pluginsを実行する。(ワコムプラグインが再ロードされ、新しく接続したデバイスを認識します)

改善要望等は

Twitter(@myskng)にお願いします。
記事へのコメントだと気付かない事が多いので、Twitterにリプライ送っていただければ確実に対応できるのでそちらでお願いします。

Linux版SoftEther VPN Clientでプロキシを使う方法

大学の学内ネットワーク(HTTP/HTTPSプロキシのみがゲートウェイに使える環境)からSSHを使う必要が出たので、その時に外部のVPN鯖を使ってバイバスした時のメモ。
クライアント・サーバー両方にArch Linuxを使いました。

クライアントにサーバーを登録する

ここではクライアントのインストールが完了し、仮想NICが既に追加されている前提で話を進めます。

VPN Client>AccountCreate
AccountCreate コマンド - 新しい接続設定の作成
接続設定の名前: hogevpn

接続先 VPN Server のホスト名とポート番号: hogehoge.com:443

接続先仮想 HUB 名: vpn_tun0(セットアップした仮想HUB名に合わせる)

接続するユーザー名: hogeuser

使用する仮想 LAN カード名: VPN(ここはサーバー側の設定を参照すること)

コマンドは正常に終了しました。

次にアカウントのパスワードを設定します

VPN Client>AccountPasswordSet
AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定
接続設定の名前: hogevpn

パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。

パスワード: *****
確認入力  : *****


standard または radius の指定: standard

コマンドは正常に終了しました。

学内プロキシを設定します。

VPN Client>AccountProxyHttp  hogevpn  /SERVER:hogegate.hogeuniv.ac.jp:8080
AccountProxyHttp コマンド - 接続設定の接続方法を HTTP プロキシサーバー経由接続に設定
コマンドは正常に終了しました。

僕が通っている大学の場合は認証IDやパスワードは要求されず、初回接続時にブラウザ上で学内での統合認証IDを入力するようになっていたのでここでは何も認証関連のことは設定しませんでしたが、場合によっては必要になることがあるでしょう。その時は

VPN Client>AccountProxyHttp  hogevpn  /SERVER:hogegate.hogeuniv.ac.jp:8080 /USERNAME:hogeuser  /PASSWORD:hogepass
AccountProxyHttp コマンド - 接続設定の接続方法を HTTP プロキシサーバー経由接続に設定
コマンドは正常に終了しました。

みたいにします。 ちなみに、これらの設定は次回以降は必要になりません。コンフィグが保存されるはずなので次回以降は設定名での接続が可能になります。

ルーティングを設定する

Windows版のSoftEther VPN Clientは自動的にルーティングを調整しますが、Linux版にそれは無いので自力で設定します。
必要になるのは、プロキシサーバーのIPアドレス デフォルトゲートウェイのIPアドレスです。 予めip aとかで調べておきましょう。

ip route delete default
ip route add (プロキシのアドレス) via (デフォルトゲートウェイのアドレス) dev (物理NIC名)

接続する

VPN Client>AccountConnect
AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始
接続設定の名前: hogevpn

コマンドは正常に終了しました。

上手くつながったらdhclientを使ってDHCPでアドレスを取ってきましょう。

dhclient vpn_tun0

以上です。

最後に

f:id:kazuki09:20160712034758p:plain 雑ですが仕組み的にはこんな感じになってるはずです。

Windows10のUEFIブートローダーを修復してみた

先日Windows10 Pro x64を再インストールしたところ何故かUEFIブートローダー(Windows Boot Manager)がLinuxを入れている方のSSDに入ってしまい、それを取り外した際にWindowsが起動しなくなったのでUbuntuのLiveDVDとWindowsのインストールメディアを使って修復してみたのでメモ。

構成

f:id:kazuki09:20160703224758p:plain
SSD1にはWindows、SSD2にはArch Linuxという構成で運用していたが、SSD1の中身を全て削除した上でパーティショニングを全てWindowsインストーラーに任せてWindowsのインストールをしたところSSD1にはEFI領域が作られず勝手にSSD2の方のEFI領域にブートローダーが入ってしまった模様。

パーティションを弄る

Windowsのdiskpartコマンドがあまりにも使いづらいので今回はUbuntuのLiveDVD上のGPartedを使ってパーティションを操作します。
f:id:kazuki09:20160703225601p:plain
最終的には上記のようなパーティション構成にしたいので

  1. Windowsが入っている領域を100MB縮小し、右に寄せる
  2. 元々あった16MBのMSRパーティション(Microsoft予約パーティション)を消す
  3. 100MBのFAT32パーティション(EFIパーティション)を作り、boot,espフラグを付ける
  4. EFIパーティションの後ろに16MB分のパーティションを作成し、clearedでフォーマットし、msftresフラグを付ける

f:id:kazuki09:20160703191828j:plain
f:id:kazuki09:20160703191816j:plain
作業完了後にはこんな感じになるはずです。
パーティションの縮小と移動に1時間程要するのでお茶でも飲みながらのんびりやりましょう。

UEFIファームウェアからWindows Boot Managerを消す

UbuntuのLiveDVDのターミナルを立ち上げ、root権限で

[root@HogeHost ~]# efibootmgr
BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0002,0000,0017,0001,0018,001A,001B,001C,0019,0021
Boot0000* Windows Boot Manager
Boot0001 grub
Boot0002* rEFInd Boot Manager
Boot0010 Setup
Boot0011 Boot Menu
Boot0012 Diagnostic Splash Screen
Boot0013 Lenovo Diagnostics
Boot0014 Startup Interrupt Menu
Boot0015 Rescue and Recovery
Boot0016 MEBx Hot Key
Boot0017* USB CD
Boot0018 USB FDD
Boot0019* NVMe0
Boot001A* ATA HDD0
Boot001B* USB HDD
Boot001C* PCI LAN
Boot001D* IDER BOOT CDROM
Boot001E* IDER BOOT Floppy
Boot001F* ATA HDD
Boot0020* ATAPI CD
Boot0021* PCI LAN

efibootmgr -B -b 0000

Windows Boot ManagerはBoot0000に割り当てられているみたいなのでこれを削除します。
EFIパーティションに残骸が残っていると勝手に再登録されることがあるので、Microsoft関連のものは削除しておきます。
(適当にマウントしてEFI/Boot/bootx64.efiEFI/Microsoft/*を削除)

Windowsインストールメディアを使ってブートローダーを再構築する

f:id:kazuki09:20160704001913j:plain
Windowsインストーラーを起動後、"コンピューターを修復する"からコマンドプロンプトを起動します。

X:\Sources>diskpart
DISKPART>list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン          2794 GB      0 B        *
  ディスク 1    オンライン           931 GB  5120 KB   *
  ディスク 2    オンライン           232 GB      0 B        *
  ディスク 3    オンライン           111 GB      0 B        *

Windowsが入ってるディスクを選択します。ここでは例として2を選択します。

DISKPART>select disk 2

ディスク選択後、パーティションのリストを出力しドライブレターを割り当てます。

DISKPART>list part

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               100 MB  1024 KB
  Partition 3    予約                  16 MB   101 MB
  Partition 2    プライマリ              232 GB   117 MB

この場合だと1番目のパーティションEFIパーティション、2番目のパーティションWindowsが入っているパーティションになります。

DISKPART>select part 1
DISKPART>assign letter=S
DISKPART>select part 2
DISKPART>assign letter=C

CドライブにするとわかりやすいのでCに割り当ててますが、既に割り当てられている場合もあるでしょう。その時は、

DISKPART>list vol
DISKPART>select vol 4
DISKPART>remove letter=C

のようにドライブレターの割り当てを解除すればおkです。もしくは別の割り当てられていないドライブレターに割り当てましょう。
ドライブレターを割り当てたらexitでdiskpartを抜けます。

X:\Sources>bcdboot C:\Windows /s S: /f UEFI

最後にbcdbootコマンドでブートローダーのインストールとUEFIファームウェアへの登録をします。
BCDboot のコマンド ライン オプション
コマンドライン引数についてはMSDNの方参照お願いします。
f:id:kazuki09:20160703200658j:plain
問題無さそうならコマンドプロンプトを閉じてPCを再起動しましょう。