[step:Identify each subbundle with the pullback of the tautological bundle]
Let $E\subset X\times\mathbb{R}^n$ be a smooth rank-$k$ vector subbundle, and let $f_E:X\to\operatorname{Gr}(k,n)$ be the map constructed above. The pullback bundle has total space
\begin{align*}
f_E^*\gamma_k^n=\{(x,(W,v))\in X\times\gamma_k^n:W=f_E(x)\}.
\end{align*}
Define $\Phi:f_E^*\gamma_k^n\to E$ by
\begin{align*}
\Phi(x,(f_E(x),v))=(x,v).
\end{align*}
This map is well-defined because $(f_E(x),v)\in\gamma_k^n$ means $v\in f_E(x)=E_x$. Its inverse is the map $\Psi:E\to f_E^*\gamma_k^n$ defined by
\begin{align*}
\Psi(x,v)=(x,(f_E(x),v)).
\end{align*}
Both maps cover the identity map on $X$, and both are linear on each fibre.
It remains to verify smoothness in local trivializations. Fix $x_0\in X$. By the construction of $f_E$, after replacing $X$ near $x_0$ by an open neighbourhood $U\subset X$, there are a subset $I\subset\{1,\dots,n\}$ with $|I|=k$ and a smooth map $A:U\to\operatorname{Lin}(\mathbb{R}^I,\mathbb{R}^{I^c})$ such that
\begin{align*}
E_x=\{u+A(x)u:u\in\mathbb{R}^I\}
\end{align*}
for every $x\in U$. Define the local trivialization $\theta_E:U\times\mathbb{R}^I\to E|_U$ by
\begin{align*}
\theta_E(x,u)=(x,u+A(x)u),
\end{align*}
and define the local trivialization $\theta_{\gamma}:U\times\mathbb{R}^I\to (f_E^*\gamma_k^n)|_U$ by
\begin{align*}
\theta_{\gamma}(x,u)=(x,(f_E(x),u+A(x)u)).
\end{align*}
The inverse coordinate map for both trivializations is obtained by applying $P_I$ to the vector component, because $P_I(u+A(x)u)=u$. In these coordinates,
\begin{align*}
\theta_E^{-1}\circ\Phi\circ\theta_{\gamma}(x,u)=(x,u)
\end{align*}
and
\begin{align*}
\theta_{\gamma}^{-1}\circ\Psi\circ\theta_E(x,u)=(x,u).
\end{align*}
Thus $\Phi$ and $\Psi$ are smooth in vector-bundle local trivializations, with smooth local representatives equal to the identity map on $U\times\mathbb{R}^I$. Therefore
\begin{align*}
E\cong f_E^*\gamma_k^n
\end{align*}
as vector bundles over $X$.
[/step]